Skip to content

wayfinder: resolve TeamBot public-evidence boundary (#321) - #343

Merged
ojfbot merged 2 commits into
mainfrom
wayfinder/321-employer-evidence-boundary
Aug 1, 2026
Merged

wayfinder: resolve TeamBot public-evidence boundary (#321)#343
ojfbot merged 2 commits into
mainfrom
wayfinder/321-employer-evidence-boundary

Conversation

@ojfbot

@ojfbot ojfbot commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Resolves wayfinder #321 on the map fde-operating-presence. Grilled via /grill-with-docs (4 questions, operator-answered).

The ruling

Day-job material enters public FDE artifacts only as de-identified engineering patterns, and only where they pass the stranger test: a reader with no prior knowledge of the operator's employment cannot identify the employer, the internal system, or the team. Re-identification by someone who already knows the operator is explicitly accepted, not defended against. Attributed publishing is out of scope fleet-wide and does not become available by seeking sign-off.

Enforced by construction, not by discipline — a denylist lint sourced from gitignored personal-knowledge/. The rationale is evidential rather than theoretical: the one documented breach of this boundary was committed by an automated session that merged employer-naming material to public main 39 minutes after the governing ticket opened. Agents are the population writing to these repos and they do not read policy before merging. Discipline has one observed failure here and zero observed successes.

The denylist cannot live in the public repo — a list of the terms being protected is itself the disclosure it prevents. personal-knowledge/ is gitignored with zero tracked files and is the one boundary that held cleanly through this entire episode.

What this PR does

  • Scrubs HEAD. Employer name went from 3 lines across 2 files to 0 occurrences in tracked files. The load-bearing one was decisions/wayfinder/fde-operating-presence.md:19-20, the single place that bound system nickname → employer → strategic framing. The 9 bare-alias files are left in place: unbound, they pass the stranger test, and the lint will sweep them.
  • Creates decisions/open-unknowns.md — the grill's durable artifact, and the first in this repo.
  • Tends the map — gist appended to ## Decisions so far, TeamBot public-evidence boundary #321 marked closed, Positioning narrative + venue map #328 flagged as partly invalidated, and the TeamBot-pattern-flow fog graduated to a ticket (Sanitized pattern-flow loop #342) now that the boundary makes its question statable.

What this PR does NOT do

  • No history rewrite. 10 commits still carry the strings (earliest 2026-06-25). Deferred deliberately: force-pushing main against ~23 live agent sessions and 3 worktrees is a larger risk than a history exposure that 0 forks and 0 stars say nobody currently holds. Logged as a deferred decision.
  • No lint. That is a delivery, not a decision — it belongs on a roadmap, not on the map (two-ledger rule).
  • No ADRs written. Three stubs are drafted for you to run through /adr new: employer-evidence-boundary, boundary-enforced-by-construction, staged-history-remediation.

The assumption this rests on

Recorded plainly in the ledger rather than buried: the ruling was made without either party reading the actual employment agreement or publication policy. If that policy requires pre-approval for any work-derived publication, this ruling is void and the boundary collapses to employer-indifferent. Worth reading before the first pattern-level artifact publishes, not after.

Unrelated live hazard, flagged not fixed

core-library/public/graph/selfco.json — 1.5 MB, untracked, not gitignored, in a public repo, carrying a protected term in a node title. One git add -A publishes it. Different repo, so out of scope here; it wants a one-line .gitignore entry.

🤖 Generated with Claude Code

Ruling: day-job material is publishable only as de-identified engineering
patterns passing the STRANGER TEST (a reader with no prior knowledge of the
operator's employment cannot identify employer, system, or team). Attributed
publishing is out of scope fleet-wide. Enforced by construction — a denylist
lint sourced from gitignored personal-knowledge/ — not by author discipline,
because the one documented breach was committed by an automated session.

HEAD scrubbed on the decision: employer name now at 0 occurrences in tracked
files (was 3 lines across 2 files, one of which bound nickname to employer).
The 9 bare-alias files remain and pass the stranger test unbound. History
rewrite of the 10 affected commits is staged, not done — force-pushing main
against ~23 live agent sessions is the deferred risk.

Map tended: gist appended, #321 closed, #328 flagged as partly invalidated
(its frame names the employer and inverts the FDE/TDL role assignment), and
the TeamBot-pattern-flow fog graduated to #342 now that the boundary makes
its question statable.

Ledger: decisions/open-unknowns.md created (grill artifact). The load-bearing
unvalidated assumption is recorded plainly — the ruling was made without
either party reading the actual employment agreement.

ADR stubs drafted for /adr new: employer-evidence-boundary,
boundary-enforced-by-construction, staged-history-remediation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Skill Audit — PR #343

Skills used during development

  • /frame-standup
  • /wayfinder

Recommended skills (based on diff analysis)

  • /investigate — PR references bug fix — was root cause analyzed?

Coverage

  • /investigate was not used but is recommended

Generated by skill-audit

- Employment-agreement assumption RESOLVED (operator-confirmed), struck
  through rather than deleted so the closure method stays visible.
- core-library selfco.json git leak FIXED (core-library@ccbf853 ignores
  public/graph/ wholesale).
- NEW, and bigger than the one just closed: core-library serves the vault
  graph at runtime (apps/web/src/main.ts:82 fetches it; the vault-ingest
  Vite plugin regenerates it into publicDir on every build). The repo is
  not currently deployed, which is the only thing containing it. Deploying
  core-library would republish the private vault graph to a public URL and
  .gitignore would not stop it. Wants a build-time guard, not a note.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ojfbot

ojfbot commented Aug 1, 2026

Copy link
Copy Markdown
Owner Author

Follow-up pushed (8ae7ce6), plus a fix in a sibling repo.

Fixed: core-library@ccbf853 gitignores public/graph/ wholesale — the generated vault graph can no longer be committed to that public repo. Pushed directly to core-library/main (unprotected) rather than via PR, since a safety fix sitting in an open PR protects nothing.

Resolved: the employment-agreement assumption — operator-confirmed. Struck through in the ledger rather than deleted, so a future reader can see it closed by confirmation rather than by document review.

Newly open, and larger than the one just closed: core-library serves the vault graph at runtime. apps/web/src/main.ts:82 fetches /graph/selfco.json, and the vault-ingest Vite plugin regenerates it into publicDir on every build. The repo has no vercel.json, .vercel, or netlify.tomlnot being deployed is the only thing containing this. Deploy it and the build republishes the entire private vault graph to a public URL, with .gitignore powerless to stop it. Under adr:boundary-enforced-by-construction that wants a build-time guard (de-identify at ingest, local-only fetch gate, or exclude protected nodes), so deploying core-library is effectively blocked until it's decided.

@ojfbot
ojfbot merged commit 587a7e0 into main Aug 1, 2026
9 checks passed
@ojfbot
ojfbot deleted the wayfinder/321-employer-evidence-boundary branch August 1, 2026 20:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant