mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-09 16:59:43 +02:00
docs(cli-registry): annotate overlays.credStore as declared-for-later
Review item 4 named THREE live tables duplicating registry data. Two are now read from the entry (`defaultRemoteCommandForMode`, `defaultDockerCommandForMode`); the third, `resolveDockerCredentialArtifacts`, is not — and it was left neither wired nor annotated, which is the state that item explicitly rules out. It is not wired because the shape cannot express the live table: `credStore` is ONE store per CLI, and `CRED_STORES` needs two for gemini (`.gemini` for the CLI's own auth plus `.config/gcloud` for Vertex), while deepseek's entry declares none at all even though `.dsh` is seeded. Wiring it means making the field an array and correcting those two entries — a change to credential seeding, which is at once the worst thing in that file to get wrong and the least covered by tests, since every docker IO path is no-op'd under vitest. It belongs in its own change, measured against a real container. So it is annotated instead, at the field, in the type's declared-for-later header, in docs/cli-registry.md, and in the pinned DECLARED_FOR_LATER list — the last of which means wiring it later makes a test fail rather than leaving a stale comment behind. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WQkoi1cNegqVwZHgzx5SbJ
This commit is contained in:
@@ -103,6 +103,8 @@ This matters because it is invisible when it is wrong. `capabilities.privilegedP
|
|||||||
|
|
||||||
Treat those values as **transcribed, not authoritative** — nothing enforces that `echo.policy` matches `_updateLocalEchoState`'s fallthrough, or that `accent` matches the gradient CSS paints, so re-measure before wiring one up. A field that is both wrong and unread is worse than an absent one, because the next reader trusts it; `test/cli-registry-no-id-branching.test.ts` pins the list so it cannot quietly grow, and wiring one up makes its line there fail, which is the direction you want.
|
Treat those values as **transcribed, not authoritative** — nothing enforces that `echo.policy` matches `_updateLocalEchoState`'s fallthrough, or that `accent` matches the gradient CSS paints, so re-measure before wiring one up. A field that is both wrong and unread is worse than an absent one, because the next reader trusts it; `test/cli-registry-no-id-branching.test.ts` pins the list so it cannot quietly grow, and wiring one up makes its line there fail, which is the direction you want.
|
||||||
|
|
||||||
|
`overlays.credStore` is in the same category, for a sharper reason: the Docker credential-seeding path still reads its own `CRED_STORES` table, because this shape allows ONE store per CLI and the live table needs two for gemini (`.gemini` for the CLI's own auth plus `.config/gcloud` for Vertex), while deepseek declares none here even though `.dsh` is seeded. Wiring it means making the field an array and correcting those two entries — a change to credential seeding, which is simultaneously the worst thing here to get wrong and the least covered by tests, since every docker IO path is no-op'd under vitest.
|
||||||
|
|
||||||
Everything else in the interface is live, including `overlays.remote` / `overlays.docker`, which back `defaultRemoteCommandForMode()` and `defaultDockerCommandForMode()` directly. Those two used to be hardcoded `Record<…CommandMode, string>` tables duplicating the registry with nothing keeping the two in step; `test/location-overlay-commands.test.ts` pins every resulting command as a literal string.
|
Everything else in the interface is live, including `overlays.remote` / `overlays.docker`, which back `defaultRemoteCommandForMode()` and `defaultDockerCommandForMode()` directly. Those two used to be hardcoded `Record<…CommandMode, string>` tables duplicating the registry with nothing keeping the two in step; `test/location-overlay-commands.test.ts` pins every resulting command as a literal string.
|
||||||
|
|
||||||
## Resolve at call time, never at import
|
## Resolve at call time, never at import
|
||||||
|
|||||||
@@ -443,6 +443,19 @@ export interface CliOverlays {
|
|||||||
*/
|
*/
|
||||||
remote?: { command?: string } | { disabled: true };
|
remote?: { command?: string } | { disabled: true };
|
||||||
docker?: { command?: string } | { disabled: true };
|
docker?: { command?: string } | { disabled: true };
|
||||||
|
/**
|
||||||
|
* ⚠️ DECLARED-FOR-LATER, unlike `remote`/`docker` above, which are live.
|
||||||
|
*
|
||||||
|
* The Docker credential-seeding path still reads its own `CRED_STORES` table in
|
||||||
|
* `docker-hosts.ts`, because this shape cannot yet express that table: it allows ONE store
|
||||||
|
* per CLI, and the live table needs two for gemini (`.gemini` for the CLI's own auth plus
|
||||||
|
* `.config/gcloud` for Vertex), while deepseek's entry here declares none at all even
|
||||||
|
* though `.dsh` is seeded. Wiring it therefore means making this an ARRAY and correcting
|
||||||
|
* those two entries — a change to credential seeding, which is both the highest-consequence
|
||||||
|
* thing in this file to get wrong and the least covered by tests, since every docker IO
|
||||||
|
* path is no-op'd under vitest. It belongs in its own change, measured against a real
|
||||||
|
* container.
|
||||||
|
*/
|
||||||
credStore?: CliCredStore;
|
credStore?: CliCredStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -453,7 +466,7 @@ export interface CliOverlays {
|
|||||||
/**
|
/**
|
||||||
* ⚠️ DECLARED-FOR-LATER: fields no code reads yet.
|
* ⚠️ DECLARED-FOR-LATER: fields no code reads yet.
|
||||||
*
|
*
|
||||||
* `shortBadge`, `accent`, `capabilities.echo`, `capabilities.wheelForward`,
|
* `shortBadge`, `accent`, `overlays.credStore`, `capabilities.echo`, `capabilities.wheelForward`,
|
||||||
* `capabilities.keyboardAccessory` and `capabilities.maxFrameBytes` all describe FRONTEND
|
* `capabilities.keyboardAccessory` and `capabilities.maxFrameBytes` all describe FRONTEND
|
||||||
* behaviour, and the frontend is deliberately untouched by the change that introduced this
|
* behaviour, and the frontend is deliberately untouched by the change that introduced this
|
||||||
* registry — `app.js`, `terminal-ui.js`, `styles.css` and friends keep their own
|
* registry — `app.js`, `terminal-ui.js`, `styles.css` and friends keep their own
|
||||||
|
|||||||
@@ -315,6 +315,9 @@ describe('declared-for-later fields', () => {
|
|||||||
'capabilities.wheelForward',
|
'capabilities.wheelForward',
|
||||||
'capabilities.keyboardAccessory',
|
'capabilities.keyboardAccessory',
|
||||||
'capabilities.maxFrameBytes',
|
'capabilities.maxFrameBytes',
|
||||||
|
// The Docker credential-seeding path still reads its own CRED_STORES table: this shape
|
||||||
|
// allows ONE store per CLI and the live table needs two for gemini. See CliOverlays.
|
||||||
|
'overlays.credStore',
|
||||||
];
|
];
|
||||||
|
|
||||||
/** Read every `.ts` under src/, minus the registry itself (which of course names them). */
|
/** Read every `.ts` under src/, minus the registry itself (which of course names them). */
|
||||||
|
|||||||
Reference in New Issue
Block a user