I1207 — No credential reaches any output, and hostile provider metadata renders safely
Prove the negatives. Place sentinel values in the client-secret and signing-key environment variables and exercise every output this repository produces — API responses, the Cockpit's HTML, the generated site, OpenAPI and its examples, MCP answers, the artifact manifest, the caches, the logs and the doctor report — asserting no sentinel appears anywhere. Separately, give a provider object a display name carrying control characters, ANSI sequences and markup, and assert it renders as text in the terminal, in the HTML and in the JSON.
BLOCKED wave 4 · p0 · implementation profile · parallel safe
Part of web-sign-in — The deployed surfaces know who is asking, and the identity providers are data.
Blocked. This issue cannot start until I1204 is done. The status is derived from that, not declared.
Objective
Prove the negatives. Place sentinel values in the client-secret and signing-key environment variables and exercise every output this repository produces — API responses, the Cockpit's HTML, the generated site, OpenAPI and its examples, MCP answers, the artifact manifest, the caches, the logs and the doctor report — asserting no sentinel appears anywhere. Separately, give a provider object a display name carrying control characters, ANSI sequences and markup, and assert it renders as text in the terminal, in the HTML and in the JSON.
Why
Every other guarantee of this milestone is a claim until a test tries to break it, and a credential that leaks once has leaked permanently.
Current state
No credentials exist yet, so no test can leak one.
Desired state
A sentinel test runs in CI and fails loudly if any future change routes a credential into an output.
Scope
- apps/majordomus-cli/tests
- test/cases
- .ai/repo/ci/gates.yaml
Out of scope
- Weakening the assertion to the outputs that happen to pass today
Dependencies
Acceptance criteria
- The sentinel sweep covers every output surface the repository produces, enumerated from the registry rather than listed by hand where that is possible
- A deliberate regression that renders a secret is caught by the test, proved by a negative case
- Hostile provider metadata renders as text on every surface, with no escape and no truncation that hides it
- The gate runs in CI on every change
Validation
- bash test/run.sh
- cargo test --workspace --all-features
Evidence required
- sentinel_sweep
- negative_case
- hostile_metadata
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Risk
A sweep that enumerates outputs by hand will miss the surface added after it. Where the registry can enumerate them, it does.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I1207.yaml. Read it back with majordomus plan show I1207.