60 lines
4.5 KiB
Markdown
60 lines
4.5 KiB
Markdown
# #1182 — fail closed when a wrong answer is read as no answer
|
|
|
|
## Objective
|
|
|
|
Implement FL-07 through FL-10 as one narrow fail-closed change: explicit invalid runtime/storage enum values and launcher failures must never be interpreted as absence or success.
|
|
|
|
## Tracking
|
|
|
|
- Issue: #1182 (child of #1156; W-F1 prerequisite)
|
|
- Branch: `fix/1182-fail-closed-launch`
|
|
- Verified base: `origin/next` at `216cd72226cd9ee17eea461cfe7cd0e010a22f02`
|
|
|
|
## Scope and fence
|
|
|
|
- Gateway chat runtime enum resolution and focused tests.
|
|
- Config storage-tier enum resolution and focused tests.
|
|
- Mosaic launcher spawn/provenance failure handling and focused integration/anti-drift tests.
|
|
- Narrow operator documentation in `packages/mosaic/README.md` if required by the behavior change.
|
|
- Preserve the #1109 lease broker without refactor; do not implement W-F1 composition.
|
|
- Do not touch #1178, #1179, #1072, #1080, #1054, `docs/TASKS.md`, or unrelated source/docs.
|
|
|
|
## Plan
|
|
|
|
1. RED: add one independent negative control per FL finding plus exact anti-drift checks.
|
|
2. Pause and report BASE / BRANCH / FENCE / SPLIT / RED to the coordinator.
|
|
3. After coordinator confirmation, implement each minimal fail-closed fix and verify each negative control independently.
|
|
4. Run affected package and repository test/typecheck/lint/build/format gates, focused security review, then commit/push/PR for independent exact-head verification.
|
|
|
|
## Split assessment
|
|
|
|
One PR remains reviewable: three narrowly bounded decision boundaries, no shared abstraction, no lease-broker refactor, and four independent tests naming the single defect class. Splitting would separate the same fail-closed invariant without reducing implementation coupling. If RED reveals material launcher harness expansion, split before production edits; the Gateway config half is the direct W-F1 selection prerequisite and would gate first.
|
|
|
|
## Budget
|
|
|
|
No explicit token or monetary cap supplied. Keep scope to the three production files, focused tests, this scratchpad, and one existing README.
|
|
|
|
## Progress
|
|
|
|
- Issue #1182 and parent #1156 read directly through Mosaic wrappers.
|
|
- Base derived from issue dependency plus repository topology: FL-07 exists on `origin/next` (introduced by #1172) and is absent from `origin/main`; branch reset before edits to the exact `origin/next` head above.
|
|
|
|
## Verification evidence
|
|
|
|
- RED observed independently for FL-07 through FL-10 before implementation.
|
|
- Focused GREEN: Gateway runtime 4/4, config 5/5, launcher 6/6.
|
|
- Four final per-finding production reverts discriminated: FL-07 made only FL-07 red; FL-08 made its unit and real Gateway boundary controls red after rebuilding config; FL-09 made only its abnormal-spawn controls red; FL-10 made all three provenance controls (`opencode`, `claudex`, and `yolo claudex`) red while sibling findings stayed green.
|
|
- Public config export negative control: removing only the `packages/config/src/index.ts` export caused TS2305 and `MosaicConfigEnvironmentError is not a constructor`; restoring it passed 5/5.
|
|
- Gateway full package: 74 files passed, 7 skipped; 829 tests passed, 17 skipped.
|
|
- Config full test/typecheck/lint/build: green.
|
|
- Mosaic typecheck/lint/build: green. Vitest is qualified-red only on the exact three update-notice stderr assertions tracked by #1190 — bare `--source`, bare `--decisions`, and bare `--observations`; 1528 other tests pass.
|
|
- The separate `test:framework-shell` command is red and is not attributed to #1190: `invariant_r_unittest.py` reports the host Pi runtime changed from measured 0.84.1 to 0.80.7. A clean archive of `origin/next@216cd722` reproduces the same single failure. The base test hardcodes the W-B measurement as `PI_VERSION = "0.84.1"`, then resolves `pi` via `shutil.which` and executes `--version`; on this host that is `/home/hermes/.npm-global/bin/pi`, whose global package reports 0.80.7. Issue #1191 tracks the immediate host drift and hardcoded-version design defect; #1184 tracks pinning/approving native Pi 0.84.1. No related source or test is changed here.
|
|
- Repository typecheck/lint/format/build: green.
|
|
- Codex security review: no findings. Initial code-review blocker (claudex provenance bypass) remediated with normal/yolo claudex coverage; subsequent public-export finding remediated.
|
|
|
|
## Risks / blockers
|
|
|
|
- Coordinated branch: no merge authority; coordinator routes independent exact-head verification.
|
|
- #1179 currently owns `apps/gateway/src/__tests__/required-security-wiring.test.ts`; this change does not touch it.
|
|
- #1190 independently tracks the pre-existing CLI smoke/update-notice stderr collision; no #1190 source or test is included here.
|