From fcfb71183ad15b6025ba230381c2f646b5fb5351 Mon Sep 17 00:00:00 2001 From: ojfbot <151410806+ojfbot@users.noreply.github.com> Date: Sat, 1 Aug 2026 17:16:04 -0500 Subject: [PATCH] =?UTF-8?q?wayfinder=20#347:=20dossier=E2=86=92presence=20?= =?UTF-8?q?seam=20=E2=80=94=20per-artifact=20clearance,=20absolute=20publi?= =?UTF-8?q?c-git=20lint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One-way valve, operator = only crossing point. Client term-set joins the gitignored denylist (stranger test); per-artifact written sign-off recorded in a fieldwork-1 permission ledger; cleared renders never enter public git; refusal narrows, never erases; case-study skeleton = G3 spine + G1 receipts. Map tended, unknowns ledger appended. Closes #347. Co-Authored-By: Claude Fable 5 --- decisions/open-unknowns.md | 40 ++++++++++++++++++++++ decisions/wayfinder/texas-rr-engagement.md | 17 ++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/decisions/open-unknowns.md b/decisions/open-unknowns.md index 63572da..870313d 100644 --- a/decisions/open-unknowns.md +++ b/decisions/open-unknowns.md @@ -33,3 +33,43 @@ HEAD scrubbed on decision; history rewrite staged. See `adr:employer-evidence-bo - No human review step for future narrative drafts before publish, beyond the mechanical lint. - ~~`core-library/public/graph/selfco.json` — untracked, not gitignored, in a public repo.~~ **FIXED 2026-08-01** — `core-library@ccbf853` ignores `public/graph/` wholesale. The git vector is closed. - **Open, and larger than the one just fixed: `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 is not currently deployed (no `vercel.json`, no `.vercel`, no `netlify.toml`), which is the only reason this is contained. **If core-library is ever deployed, the build republishes the entire private vault graph to a public URL, and `.gitignore` does nothing to stop it.** Under `adr:boundary-enforced-by-construction` this wants a build-time guard (de-identify at ingest, gate the fetch behind local-only, or exclude protected nodes from the graph), not a note. Decision, not yet made — deploying core-library is currently blocked on this. + +--- + +## 2026-08-01 — dossier→presence seam: per-artifact clearance over an absolute public-git lint (wayfinder #347) + +Ruling: engagement artifacts are private by default in `fieldwork-1`; public git stays absolutely +lint-clean (the client term-set joins the gitignored denylist of +`adr:boundary-enforced-by-construction`, stranger-test threshold); disclosure is upgraded +**per-artifact** by the client principal's written sign-off recorded in a permission ledger; +cleared renders never enter public git — the operator is the only crossing point to presence +surfaces; refusal narrows, never erases. See `adr:engagement-disclosure-seam` (stub). + +**Deferred decisions** +- Exact sign-off capture form (channel, ledger entry format) — unblocked by: conversation #1 + (the #346 discovery instrument carries the permission ask). +- History rewrite vs acceptance for client intel already in public git history — unblocked by: + #356's session (a scrub commit removes the tip, not the history). +- Off-git publish-checklist mechanics (Medium/LinkedIn/blog) — unblocked by: the + fde-operating-presence flywheel tickets (#322/#329); the surfaces are that map's, the seam is + this one's. + +**Unvalidated assumptions** +- The client grants documentation permission at all — the proof plan and dossier-as-compensation + floor rest on it; outright refusal re-scopes the engagement (standing ruling). +- The denylist lint (still an unbuilt roadmap delivery) accepts a second term-set without + redesign. +- Presence-surface publishing stays operator-manual. If any automation ever publishes outward, + the seam's "the operator is the only crossing point" guarantee silently breaks — a standing + constraint, not merely an assumption. +- A term denylist catches names, not situational fingerprints (distinctive figures, dated + incidents) — carried from the employer-boundary entry; applies doubly here since the + engagement narrates real jobs. + +**Standard considerations not covered** +- Screenshot redaction beyond names: EXIF/metadata, crew faces, addresses on work orders — + PII, not just identity terms. +- Third-party data inside artifacts: adjusters, insurers, builders' documents — parties who + never entered the permission protocol. +- Revocation after publication: no takedown protocol exists if the client withdraws a + previously granted clearance. diff --git a/decisions/wayfinder/texas-rr-engagement.md b/decisions/wayfinder/texas-rr-engagement.md index 63ec7e8..b2992d2 100644 --- a/decisions/wayfinder/texas-rr-engagement.md +++ b/decisions/wayfinder/texas-rr-engagement.md @@ -76,6 +76,16 @@ Closed tickets: - Client-data placement: client-named baselines live in the private engagement repo's northstar file only; the public registry carries slug/path/anonymous comment; the public map's existing client intel gets a sanitization pass (new task ticket) — Yuri, 2026-08-01 +- Dossier→presence seam (#347): one-way valve, operator = the only crossing point. Public git + stays absolutely lint-clean (client term-set joins the same gitignored denylist as + `adr:employer-evidence-boundary`; stranger test; default form "a DFW restoration contractor"); + disclosure upgrades are per-artifact via the client principal's written sign-off, recorded in a + permission ledger in `fieldwork-1`; cleared renders never enter public git — the operator + publishes them directly to presence surfaces; refusal narrows, never erases (de-identified + render still publishes; only outright documentation-refusal re-scopes); case-study skeleton + committed at kickoff = G3 spine + before/after baseline + G1 eval receipts + G4 plumbing + sidebar, blanks filled weekly; #356 executes its scrub under this same protocol — Yuri, + 2026-08-01 ## Tickets @@ -83,7 +93,7 @@ Closed tickets: |-------------------------------|------|------------|--------| | Engagement northstar: naming, properties, movement contract (#345) | grilling | — | closed | | Discovery instrument for conversation #1 (#346) | grilling | — | open | -| Dossier→presence seam: sanitization gate + permission protocol (#347) | grilling | — | open | +| Dossier→presence seam: sanitization gate + permission protocol (#347) | grilling | — | closed | | DFW restoration competitor + segment teardown (#348) | research | — | open | | Engagement repo bootstrap (private; proof-plan skeleton; fleet-onboard) (#349) | task | Engagement northstar | open | | Engagement stage-gates + TPM discipline (#350) | grilling | Engagement northstar | open | @@ -100,6 +110,11 @@ teardown, Engagement repo bootstrap (unblocked; repo = `fieldwork-1`), Engagemen (unblocked; scope WIDENED to include the SEH 17-process mapping onto self-built components), Public-map client-intel sanitization. +Frontier after #347 (2026-08-01): Discovery instrument, Competitor teardown, Engagement repo +bootstrap, Engagement stage-gates, Public-map client-intel sanitization (unparked — #347's +protocol is the one it was waiting to share; same term-set, describe-never-reproduce). #347 +blocked no tickets; no fog graduates from this close. + ## Not yet specified - **Generalized pipeline map / customer #2** — statable only after C1/C2 metrics exist; the scale