diff --git a/.handoff/20260801-1600-report-fde-map-320-321-closed.md b/.handoff/20260801-1600-report-fde-map-320-321-closed.md new file mode 100644 index 0000000..e099c95 --- /dev/null +++ b/.handoff/20260801-1600-report-fde-map-320-321-closed.md @@ -0,0 +1,85 @@ +--- +id: 20260801-1600-report-fde-map-320-321-closed +type: report +title: "FDE map: #320 second cycle filed as companion after a concurrent-session collision, #321 boundary ruled (stranger test, enforced by construction) and closed; employer name now 0 across core" +actor: code-claude +session_id: wayfinder-fde-operating-presence-2026-08-01 +refs: + - github:ojfbot/core#320 + - github:ojfbot/core#321 +hook: "github:ojfbot/core#319" +status: closed +created_at: 2026-08-01T16:00:00-0500 +labels: + project: fde-operating-presence +--- + +## Executed + +Two wayfinder tickets on map `fde-operating-presence` (operator worked #321 in the same session, +overriding the one-ticket-per-session rule knowingly). + +**#320 — FDE deliverables checklist + fleet re-audit (research).** One deep-research cycle, 21 +agents, run `wf_552dba6d-332`: 6 primary-source angles each pipelined into an adversarial verifier +that had to refetch cited URLs, 5 concurrent read-only fleet sweeps, completeness critic. + +**Collision.** A concurrent session worked the same ticket and finished first — merged PR #332 to +the exact target path, closed #320, appended the map gist, ~22 min into this cycle's sweep. Took +the conservative path: did not overwrite, did not reopen, did not add a second gist line. Filed as +a companion (`…-cycle-2.md`, PR #337, merged). Assignment was set before work and did not prevent +the collision — the other session assigned the same bot account. **This is the open weakness in the +claim=assignment guard.** + +**#321 — TeamBot public-evidence boundary (grilling).** Four operator decisions via +`/grill-with-docs`: pattern-level only / **stranger test** / **enforced by construction** (denylist +lint from gitignored `personal-knowledge/`) / scrub HEAD now, stage the history rewrite. PR #343 +merged. Employment-agreement assumption resolved by operator confirmation, not document review — +recorded as such. + +## Merged + +- core#337 — cycle-2 companion audit +- core#343 — #321 resolution: HEAD scrub, `decisions/open-unknowns.md` created (first in repo), map tended +- core#354 — scrub of the employer name from the cycle-2 doc itself (see Gotchas) +- core-library@ccbf853 — gitignore `public/graph/` (direct push; unprotected, and a safety fix in an open PR protects nothing) + +## State + +- **Employer name: 0 occurrences across all tracked files in `ojfbot/core`.** Was 3 lines / 2 files. +- 9 bare-alias files remain; unbound they pass the stranger test and the lint will sweep them. +- #320, #321 closed. Fog item graduated to #342 (Sanitized pattern-flow loop). +- #328 flagged **partly invalidated** — frame names the employer AND inverts the FDE/TDL role + assignment (§2.11, convergence 4: the FDE is the engineer in the pair, not the ROI owner). + Re-author, do not trim. +- Frontier: #322, #323, #325, #326, #327, #342. #327 has all the evidence it needs. + +## Gotchas for the next session + +- **The cycle-2 doc shipped carrying the employer name and had to be scrubbed after merge (#354).** + It was written before #321 ruled. Second time in one day that employer-naming material reached + public main via an automated session — the second time by the session that had just written the + boundary. Strongest available argument for the mechanical lint, and evidence the denylist must + run against `origin/main`, not only against new writes. +- **Larger exposure still open, deliberately not fixed:** `core-library` *serves* the vault graph — + `apps/web/src/main.ts:82` fetches `/graph/selfco.json` and the vault-ingest Vite plugin + regenerates it into `publicDir` on every build. No `vercel.json`/`.vercel`/`netlify.toml`, so + **not being deployed is the only containment.** Deploying republishes the private vault graph to + a public URL and `.gitignore` is powerless. Wants a build-time guard. **Deploying core-library is + blocked until decided.** +- **History rewrite deferred, will not happen unless scheduled.** 10 commits still carry the + strings (earliest 2026-06-25). Deferred because force-pushing `main` against ~23 live agent + sessions and 3 worktrees is worse than an exposure that 0 forks / 0 stars say nobody holds. +- **`core` forbids squash and merge commits — rebase only.** Both other methods error. +- `gh pr merge --delete-branch` fails to sync local `main` when the tree has other sessions' + unstaged changes; it leaves the checkout on stale `main`. Recover with `git reset origin/main` + (mixed — never `--hard`, which eats their work), then restore any files showing as ` D`. +- Disk-verified fleet facts worth not re-deriving: both hired-project test suites are **hermetic by + construction** (fake vectors / MockTransport), so green proves nothing real was touched; + `status.jsonl` has **zero** odometer lines against two declared movements; + `daily-logger/src/generate-article.ts:36` publicly advertises switchboard features that do not exist. + +## Not done + +- Three ADR stubs drafted but **not written** — operator runs `/adr new`: + `employer-evidence-boundary`, `boundary-enforced-by-construction`, `staged-history-remediation`. +- The denylist lint itself (a delivery — belongs on a roadmap, not the map).