Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
93d7102
docs(cli): plan GUI workflow parity stack
lidge-jun Oct 3, 2026
ff8eb3c
docs(cli): link roadmap review and verification receipts
lidge-jun Oct 3, 2026
aa72090
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 3, 2026
167881a
refactor(cli): separate capability data and task references
lidge-jun Oct 3, 2026
77ac2a9
Merge commit 'e601cefcebcc20b2e04a04821ab45df6538d98f9' into codex/cl…
lidge-jun Oct 3, 2026
59ae05f
feat(cli): expose existing management workflows in help and skill
lidge-jun Oct 3, 2026
8379bdd
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 3, 2026
6040865
feat(cli): add live provider lifecycle and editor workflows
lidge-jun Oct 3, 2026
7209223
test(cli): align provider parity fixtures with live receipts
lidge-jun Oct 3, 2026
20e3019
Merge commit '0818ea1812a028e1c14cd0b0511b44863407bc52' into codex/cl…
lidge-jun Oct 3, 2026
6579f1e
test: compact layout bookkeeping without changing expectations
lidge-jun Oct 3, 2026
746eddc
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 3, 2026
3d7ebe7
fix(cli): expose nested help and preserve generated option tables
lidge-jun Oct 3, 2026
d14df99
docs: preserve union spellings in rendered planning tables
lidge-jun Oct 3, 2026
0d670ab
docs(cli): regenerate readable help tables and correct usage aliases
lidge-jun Oct 3, 2026
99a1729
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 3, 2026
d07abbd
fix(cli): validate explicit local provider auth overrides before save
lidge-jun Oct 3, 2026
991110d
fix(cli): preserve failed provider connectivity exit status
lidge-jun Oct 3, 2026
50482e2
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 4, 2026
3a0558e
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 4, 2026
922485b
fix(cli): surface catalog-owner safety refusals in provider add --sync
lidge-jun Oct 4, 2026
6467207
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 4, 2026
598b5c8
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 4, 2026
4bcd561
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 4, 2026
c08bbca
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 4, 2026
c560b81
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 4, 2026
e3ff9fd
chore(test-layout): compact this layer's own layout entries
lidge-jun Oct 4, 2026
1909deb
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 4, 2026
697cc9e
chore(test-layout): compact this layer's own layout entries
lidge-jun Oct 4, 2026
270c33c
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 4, 2026
24ca58e
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 4, 2026
de7c7bb
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 4, 2026
c28c84e
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 4, 2026
c4b02a2
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 4, 2026
8ba53fe
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 4, 2026
e65d30c
Merge remote-tracking branch 'origin/dev' into codex/cli-parity-found…
lidge-jun Oct 4, 2026
637f26a
Merge branch 'codex/cli-parity-foundation' into codex/cli-parity-prov…
lidge-jun Oct 4, 2026
275dc63
Merge dev after the #6526 squash (tree unchanged)
lidge-jun Oct 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions devlog/_plan/261003_cli_gui_parity/000_plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Make dashboard workflows usable from the terminal

OpenCodex already implements many dashboard operations in its CLI, but discovery omits working commands and several workflows expose only some GUI fields. This unit completes the eligible task gaps, makes existing commands discoverable, and gives the shipped ocx skill verified task recipes. Operators keep the same management validation and consent boundaries, with explicit local/live target selection where those effects differ.

Reader: maintainers reviewing the six-layer manual PR stack; they need the scope, exact command contracts and proof for each layer.

## Loop contract

- Archetype: satisfy a fixed, source-audited task inventory, followed by residual accounting.
- Trigger: user requested near-GUI CLI parity, improved shipped skill, inherited-model subagents, repeated PABCD and a published stack.
- Goal: every eligible GUI task has a named command/sequence, useful help, safe output, documented target and behavioral evidence; genuine exclusions and duplicate views remain explicit.
- Non-goals: GUI redesign, provider routing redesign, new auth authority, raw API/config escape hatches, live-user operation, native GitHub stacks, merging, release or deployment.
- Verifier: numbered phase acceptance tests plus the baseline/QA strategy in 003_verification_strategy.md; a docs checker observes these exact plan files and task ownership before B.
- Stop: six open, reviewable PRs with successful current-head hosted CI; all task ledger rows closed as verified, alias or justified exclusion, with no unexplained UNKNOWN.
- Durable artifacts: this unit, 008_task_ledger.json and ignored command/QA receipts under this session.
- Outcomes: DONE requires implementation, synchronized skill/docs, independent reviews and CI. Real unsupported prerequisites/authority are reported under host blocked rules; workload or compaction is not completion.
- Escalation: main resolves source/architecture conflicts; ask the user only for genuinely new authority. Failed delegates follow the bounded retry/retirement owner; do not swap models silently.
- Resources: no user token/cost/time cap. Tool scope is repository editing, isolated local fixtures and GitHub PR/CI for this repository. No real accounts, credentials, running services, paid upstream calls or destructive user files are QA targets.

## Baseline and source owners

Baseline dev is 9f89b7265b754eb681215ad327fc9459af37b9e1. The initial inventories contain 176 task-entry rows, with two additional embedded dashboard setting groups subsequently found (memory models and compaction routing). Duplicate entry points are retained as aliases rather than silently dropped. Source-coverage labels in 004/005 are not passing runtime evidence. Executable 010..080 decisions supersede earlier source-join syntax proposals; the private audit record retains their history.

The tree remains Bun TypeScript: src/cli owns domain handlers and pure help/capability data; existing server management modules own validation/live mutation; tests/cli plus domain server tests own proof; skills/ocx and docs-site own operating guidance; structure owns current contracts. Existing structure/manifest.json maps src/cli to runtime/config/integration/Desktop/release docs. Only affected owners are updated.

## Dependency-ordered work phases and PR layers

| Phase | Executable document | Dependency | Output / PR layer |
| --- | --- | --- | --- |
| wp0 | This roadmap, inventories and UX contract | none | Docs-only audit; locks the remaining designs before source edits |
| wp1 | 010_discovery_foundation.md | wp0 | Pure metadata and generated-document capacity; layer 1 |
| wp2 | 020_existing_workflow_discovery.md | wp1 | Accurate existing task discovery and skill routing; finish layer 1 |
| wp3 | 030_provider_management.md | wp2 | Bounded input and exact provider live workflows; layer 2 |
| wp4 | 040_models_routing.md | wp3 | Models, picker order, combos and routing profile edits; layer 3 |
| wp5 | 050_accounts_runtime_settings.md | wp4 | Account policies, explicit auth options, agent/settings/v2 parity; layer 4 |
| wp6 | 060_integrations_maintenance.md | wp5 | Live Desktop profile, integration recovery, storage and Hub reads; layer 5 |
| wp7 | 070_observation_api_tools.md | wp6 | Timeline/log fidelity, scoped usage and chosen-key/audio tools; layer 6 |
| wp8 | 080_acceptance_publication.md | wp7 | Residual task proof, final skill/docs and all exact-head PR receipts; finish layer 6 |

Every work phase runs a full P→A→B→C→D cycle. wp0 is code-free. Later P revalidates its existing decade doc and quotes the previous D conclusion; changes to decisions return to the same architect before A. Branch names: codex/cli-parity-foundation → codex/cli-parity-providers → codex/cli-parity-models → codex/cli-parity-accounts → codex/cli-parity-integrations → codex/cli-parity-observation. The bottom targets dev; each child targets its open parent. No native stack registration or merge is authorized.

## Coverage and decisions

- 002_terminal_ux.md defines terminal behavior and progressive disclosure.
- 003_verification_strategy.md records real baseline checks and verification scope.
- 004_settings_coverage.md and 005_operations_coverage.md preserve field-level source joins.
- 007_architecture_decisions.md records proposal dispositions, additive field chain and target boundaries.
- 008_task_ledger.json assigns every row to a phase; historical labels are retained while current status/evidence advance.

Source comparison established that local provider/custom-model/v2/logout effects differ from live management receipts. --live is therefore explicit and never inferred from proxy availability or --json. Existing local behavior remains available. Browser-session identity actions stay outside automated parity; data-plane API testing is included with the same data-plane admission authority.

## Alternatives rejected

A generic API request command would expose routes without usable task contracts. Generic config writes would bypass existing live validation and completion receipts. A new command framework would duplicate the existing Capability/domain-handler architecture. Declaring routes that local commands never fetch would make coverage appear complete while remaining false. None is used.

## Phase records

wp0 roadmap was locked after independent audits passed. Inventory corrections already folded: existing v2 verbs are real local implementations, not absent agent verbs; model preset custom is disabled in the GUI; Lab local commands must not acquire fictitious HTTP coverage; memory-model and compaction-routing controls need explicit rows. Whole-plan architect reflection is ALIGNED at a095a4e514d6d8e5a37dbf05a66b2c9156ebaeeb28a8e0fb878bc76f931c27b1; the serializer and data-plane contract amendments were audited independently and passed. See 009_roadmap_lock.md.
29 changes: 29 additions & 0 deletions devlog/_plan/261003_cli_gui_parity/002_terminal_ux.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Terminal UX contract

This is a repeated-use management tool for people and automation. The design preserves the compact root help and contextual family navigation delivered by the CLI help stack; it extends task coverage without turning the terminal into an endpoint debugger.

Design variance: 2/10. Motion: 1/10 (no decorative animation). Density: D8 for the full reference, progressive disclosure for first use. Monospace, plain text and predictable line ordering carry meaning; color or symbols never determine correctness. Raster concepts do not help this utility surface and are intentionally omitted.

## Task language

- Extend existing nouns before adding new roots. Prefer list/show/status, set/update, enable/disable, apply/reset and their established domain equivalents.
- A family with no action offers a safe overview/help or an existing read-only default. It must never silently choose a write.
- Help is available without a live proxy and never runs a management action. Examples use registered grammar and placeholders, with a next read/verify command after a mutation.
- Short human output answers what changed, what remains unapplied and the next action. JSON preserves safe API DTO fidelity on stdout; diagnostics stay on stderr and failures keep documented exit codes.
- Empty lists distinguish no configuration, no matching rows and unavailable evidence. Do not render unavailable as zero or an empty successful inventory.
- Unknown/missing/duplicate arguments must fail before network writes. Boolean and numeric syntax reuse established parsers; structured inputs receive bounded, explicit JSON file/stdin forms only when the task's data shape needs them.
- IDs and names are encoded at path/query boundaries. No arbitrary method/URL command is counted as GUI parity.

## Writes and recovery

Existing management routes remain the source of validation, persistence, ownership and live application. A saved configuration is not proof that the client/runtime applied it; preserve refusal, partial application and restart-needed fields in output.

Destructive operations retain explicit confirmation or preview as appropriate to the existing command family and server contract. Read, preview, apply and verify are distinguishable operations. No hidden retry of non-idempotent writes. New commands do not expand account identity, browser consent or secret-returning authority.

No-running-proxy output names the recovery command. Invalid input names the argument and expected syntax without leaking its value when secret-bearing. Server errors preserve meaningful reason/hint fields and failure exit codes. Tests activate server refusal, not-found/conflict, malformed arguments and non-confirmed mutation paths.

## Discoverability and skills

The capability registry, help resolver, generated management reference and human recipes describe the same supported commands. Existing undeclared commands must be mapped before declaring a gap. Skill recipes start with readiness/version checks when operating a real proxy, then task-specific commands and verification. Human-only exclusions stay explicit and do not gain an API workaround.

Each inventory row records GUI task, existing API contract, existing CLI route, implementation/discovery gap, final command and verification, or a reasoned exclusion. Coverage is measured against user tasks, not endpoint count or lines added.
30 changes: 30 additions & 0 deletions devlog/_plan/261003_cli_gui_parity/003_verification_strategy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Verification strategy and observed baseline

Baseline: `9f89b7265b754eb681215ad327fc9459af37b9e1`, the completed CLI-help stack on dev. This unit starts on `codex/cli-parity-foundation` in the existing managed worktree.

Before implementation, the following ran successfully:

| Command | Result | What it observes |
| --- | --- | --- |
| `bun run typecheck` | exit 0 | The repository TypeScript graph, including src/cli. |
| `bun run structure:check` | exit 0 | Structure manifest, declared source ownership, existing paths and invariant bindings; not prose correctness. |
| `bun run skill:surface:check` | exit 0 | Generated skill reference compared with src/cli/capabilities.ts. |
| `bun test tests/cli/cli-capabilities.test.ts tests/cli/cli-capabilities-arguments.test.ts tests/server/management-route-registry.test.ts tests/ci-workflows/skill-ocx.test.ts` | 62 pass, 0 fail, 1180 assertions | Capability parsing, leaf-module import boundary, management declaration reconciliation and shipped-skill command/consent boundaries. |

Raw evidence is in the ignored `.tmp/cli-parity/baseline-*.log` files. The source-map command is unavailable in the installed plugin (it requires a codexclaw development checkout); bounded file inventories and exact source anchors replace it.

## Per-unit proof

Each implementation phase owns focused regression files with exact expected HTTP method/path/body, safe structured output, error/exit mapping and no-request assertions for rejected inputs. Tests use isolated homes and injected RuntimeApiDeps or a disposable loopback fixture; they do not mutate the operator's running proxy, credentials, client applications or accounts.

Acceptance includes real CLI subprocess invocations with separated stdout/stderr, recorded exit codes and plain/pipe output. Help/version paths must remain offline and write-free. For mutations, run an equivalent isolated management-route contract scenario where appropriate; mocking a request records transport shape but does not by itself prove server acceptance. Input files/stdin, cancellation and confirmation paths receive explicit reachable scenarios. Each QA-owned temporary server/process has a teardown receipt.

Existing global gates remain intact. New test files enter both test-layout maps. Source changes update their owning structure docs; public behavior updates CLI docs and the operating skill. Generated output is regenerated from its actual registry owner and checked for drift. Prose/UX semantics receive independent human-style review, not a test that only looks for a phrase.

## Broad verification and publication

Focused tests and type/static/document gates run locally. Full-suite and platform coverage use the current-head hosted PR CI for every layer; the repository's full suite has tens of thousands of tests and concurrent worktrees make repeated local full/changed runs disproportionate. This is the resource-scoped verification plan, not permission to ignore failing focused tests. Record exact commands and the coverage left to CI in each PR.

The preceding CLI-help task recorded four local full-suite failures, all reproduced on its untouched baseline (three restart-lease failures and a pre-request directory snapshot EISDIR). Those records are history, not current-unit passing evidence. If this unit encounters a failure, inspect it and attribute or repair it with fresh source/command evidence. No skip, threshold relaxation, retry-as-fix or unrelated suite substitution is allowed.

Each PR must retain its own current-head CI run, event, attempt, expected executed jobs, checkouts actually tested and open-review dispositions. Canceled/skipped/missing jobs are not passing tests. The stack remains open for review at completion; merge/release is not part of this request.
Loading
Loading