From d437b9dc1ff4287cb7a5c7e35aa13017764cd920 Mon Sep 17 00:00:00 2001 From: NagyVikt Date: Fri, 15 May 2026 14:42:11 +0200 Subject: [PATCH] Add fleet-ui card inner helper --- .../.openspec.yaml | 2 + .../proposal.md | 17 +++ .../specs/ios-card-inner-helper-sub11/spec.md | 14 +++ .../tasks.md | 34 ++++++ .../README.md | 30 +++++ .../architect/.openspec.yaml | 9 ++ .../architect/README.md | 12 ++ .../architect/prompt.md | 34 ++++++ .../architect/proposal.md | 15 +++ .../architect/specs/architect/spec.md | 10 ++ .../architect/tasks.md | 33 ++++++ .../checkpoints.md | 4 + .../coordinator-prompt.md | 41 +++++++ .../critic/.openspec.yaml | 9 ++ .../critic/README.md | 12 ++ .../critic/prompt.md | 34 ++++++ .../critic/proposal.md | 15 +++ .../critic/specs/critic/spec.md | 10 ++ .../critic/tasks.md | 33 ++++++ .../executor/.openspec.yaml | 9 ++ .../executor/README.md | 12 ++ .../executor/checkpoints.md | 4 + .../executor/prompt.md | 34 ++++++ .../executor/proposal.md | 15 +++ .../executor/specs/executor/spec.md | 10 ++ .../executor/tasks.md | 33 ++++++ .../kickoff-prompts.md | 108 ++++++++++++++++++ .../open-questions.md | 6 + .../phases.md | 15 +++ .../planner/.openspec.yaml | 9 ++ .../planner/README.md | 12 ++ .../planner/plan.md | 65 +++++++++++ .../planner/prompt.md | 34 ++++++ .../planner/proposal.md | 15 +++ .../planner/specs/planner/spec.md | 10 ++ .../planner/tasks.md | 33 ++++++ .../summary.md | 8 ++ .../verifier/.openspec.yaml | 9 ++ .../verifier/README.md | 12 ++ .../verifier/prompt.md | 34 ++++++ .../verifier/proposal.md | 15 +++ .../verifier/specs/verifier/spec.md | 10 ++ .../verifier/tasks.md | 33 ++++++ .../writer/.openspec.yaml | 9 ++ .../writer/README.md | 12 ++ .../writer/prompt.md | 34 ++++++ .../writer/proposal.md | 15 +++ .../writer/specs/writer/spec.md | 10 ++ .../writer/tasks.md | 33 ++++++ rust/fleet-ui/src/card.rs | 56 ++++++++- 50 files changed, 1076 insertions(+), 6 deletions(-) create mode 100644 openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/.openspec.yaml create mode 100644 openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/proposal.md create mode 100644 openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/specs/ios-card-inner-helper-sub11/spec.md create mode 100644 openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/tasks.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/README.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/.openspec.yaml create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/README.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/prompt.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/proposal.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/specs/architect/spec.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/tasks.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/coordinator-prompt.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/.openspec.yaml create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/README.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/prompt.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/proposal.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/specs/critic/spec.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/tasks.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/.openspec.yaml create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/README.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/checkpoints.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/prompt.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/proposal.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/specs/executor/spec.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/tasks.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/kickoff-prompts.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/phases.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/.openspec.yaml create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/README.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/plan.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/prompt.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/proposal.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/specs/planner/spec.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/tasks.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/.openspec.yaml create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/README.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/prompt.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/proposal.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/specs/verifier/spec.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/tasks.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/.openspec.yaml create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/README.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/prompt.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/proposal.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/specs/writer/spec.md create mode 100644 openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/tasks.md diff --git a/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/.openspec.yaml b/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/.openspec.yaml new file mode 100644 index 0000000..9f70866 --- /dev/null +++ b/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-05-15 diff --git a/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/proposal.md b/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/proposal.md new file mode 100644 index 0000000..d2c215f --- /dev/null +++ b/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/proposal.md @@ -0,0 +1,17 @@ +## Why + +- Fleet dashboards need a shared primitive for painting an inset iOS glass + surface inside an existing rounded card without each binary rebuilding the + same Block chrome. + +## What Changes + +- Add `fleet_ui::card::card_inner(frame, area, tint)` as an additive helper + that renders a rounded, tinted inner surface with `IOS_HAIRLINE_BORDER`. +- Add focused regression coverage for corner glyphs, hairline color, and + tinted fill. + +## Impact + +- Public API is additive. Existing card rendering remains unchanged. +- Affects only `rust/fleet-ui/src/card.rs`. diff --git a/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/specs/ios-card-inner-helper-sub11/spec.md b/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/specs/ios-card-inner-helper-sub11/spec.md new file mode 100644 index 0000000..4b847c7 --- /dev/null +++ b/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/specs/ios-card-inner-helper-sub11/spec.md @@ -0,0 +1,14 @@ +## ADDED Requirements + +### Requirement: fleet-ui card_inner helper +The `fleet-ui` crate SHALL expose an additive `card_inner(frame, area, tint)` helper that paints an inset iOS glass surface for use inside card content areas. + +#### Scenario: Rendering an inner card surface +- **WHEN** `card_inner` renders into a non-empty `Rect` +- **THEN** the rendered surface uses rounded border glyphs +- **AND** its border foreground uses `IOS_HAIRLINE_BORDER` +- **AND** its background uses the caller-provided tint color. + +#### Scenario: Empty render area +- **WHEN** `card_inner` receives a zero-width or zero-height `Rect` +- **THEN** it returns without attempting to render. diff --git a/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/tasks.md b/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/tasks.md new file mode 100644 index 0000000..9fb7d8a --- /dev/null +++ b/openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/tasks.md @@ -0,0 +1,34 @@ +## Definition of Done + +This change is complete only when **all** of the following are true: + +- Every checkbox below is checked. +- The agent branch reaches `MERGED` state on `origin` and the PR URL + state are recorded in the completion handoff. +- If any step blocks (test failure, conflict, ambiguous result), append a `BLOCKED:` line under section 4 explaining the blocker and **STOP**. Do not tick remaining cleanup boxes; do not silently skip the cleanup pipeline. + +## Handoff + +- Handoff: change=`agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36`; branch=`agent//`; scope=`TODO`; action=`continue this sandbox or finish cleanup after a usage-limit/manual takeover`. +- Copy prompt: Continue `agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36` on branch `agent//`. Work inside the existing sandbox, review `openspec/changes/agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36/tasks.md`, continue from the current state instead of creating a new sandbox, and when the work is done run `gx branch finish --branch agent// --base dev --via-pr --wait-for-merge --cleanup`. + +## 1. Specification + +- [x] 1.1 Finalize proposal scope and acceptance criteria for `agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36`. +- [x] 1.2 Define normative requirements in `specs/ios-card-inner-helper-sub11/spec.md`. + +## 2. Implementation + +- [x] 2.1 Implement scoped behavior changes. +- [x] 2.2 Add/update focused regression coverage. + +## 3. Verification + +- [x] 3.1 Run targeted project verification commands. +- [x] 3.2 Run `openspec validate agent-codex-ios-card-inner-helper-sub11-2026-05-15-14-36 --type change --strict`. +- [x] 3.3 Run `openspec validate --specs`. + +## 4. Cleanup (mandatory; run before claiming completion) + +- [ ] 4.1 Run the cleanup pipeline: `gx branch finish --branch agent// --base dev --via-pr --wait-for-merge --cleanup`. This handles commit -> push -> PR create -> merge wait -> worktree prune in one invocation. +- [ ] 4.2 Record the PR URL and final merge state (`MERGED`) in the completion handoff. +- [ ] 4.3 Confirm the sandbox worktree is gone (`git worktree list` no longer shows the agent path; `git branch -a` shows no surviving local/remote refs for the branch). diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/README.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/README.md new file mode 100644 index 0000000..a09923b --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/README.md @@ -0,0 +1,30 @@ +# Plan Workspace: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 + +This folder stores durable planning artifacts before implementation changes. + +## Shared files +- `summary.md` +- `checkpoints.md` +- `phases.md` +- `open-questions.md` +- `coordinator-prompt.md` +- `kickoff-prompts.md` + +## Role folders +- `planner/` +- `architect/` +- `critic/` +- `executor/` +- `writer/` +- `verifier/` + +When Codex or Claude hits an unresolved question that should survive chat, add it to `open-questions.md` as an unchecked `- [ ]` item. + +Each role folder contains OpenSpec-style artifacts: +- `.openspec.yaml` +- `prompt.md` (copy/paste role prompt) +- `proposal.md` +- `tasks.md` (Spec / Tests / Implementation / Checkpoints checklists) +- `specs//spec.md` +Planner also gets `plan.md`; executor also gets `checkpoints.md`. +Planner plans should follow `openspec/plan/PLANS.md`. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/.openspec.yaml b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/.openspec.yaml new file mode 100644 index 0000000..87e59f3 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/.openspec.yaml @@ -0,0 +1,9 @@ +schema: 1 +plan: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 +role: architect +status: draft +artifacts: + prompt: prompt.md + proposal: proposal.md + tasks: tasks.md + spec: specs/architect/spec.md diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/README.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/README.md new file mode 100644 index 0000000..1e1c275 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/README.md @@ -0,0 +1,12 @@ +# architect + +Role workspace for `architect`. + +Default artifacts: +- `.openspec.yaml` +- `prompt.md` +- `proposal.md` +- `tasks.md` +- `specs//spec.md` + +Use this folder for role notes, artifacts, and status updates. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/prompt.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/prompt.md new file mode 100644 index 0000000..6f2b6ca --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/prompt.md @@ -0,0 +1,34 @@ +# architect Prompt + +You are the `architect` role for OpenSpec plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## Objective + +Complete only this role's assigned checklist and leave compact evidence for the coordinator. + +## Source of truth + +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/tasks.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/proposal.md` + +## Before edits + +1. Confirm branch/worktree with `git status --short --branch`. +2. Claim every touched file before editing: + - Prefer Colony `task_claim_file` when an active task exists. + - Otherwise run `gx locks claim --branch `. +3. Stay inside assigned files/modules; coordinate before touching shared paths. + +## Working rules + +- Update `architect/tasks.md` as each item completes. +- Record durable unresolved questions in `open-questions.md`. +- Keep handoffs short: files changed, behavior touched, verification, risks. +- Do not revert another agent's edits. + +## Cleanup + +Only the owner/finalizer lane runs `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. If blocked, append `BLOCKED:` with branch, task, blocker, next, evidence. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/proposal.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/proposal.md new file mode 100644 index 0000000..386c02b --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/proposal.md @@ -0,0 +1,15 @@ +# Proposal: architect (agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36) + +## Why + +Summarize why this role's work is required for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## What Changes + +- [ ] List the planned role-specific changes + +## Impact + +- Scope: +- Risks: +- Dependencies: diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/specs/architect/spec.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/specs/architect/spec.md new file mode 100644 index 0000000..2a5b902 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/specs/architect/spec.md @@ -0,0 +1,10 @@ +# Capability Spec: architect + +## ADDED Requirements + +### Requirement: architect responsibilities for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +This role MUST define and deliver its scoped outputs with evidence. + +#### Scenario: Role executes assigned scope +- **WHEN** the role begins execution for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- **THEN** it follows `tasks.md` and records evidence for completion diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/tasks.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/tasks.md new file mode 100644 index 0000000..12d7864 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/architect/tasks.md @@ -0,0 +1,33 @@ +# architect tasks + +## 1. Spec + +- [ ] 1.1 Define ownership boundaries, interfaces, and artifact responsibilities for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- [ ] 1.2 Validate architecture constraints and non-functional requirements coverage + +## 2. Tests + +- [ ] 2.1 Define architectural verification checkpoints (integration boundaries, failure modes, compatibility) +- [ ] 2.2 Validate that acceptance criteria map to concrete architecture decisions + +## 3. Implementation + +- [ ] 3.1 Review plan for strongest antithesis/tradeoff tensions +- [ ] 3.2 Propose synthesis path and guardrails for implementation teams +- [ ] 3.3 Record architecture sign-off notes for downstream execution + +## 4. Checkpoints + +- [ ] [A1] READY - Architecture review checkpoint + +## 5. Collaboration + +- [ ] 5.1 Owner recorded this lane before edits. +- [ ] 5.2 Record joined agents / handoffs, or mark `N/A` when solo. +- [ ] 5.3 Record unresolved plan questions in `../open-questions.md`, or mark `N/A` when none. + +## 6. Cleanup + +- [ ] 6.1 If this lane owns finalization, run `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. +- [ ] 6.2 Record PR URL + final `MERGED` state in the handoff. +- [ ] 6.3 Confirm sandbox cleanup (`git worktree list`, `git branch -a`) or append `BLOCKED:` and stop. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md new file mode 100644 index 0000000..69557cf --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md @@ -0,0 +1,4 @@ +# Plan Checkpoints: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 + +Chronological checkpoint log for all roles. + diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/coordinator-prompt.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/coordinator-prompt.md new file mode 100644 index 0000000..9011725 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/coordinator-prompt.md @@ -0,0 +1,41 @@ +# Master Coordinator Prompt + +You are the coordinator for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## Objective + +Drive this plan from draft to execution-ready status with strict checkpoint discipline and no scope drift. + +## Source-of-truth artifacts + +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/plan.md` +- role `prompt.md` files for copy/paste helper startup +- role `tasks.md` files for planner/architect/critic/executor/writer/verifier + +## Coordinator responsibilities + +1. Keep checkpoints current in each role `tasks.md` and root `checkpoints.md`. +2. Route unresolved questions and branching decisions into `open-questions.md`. +3. Ensure each role has explicit acceptance criteria and verification evidence. +4. Prevent implementation from starting before planning gates are complete. +5. Keep handoffs concise: files changed, behavior touched, verification output, risks. + +## Wave-splitting decision (optional) + +Create wave prompts in `kickoff-prompts.md` only when at least one applies: + +- 3+ independent implementation lanes can run in parallel. +- Runtime cutover/rollback sequencing needs explicit lane ownership. +- Risk is high enough that bounded execution packets reduce coordination mistakes. + +If wave splitting is not needed, keep execution under a single owner with normal role checkpoints. + +## Exit criteria + +- All role checkpoints required for planning are done. +- Execution lanes (if any) have clear ownership boundaries. +- `open-questions.md` captures unresolved decisions that still need answers. +- Verification plan and rollback expectations are explicit and testable. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/.openspec.yaml b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/.openspec.yaml new file mode 100644 index 0000000..122c6f8 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/.openspec.yaml @@ -0,0 +1,9 @@ +schema: 1 +plan: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 +role: critic +status: draft +artifacts: + prompt: prompt.md + proposal: proposal.md + tasks: tasks.md + spec: specs/critic/spec.md diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/README.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/README.md new file mode 100644 index 0000000..5b5c877 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/README.md @@ -0,0 +1,12 @@ +# critic + +Role workspace for `critic`. + +Default artifacts: +- `.openspec.yaml` +- `prompt.md` +- `proposal.md` +- `tasks.md` +- `specs//spec.md` + +Use this folder for role notes, artifacts, and status updates. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/prompt.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/prompt.md new file mode 100644 index 0000000..c292505 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/prompt.md @@ -0,0 +1,34 @@ +# critic Prompt + +You are the `critic` role for OpenSpec plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## Objective + +Complete only this role's assigned checklist and leave compact evidence for the coordinator. + +## Source of truth + +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/tasks.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/proposal.md` + +## Before edits + +1. Confirm branch/worktree with `git status --short --branch`. +2. Claim every touched file before editing: + - Prefer Colony `task_claim_file` when an active task exists. + - Otherwise run `gx locks claim --branch `. +3. Stay inside assigned files/modules; coordinate before touching shared paths. + +## Working rules + +- Update `critic/tasks.md` as each item completes. +- Record durable unresolved questions in `open-questions.md`. +- Keep handoffs short: files changed, behavior touched, verification, risks. +- Do not revert another agent's edits. + +## Cleanup + +Only the owner/finalizer lane runs `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. If blocked, append `BLOCKED:` with branch, task, blocker, next, evidence. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/proposal.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/proposal.md new file mode 100644 index 0000000..e1ffb81 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/proposal.md @@ -0,0 +1,15 @@ +# Proposal: critic (agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36) + +## Why + +Summarize why this role's work is required for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## What Changes + +- [ ] List the planned role-specific changes + +## Impact + +- Scope: +- Risks: +- Dependencies: diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/specs/critic/spec.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/specs/critic/spec.md new file mode 100644 index 0000000..56841a1 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/specs/critic/spec.md @@ -0,0 +1,10 @@ +# Capability Spec: critic + +## ADDED Requirements + +### Requirement: critic responsibilities for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +This role MUST define and deliver its scoped outputs with evidence. + +#### Scenario: Role executes assigned scope +- **WHEN** the role begins execution for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- **THEN** it follows `tasks.md` and records evidence for completion diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/tasks.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/tasks.md new file mode 100644 index 0000000..6b455a2 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/critic/tasks.md @@ -0,0 +1,33 @@ +# critic tasks + +## 1. Spec + +- [ ] 1.1 Validate principle-driver-option consistency across the plan +- [ ] 1.2 Validate risks, consequences, and mitigation clarity (including idempotency expectations) + +## 2. Tests + +- [ ] 2.1 Validate testability and measurability of all acceptance criteria +- [ ] 2.2 Validate verification steps are concrete and reproducible + +## 3. Implementation + +- [ ] 3.1 Produce verdict (APPROVE / ITERATE / REJECT) with actionable feedback +- [ ] 3.2 Confirm revised drafts resolve prior findings before approval +- [ ] 3.3 Publish final quality/risk sign-off notes + +## 4. Checkpoints + +- [ ] [C1] READY - Quality gate checkpoint + +## 5. Collaboration + +- [ ] 5.1 Owner recorded this lane before edits. +- [ ] 5.2 Record joined agents / handoffs, or mark `N/A` when solo. +- [ ] 5.3 Record unresolved plan questions in `../open-questions.md`, or mark `N/A` when none. + +## 6. Cleanup + +- [ ] 6.1 If this lane owns finalization, run `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. +- [ ] 6.2 Record PR URL + final `MERGED` state in the handoff. +- [ ] 6.3 Confirm sandbox cleanup (`git worktree list`, `git branch -a`) or append `BLOCKED:` and stop. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/.openspec.yaml b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/.openspec.yaml new file mode 100644 index 0000000..0cf32ab --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/.openspec.yaml @@ -0,0 +1,9 @@ +schema: 1 +plan: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 +role: executor +status: draft +artifacts: + prompt: prompt.md + proposal: proposal.md + tasks: tasks.md + spec: specs/executor/spec.md diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/README.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/README.md new file mode 100644 index 0000000..62b95ee --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/README.md @@ -0,0 +1,12 @@ +# executor + +Role workspace for `executor`. + +Default artifacts: +- `.openspec.yaml` +- `prompt.md` +- `proposal.md` +- `tasks.md` +- `specs//spec.md` + +Use this folder for role notes, artifacts, and status updates. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/checkpoints.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/checkpoints.md new file mode 100644 index 0000000..498935a --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/checkpoints.md @@ -0,0 +1,4 @@ +# executor checkpoints + +Timestamped execution checkpoints for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/prompt.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/prompt.md new file mode 100644 index 0000000..f6370ee --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/prompt.md @@ -0,0 +1,34 @@ +# executor Prompt + +You are the `executor` role for OpenSpec plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## Objective + +Complete only this role's assigned checklist and leave compact evidence for the coordinator. + +## Source of truth + +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/tasks.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/proposal.md` + +## Before edits + +1. Confirm branch/worktree with `git status --short --branch`. +2. Claim every touched file before editing: + - Prefer Colony `task_claim_file` when an active task exists. + - Otherwise run `gx locks claim --branch `. +3. Stay inside assigned files/modules; coordinate before touching shared paths. + +## Working rules + +- Update `executor/tasks.md` as each item completes. +- Record durable unresolved questions in `open-questions.md`. +- Keep handoffs short: files changed, behavior touched, verification, risks. +- Do not revert another agent's edits. + +## Cleanup + +Only the owner/finalizer lane runs `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. If blocked, append `BLOCKED:` with branch, task, blocker, next, evidence. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/proposal.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/proposal.md new file mode 100644 index 0000000..8c47c61 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/proposal.md @@ -0,0 +1,15 @@ +# Proposal: executor (agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36) + +## Why + +Summarize why this role's work is required for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## What Changes + +- [ ] List the planned role-specific changes + +## Impact + +- Scope: +- Risks: +- Dependencies: diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/specs/executor/spec.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/specs/executor/spec.md new file mode 100644 index 0000000..349fb3c --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/specs/executor/spec.md @@ -0,0 +1,10 @@ +# Capability Spec: executor + +## ADDED Requirements + +### Requirement: executor responsibilities for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +This role MUST define and deliver its scoped outputs with evidence. + +#### Scenario: Role executes assigned scope +- **WHEN** the role begins execution for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- **THEN** it follows `tasks.md` and records evidence for completion diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/tasks.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/tasks.md new file mode 100644 index 0000000..062ff29 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/executor/tasks.md @@ -0,0 +1,33 @@ +# executor tasks + +## 1. Spec + +- [ ] 1.1 Map approved plan requirements to concrete implementation work items +- [ ] 1.2 Validate touched components/files are explicitly listed before coding starts + +## 2. Tests + +- [ ] 2.1 Define test additions/updates required to lock intended behavior +- [ ] 2.2 Validate regression and smoke verification commands for delivery + +## 3. Implementation + +- [ ] 3.1 Execute implementation tasks in approved order +- [ ] 3.2 Keep progress and evidence linked back to plan checkpoints +- [ ] 3.3 Complete final verification bundle for handoff + +## 4. Checkpoints + +- [ ] [E1] READY - Execution start checkpoint + +## 5. Collaboration + +- [ ] 5.1 Owner recorded this lane before edits. +- [ ] 5.2 Record joined agents / handoffs, or mark `N/A` when solo. +- [ ] 5.3 Record unresolved plan questions in `../open-questions.md`, or mark `N/A` when none. + +## 6. Cleanup + +- [ ] 6.1 If this lane owns finalization, run `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. +- [ ] 6.2 Record PR URL + final `MERGED` state in the handoff. +- [ ] 6.3 Confirm sandbox cleanup (`git worktree list`, `git branch -a`) or append `BLOCKED:` and stop. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/kickoff-prompts.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/kickoff-prompts.md new file mode 100644 index 0000000..0c50e4a --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/kickoff-prompts.md @@ -0,0 +1,108 @@ +# Kickoff Prompts (Copy/Paste) + +Use these only when the coordinator decides wave-splitting is needed. + +## Prompt A — Wave A (Primary lane) + +```text +You own Wave-A for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` in /home/deadpool/Documents/codex-lb. + +Goal: +Implement the assigned Wave-A scope and return verification evidence. + +Hard constraints: +- You are not alone in the codebase; do not revert others' work. +- Stay in your owned files/modules only. +- Record explicit handoff notes for integration. + +Owned scope: +- + +Verification: +- + +Handoff format: +- Files changed +- Behavior touched +- Verification outputs +- Risks/follow-ups +``` + +## Prompt B — Wave B (Secondary lane) + +```text +You own Wave-B for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` in /home/deadpool/Documents/codex-lb. + +Goal: +Implement the assigned Wave-B scope and return verification evidence. + +Hard constraints: +- You are not alone in the codebase; do not revert others' work. +- Stay in your owned files/modules only. +- Record explicit handoff notes for integration. + +Owned scope: +- + +Verification: +- + +Handoff format: +- Files changed +- Behavior touched +- Verification outputs +- Risks/follow-ups +``` + +## Prompt C — Wave C (Secondary lane) + +```text +You own Wave-C for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` in /home/deadpool/Documents/codex-lb. + +Goal: +Implement the assigned Wave-C scope and return verification evidence. + +Hard constraints: +- You are not alone in the codebase; do not revert others' work. +- Stay in your owned files/modules only. +- Record explicit handoff notes for integration. + +Owned scope: +- + +Verification: +- + +Handoff format: +- Files changed +- Behavior touched +- Verification outputs +- Risks/follow-ups +``` + +## Prompt D — Integrator lane + +```text +You are the integrator for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` in /home/deadpool/Documents/codex-lb. + +Goal: +Integrate completed waves, resolve conflicts, run final verification, and prepare rollout/cutover notes. + +Hard constraints: +- You are not alone in the codebase; do not revert others' work. +- Preserve safety-critical behavior unless explicitly planned and tested. +- Keep final output evidence-first. + +Owned scope: +- integration glue and shared touchpoints +- final validation + handoff summary + +Verification: +- + +Final report: +- Files changed +- Integration decisions +- Verification outputs +- Remaining risks +``` diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md new file mode 100644 index 0000000..6ba268b --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md @@ -0,0 +1,6 @@ +# Open Questions: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 + +Capture unresolved plan questions here as unchecked checklist items. +Keep each item concrete, decision-shaped, and easy to close with evidence. + +- [ ] Add the next unresolved question here. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/phases.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/phases.md new file mode 100644 index 0000000..c8d2082 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/phases.md @@ -0,0 +1,15 @@ +# Plan Phases: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 + +One entry per phase. Checkbox marks map to: `x` = completed, `>` = in progress, space = pending. +Indented sub-bullets are optional metadata consumed by the Plans UI: + +- `session`: which agent kind runs the phase (`codex` / `claude`). +- `checkpoints`: comma-separated role checkpoint ids delivered within the phase. +- `summary`: one short sentence rendered under the phase title. + +One phase is intended to fit into a single Codex or Claude session task. + +- [ ] [PH01] First milestone title goes here + - session: codex + - checkpoints: P1, A1 + - summary: Describe the single session outcome expected for this phase. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/.openspec.yaml b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/.openspec.yaml new file mode 100644 index 0000000..31befcb --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/.openspec.yaml @@ -0,0 +1,9 @@ +schema: 1 +plan: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 +role: planner +status: draft +artifacts: + prompt: prompt.md + proposal: proposal.md + tasks: tasks.md + spec: specs/planner/spec.md diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/README.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/README.md new file mode 100644 index 0000000..1b0ad5d --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/README.md @@ -0,0 +1,12 @@ +# planner + +Role workspace for `planner`. + +Default artifacts: +- `.openspec.yaml` +- `prompt.md` +- `proposal.md` +- `tasks.md` +- `specs//spec.md` + +Use this folder for role notes, artifacts, and status updates. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/plan.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/plan.md new file mode 100644 index 0000000..2ee1f0e --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/plan.md @@ -0,0 +1,65 @@ +# ExecPlan: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 + +This ExecPlan is a living document. Keep `Progress`, `Surprises & Discoveries`, `Decision Log`, and `Outcomes & Retrospective` current as work proceeds. + +Follow repository guidance in `openspec/plan/PLANS.md`. + +## Purpose / Big Picture + +Describe what becomes possible after this plan is executed and how a user/operator can observe it working. + +## Progress + +- [ ] (YYYY-MM-DD HH:MMZ) Capture initial scope and acceptance criteria. +- [ ] (YYYY-MM-DD HH:MMZ) Draft architecture/tradeoff plan and verification strategy. +- [ ] (YYYY-MM-DD HH:MMZ) Finalize execution-ready handoff. + +## Surprises & Discoveries + +- Observation: _none yet_ + Evidence: _n/a_ + +## Decision Log + +- Decision: Use OpenSpec plan workspace as source of truth for this planning cycle. + Rationale: Keeps planning artifacts in-repo and reviewable. + Date/Author: YYYY-MM-DD / planner + +## Outcomes & Retrospective + +Summarize outcomes, gaps, and lessons learned when a milestone or the full plan is completed. + +## Context and Orientation + +Describe relevant modules, files, constraints, and assumptions for a newcomer. Use repository-relative paths. + +## Plan of Work + +Describe the sequence of edits and deliverables in prose. Name target files and expected effects. + +## Concrete Steps + +List exact commands with working directory and short expected outcomes. + + cd /home/deadpool/Documents/codex-lb + openspec validate --specs + +## Validation and Acceptance + +State observable behavior and verification evidence required before execution handoff. + +## Idempotence and Recovery + +Document safe re-run behavior, rollback strategy, and failure recovery notes. + +## Artifacts and Notes + +Capture concise command output snippets, evidence pointers, and references. + +## Interfaces and Dependencies + +Name concrete interfaces/modules/dependencies and any required signatures/contracts. + +## Revision Note + +- YYYY-MM-DD HH:MMZ: Initial scaffold generated by `scripts/openspec/init-plan-workspace.sh`. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/prompt.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/prompt.md new file mode 100644 index 0000000..4415eb3 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/prompt.md @@ -0,0 +1,34 @@ +# planner Prompt + +You are the `planner` role for OpenSpec plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## Objective + +Complete only this role's assigned checklist and leave compact evidence for the coordinator. + +## Source of truth + +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/tasks.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/proposal.md` + +## Before edits + +1. Confirm branch/worktree with `git status --short --branch`. +2. Claim every touched file before editing: + - Prefer Colony `task_claim_file` when an active task exists. + - Otherwise run `gx locks claim --branch `. +3. Stay inside assigned files/modules; coordinate before touching shared paths. + +## Working rules + +- Update `planner/tasks.md` as each item completes. +- Record durable unresolved questions in `open-questions.md`. +- Keep handoffs short: files changed, behavior touched, verification, risks. +- Do not revert another agent's edits. + +## Cleanup + +Only the owner/finalizer lane runs `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. If blocked, append `BLOCKED:` with branch, task, blocker, next, evidence. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/proposal.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/proposal.md new file mode 100644 index 0000000..638876b --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/proposal.md @@ -0,0 +1,15 @@ +# Proposal: planner (agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36) + +## Why + +Summarize why this role's work is required for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## What Changes + +- [ ] List the planned role-specific changes + +## Impact + +- Scope: +- Risks: +- Dependencies: diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/specs/planner/spec.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/specs/planner/spec.md new file mode 100644 index 0000000..e5aa760 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/specs/planner/spec.md @@ -0,0 +1,10 @@ +# Capability Spec: planner + +## ADDED Requirements + +### Requirement: planner responsibilities for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +This role MUST define and deliver its scoped outputs with evidence. + +#### Scenario: Role executes assigned scope +- **WHEN** the role begins execution for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- **THEN** it follows `tasks.md` and records evidence for completion diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/tasks.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/tasks.md new file mode 100644 index 0000000..ced5fc1 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/planner/tasks.md @@ -0,0 +1,33 @@ +# planner tasks + +## 1. Spec + +- [ ] 1.1 Define planning principles, decision drivers, and viable options for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- [ ] 1.2 Validate that scope, constraints, and acceptance criteria are captured in `summary.md` + +## 2. Tests + +- [ ] 2.1 Define verification approach for plan quality (traceability, testability, evidence expectations) +- [ ] 2.2 Validate OpenSpec consistency checkpoints (including `openspec validate --specs` when applicable) + +## 3. Implementation + +- [ ] 3.1 Produce the initial RALPLAN-DR plan draft +- [ ] 3.2 Integrate Architect/Critic feedback into revised plan iterations +- [ ] 3.3 Publish final planning handoff with explicit execution lanes + +## 4. Checkpoints + +- [ ] [P1] READY - Initial planning draft checkpoint + +## 5. Collaboration + +- [ ] 5.1 Owner recorded this lane before edits. +- [ ] 5.2 Record joined agents / handoffs, or mark `N/A` when solo. +- [ ] 5.3 Record unresolved plan questions in `../open-questions.md`, or mark `N/A` when none. + +## 6. Cleanup + +- [ ] 6.1 If this lane owns finalization, run `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. +- [ ] 6.2 Record PR URL + final `MERGED` state in the handoff. +- [ ] 6.3 Confirm sandbox cleanup (`git worktree list`, `git branch -a`) or append `BLOCKED:` and stop. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md new file mode 100644 index 0000000..9ea8534 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md @@ -0,0 +1,8 @@ +# Plan Summary: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 + +- **Mode:** ralplan +- **Status:** draft + +## Context + +Describe the planning context, constraints, and desired outcomes. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/.openspec.yaml b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/.openspec.yaml new file mode 100644 index 0000000..14322b3 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/.openspec.yaml @@ -0,0 +1,9 @@ +schema: 1 +plan: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 +role: verifier +status: draft +artifacts: + prompt: prompt.md + proposal: proposal.md + tasks: tasks.md + spec: specs/verifier/spec.md diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/README.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/README.md new file mode 100644 index 0000000..1daa373 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/README.md @@ -0,0 +1,12 @@ +# verifier + +Role workspace for `verifier`. + +Default artifacts: +- `.openspec.yaml` +- `prompt.md` +- `proposal.md` +- `tasks.md` +- `specs//spec.md` + +Use this folder for role notes, artifacts, and status updates. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/prompt.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/prompt.md new file mode 100644 index 0000000..dae79f5 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/prompt.md @@ -0,0 +1,34 @@ +# verifier Prompt + +You are the `verifier` role for OpenSpec plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## Objective + +Complete only this role's assigned checklist and leave compact evidence for the coordinator. + +## Source of truth + +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/tasks.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/proposal.md` + +## Before edits + +1. Confirm branch/worktree with `git status --short --branch`. +2. Claim every touched file before editing: + - Prefer Colony `task_claim_file` when an active task exists. + - Otherwise run `gx locks claim --branch `. +3. Stay inside assigned files/modules; coordinate before touching shared paths. + +## Working rules + +- Update `verifier/tasks.md` as each item completes. +- Record durable unresolved questions in `open-questions.md`. +- Keep handoffs short: files changed, behavior touched, verification, risks. +- Do not revert another agent's edits. + +## Cleanup + +Only the owner/finalizer lane runs `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. If blocked, append `BLOCKED:` with branch, task, blocker, next, evidence. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/proposal.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/proposal.md new file mode 100644 index 0000000..3bb7009 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/proposal.md @@ -0,0 +1,15 @@ +# Proposal: verifier (agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36) + +## Why + +Summarize why this role's work is required for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## What Changes + +- [ ] List the planned role-specific changes + +## Impact + +- Scope: +- Risks: +- Dependencies: diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/specs/verifier/spec.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/specs/verifier/spec.md new file mode 100644 index 0000000..80920b4 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/specs/verifier/spec.md @@ -0,0 +1,10 @@ +# Capability Spec: verifier + +## ADDED Requirements + +### Requirement: verifier responsibilities for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +This role MUST define and deliver its scoped outputs with evidence. + +#### Scenario: Role executes assigned scope +- **WHEN** the role begins execution for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- **THEN** it follows `tasks.md` and records evidence for completion diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/tasks.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/tasks.md new file mode 100644 index 0000000..0b4c2ac --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/verifier/tasks.md @@ -0,0 +1,33 @@ +# verifier tasks + +## 1. Spec + +- [ ] 1.1 Define end-to-end validation matrix for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- [ ] 1.2 Validate success/failure conditions and evidence requirements + +## 2. Tests + +- [ ] 2.1 Execute verification commands and collect outputs +- [ ] 2.2 Validate idempotency/re-run behavior and error-path handling + +## 3. Implementation + +- [ ] 3.1 Verify completed work against acceptance criteria +- [ ] 3.2 Produce pass/fail findings with concrete evidence links +- [ ] 3.3 Publish final verification sign-off (or blocker report) + +## 4. Checkpoints + +- [ ] [V1] READY - Verification checkpoint + +## 5. Collaboration + +- [ ] 5.1 Owner recorded this lane before edits. +- [ ] 5.2 Record joined agents / handoffs, or mark `N/A` when solo. +- [ ] 5.3 Record unresolved plan questions in `../open-questions.md`, or mark `N/A` when none. + +## 6. Cleanup + +- [ ] 6.1 If this lane owns finalization, run `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. +- [ ] 6.2 Record PR URL + final `MERGED` state in the handoff. +- [ ] 6.3 Confirm sandbox cleanup (`git worktree list`, `git branch -a`) or append `BLOCKED:` and stop. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/.openspec.yaml b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/.openspec.yaml new file mode 100644 index 0000000..c591e99 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/.openspec.yaml @@ -0,0 +1,9 @@ +schema: 1 +plan: agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36 +role: writer +status: draft +artifacts: + prompt: prompt.md + proposal: proposal.md + tasks: tasks.md + spec: specs/writer/spec.md diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/README.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/README.md new file mode 100644 index 0000000..757c824 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/README.md @@ -0,0 +1,12 @@ +# writer + +Role workspace for `writer`. + +Default artifacts: +- `.openspec.yaml` +- `prompt.md` +- `proposal.md` +- `tasks.md` +- `specs//spec.md` + +Use this folder for role notes, artifacts, and status updates. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/prompt.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/prompt.md new file mode 100644 index 0000000..0a885d6 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/prompt.md @@ -0,0 +1,34 @@ +# writer Prompt + +You are the `writer` role for OpenSpec plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## Objective + +Complete only this role's assigned checklist and leave compact evidence for the coordinator. + +## Source of truth + +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/summary.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/checkpoints.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/open-questions.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/tasks.md` +- `openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/proposal.md` + +## Before edits + +1. Confirm branch/worktree with `git status --short --branch`. +2. Claim every touched file before editing: + - Prefer Colony `task_claim_file` when an active task exists. + - Otherwise run `gx locks claim --branch `. +3. Stay inside assigned files/modules; coordinate before touching shared paths. + +## Working rules + +- Update `writer/tasks.md` as each item completes. +- Record durable unresolved questions in `open-questions.md`. +- Keep handoffs short: files changed, behavior touched, verification, risks. +- Do not revert another agent's edits. + +## Cleanup + +Only the owner/finalizer lane runs `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. If blocked, append `BLOCKED:` with branch, task, blocker, next, evidence. diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/proposal.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/proposal.md new file mode 100644 index 0000000..460be0d --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/proposal.md @@ -0,0 +1,15 @@ +# Proposal: writer (agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36) + +## Why + +Summarize why this role's work is required for plan `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36`. + +## What Changes + +- [ ] List the planned role-specific changes + +## Impact + +- Scope: +- Risks: +- Dependencies: diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/specs/writer/spec.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/specs/writer/spec.md new file mode 100644 index 0000000..b605a21 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/specs/writer/spec.md @@ -0,0 +1,10 @@ +# Capability Spec: writer + +## ADDED Requirements + +### Requirement: writer responsibilities for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +This role MUST define and deliver its scoped outputs with evidence. + +#### Scenario: Role executes assigned scope +- **WHEN** the role begins execution for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- **THEN** it follows `tasks.md` and records evidence for completion diff --git a/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/tasks.md b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/tasks.md new file mode 100644 index 0000000..c7973b6 --- /dev/null +++ b/openspec/plan/agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36/writer/tasks.md @@ -0,0 +1,33 @@ +# writer tasks + +## 1. Spec + +- [ ] 1.1 Validate documentation scope and audience for `agent-codex-masterplan-ios-card-inner-helper-sub11-2026-05-15-14-36` +- [ ] 1.2 Validate consistency between plan terminology and OpenSpec artifacts + +## 2. Tests + +- [ ] 2.1 Define documentation verification checklist (accuracy, completeness, command correctness) +- [ ] 2.2 Validate command/help text examples against current workflow behavior + +## 3. Implementation + +- [ ] 3.1 Update workflow docs and command guidance for approved plan behavior +- [ ] 3.2 Add or refine examples for operator usage and handoff clarity +- [ ] 3.3 Publish final docs change summary with references + +## 4. Checkpoints + +- [ ] [W1] READY - Docs update checkpoint + +## 5. Collaboration + +- [ ] 5.1 Owner recorded this lane before edits. +- [ ] 5.2 Record joined agents / handoffs, or mark `N/A` when solo. +- [ ] 5.3 Record unresolved plan questions in `../open-questions.md`, or mark `N/A` when none. + +## 6. Cleanup + +- [ ] 6.1 If this lane owns finalization, run `gx branch finish --branch --base dev --via-pr --wait-for-merge --cleanup`. +- [ ] 6.2 Record PR URL + final `MERGED` state in the handoff. +- [ ] 6.3 Confirm sandbox cleanup (`git worktree list`, `git branch -a`) or append `BLOCKED:` and stop. diff --git a/rust/fleet-ui/src/card.rs b/rust/fleet-ui/src/card.rs index 17bf8ed..a9a9a48 100644 --- a/rust/fleet-ui/src/card.rs +++ b/rust/fleet-ui/src/card.rs @@ -6,8 +6,10 @@ //! inside `Block::inner(rect)`; this module is purely the wrapper. use crate::palette::*; +use ratatui::layout::Rect; use ratatui::style::{Color, Modifier, Style}; use ratatui::widgets::{Block, BorderType, Borders}; +use ratatui::Frame; /// Build a rounded `Block` with the canonical iOS chrome. /// @@ -21,15 +23,19 @@ use ratatui::widgets::{Block, BorderType, Borders}; /// the systemBlue tint, matching the focus state on the session-switcher D /// artboard. pub fn card<'a>(title: Option<&'a str>, active: bool) -> Block<'a> { - let border_color = if active { IOS_TINT } else { IOS_HAIRLINE_STRONG }; + let border_color = if active { + IOS_TINT + } else { + IOS_HAIRLINE_STRONG + }; let mut block = Block::default() .borders(Borders::ALL) .border_type(BorderType::Rounded) - .border_style( - Style::default() - .fg(border_color) - .add_modifier(if active { Modifier::BOLD } else { Modifier::empty() }), - ) + .border_style(Style::default().fg(border_color).add_modifier(if active { + Modifier::BOLD + } else { + Modifier::empty() + })) .style(Style::default().bg(IOS_BG_SOLID)); if let Some(t) = title { block = block.title(ratatui::text::Span::styled( @@ -58,12 +64,34 @@ pub fn card_accent<'a>(title: Option<&'a str>, accent: Color) -> Block<'a> { block } +/// Paint an inset iOS glass surface inside a card content area. +/// +/// Dashboards use this after `card(...).inner(area)` when the card needs a +/// tinted sub-surface for grouped rows while keeping the public card chrome +/// stable. +pub fn card_inner(frame: &mut Frame, area: Rect, tint: Color) { + if area.width == 0 || area.height == 0 { + return; + } + + frame.render_widget( + Block::default() + .borders(Borders::ALL) + .border_type(BorderType::Rounded) + .border_style(Style::default().fg(IOS_HAIRLINE_BORDER).bg(tint)) + .style(Style::default().bg(tint)), + area, + ); +} + #[cfg(test)] mod tests { use super::*; + use ratatui::backend::TestBackend; use ratatui::buffer::Buffer; use ratatui::layout::Rect; use ratatui::widgets::Widget; + use ratatui::Terminal; #[test] fn renders_rounded_corners() { @@ -88,4 +116,20 @@ mod tests { // ratatui Block reserves 1 cell on each side for the border. assert_eq!(inner, Rect::new(1, 1, 18, 3)); } + + #[test] + fn card_inner_paints_tinted_hairline_surface() { + let mut terminal = Terminal::new(TestBackend::new(12, 6)).unwrap(); + terminal + .draw(|frame| card_inner(frame, Rect::new(1, 1, 10, 4), IOS_BG_GLASS)) + .unwrap(); + + let buffer = terminal.backend().buffer(); + assert_eq!(buffer[(1, 1)].symbol(), "╭"); + assert_eq!(buffer[(10, 1)].symbol(), "╮"); + assert_eq!(buffer[(1, 4)].symbol(), "╰"); + assert_eq!(buffer[(10, 4)].symbol(), "╯"); + assert_eq!(buffer[(1, 1)].fg, IOS_HAIRLINE_BORDER); + assert_eq!(buffer[(5, 2)].bg, IOS_BG_GLASS); + } }