carlos / platform Public

plan: phase 0 was wrong about its own five failures

Running the root package here does not produce five failures and a pass
for everything else. It produces five failures and then the test binary
EXITS — a log.Fatal on the same root cause takes the process down, in
0.2 seconds, against 147 in CI. Everything after that point is unrun and
nothing says so, which means nobody has ever seen this package's local
state at all. TestConfigDefaultWalk fails at its first assertion too and
is not in the five, because the binary is already gone by then.

One cause, not five: walkConfig climbs from cwd to the filesystem root,
passes through /home/paulca, and adopts the developer's own global
config as a PROJECT pin — authoritative, per the resolution spec, so
resolution never falls past it. Any checkout under a home directory that
has ever run `carlos auth default` gets this.

Filed as discussion #17 rather than fixed in passing. The narrow half
has a precedent to copy exactly (CARLOS_CONFIG, mirroring
CARLOS_CREDENTIALS at auth.go:134). The other half needs the walk to
have a boundary — $HOME, or the repo root, which is what config.go's own
header already describes a project config as — and that is a
documented-behaviour change owned by the console-default-resolution
spec, not something to decide while clearing a red gate.

Phase 1 does not wait on it. The gate that matters is CI's, and CI has
never had this problem.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PEkJh1ESqiA84quAHJV4K6
Paul Campbell pushed by paul@keymail.dev 8cec4dd05ce61a2a74e8e4b9cd11e2a61d5e8612 parent 161041b
1 file changed, +31 −12
  • docs/superpowers/plans/2026-09-04-scanning-to-deployable.md +31 −12
diff --git a/docs/superpowers/plans/2026-09-04-scanning-to-deployable.md b/docs/superpowers/plans/2026-09-04-scanning-to-deployable.md
index bdb62894f..26a9d27c2 100644
--- a/docs/superpowers/plans/2026-09-04-scanning-to-deployable.md
+++ b/docs/superpowers/plans/2026-09-04-scanning-to-deployable.md
@@ -41,10 +41,15 @@ true. It is also the exact shape of camouflage a sixth failure needs: the
package was known to be red, so the count was never read.
The fix is one line. The lesson costs more than the fix: **a known-failing
-package cannot be a known-failing package.** The environmental failures are
-real and specific — the checkout sits under `/home/paulca`, so `pick()` finds a
-live `~/.carlos/config` — and from here they are named individually, by test,
-not as a count. Phase 0 closes this.
+package cannot be a known-failing package.**
+
+And the note was not even accurate about its own five. Running the package
+locally shows the test binary **exiting after 0.2 seconds** — a `log.Fatal` on
+the same root cause takes the process down, so most of a 147-second suite is
+never run and nothing says so. The cause is one lookup with no boundary:
+`walkConfig` climbs from cwd to `/`, passes through `/home/paulca`, and adopts
+the developer's own global config as a project pin. Filed as **discussion
+#17**; Phase 0 carries the diagnosis and Phase 1 does not wait on the fix.
### What is deployable today
@@ -120,16 +125,30 @@ without it. Starting that clock now overlaps someone else's work with tasks
- [x] Fix the `carlos store` usage assertion.
- [ ] Push, and read `amadan ci status carlos/platform` until the gate passes.
-- [ ] Replace the "five tests fail environmentally" note in both plans with the
- named list, and the reason (`pick()` finds a real `~/.carlos/config` because
- the checkout is under `/home/paulca`). A count is not a note; a list is.
-- [ ] Add a `make test` wrapper or `CARLOS_CONFIG` override so the root package
- passes locally too. **The right end state is zero known-failing tests**, so
- that any red is news. If that turns out to be more than an hour, file it and
- move on — but file it, because the camouflage is the actual defect here.
+- [x] Diagnose the local failures properly — and the diagnosis is worse than the
+ note. **The test binary does not run to completion on this machine**: a
+ `log.Fatal` on the same root cause takes the process down after five
+ reported failures, in 0.2 seconds, against 147 in CI. Everything after that
+ point is unrun, and nothing says so. `TestConfigDefaultWalk` fails at its
+ first assertion too and is not in the five, because the binary is already
+ gone. There is no basis for "five".
+- [x] One cause, not five: `walkConfig` (`config.go:62`) climbs from cwd to the
+ filesystem root, passes through `/home/paulca`, and adopts the developer's
+ global config as a *project* pin. It bites any checkout under a home
+ directory that has ever run `carlos auth default`.
+- [x] **Filed as `carlos/platform` discussion #17** rather than fixed here. The
+ narrow half copies an existing precedent (`CARLOS_CONFIG`, mirroring
+ `CARLOS_CREDENTIALS` at `auth.go:134`); the other half needs a walk boundary
+ — `$HOME` or the repo root — and that is a documented-behaviour change owned
+ by `2026-08-04-console-default-resolution-design.md`, not a midnight
+ drive-by.
+- [ ] **Zero known-failing tests, and a line in AGENTS.md** saying a
+ known-failing test is a defect in its own right. This is the bullet that
+ pays for the other two: the failure count was what got read instead of the
+ names, and that is precisely how a week of red went unexamined.
**Done when:** `amadan ci status carlos/platform -branch worktree-store-scan-on-demand`
-exits 0.
+exits 0. The local suite is #17's job, and Phase 1 does not wait on it.
## Phase 1 — land the sweep half