docs(naming): retire the two phantom Buzz repositories and delete the disambiguation rule they forced - #23
docs(naming): retire the two phantom Buzz repositories and delete the disambiguation rule they forced#23jeremylongshore wants to merge 7 commits into
Conversation
… disambiguation rule they forced
WHAT
- 006 (canonical naming record): six assets -> four, all of which exist. The
contributor-lab and deferred-plugin rows are gone; the "never write the bare
phrase intent-ops-buzz" section is DELETED, not reworded; the four-plane flow
and its ASCII diagram become three planes; the gate/boundary/IEP prose no
longer routes through a lab that will not be built. A dated Revision
2026-08-07 note records exactly what was removed and why.
- 001 (master blueprint): the ELab ledger row is dropped and Phase 6 is
rewritten as CLOSED/deferred-indefinitely with the real reason. E9's phantom
plugin-repo name is removed; the epic stays deferred.
- 000-INDEX: the 006 summary no longer advertises six assets or the deleted rule.
- CLAUDE.md: commits this session's fork-lane guidance (both gates, the two
branch lanes, vendored-harness commands, task-state pointers) and drops the
now-stale "host-vs-repo boundaries" phrasing.
- .harness-hash: re-pinned (see VERIFICATION).
WHY
Neither intent-solutions-io/intent-ops-buzz nor
intent-solutions-io/intent-ops-buzz-plugin has ever been created, and both are
still 404. The lab repo was additionally given the same string as the real
production VPS, and 006 papered over that collision with a rule enforced on
every mention ("a bare intent-ops-buzz is a defect, fix on sight"). A name that
needs a footnote every time it appears is the defect. Killing the phantom
removes the collision at the source, so the rule is deleted rather than policed.
Track C is closed as deferred-indefinitely: the contribution practice has
produced one upstream PR (block#4722) that needed no lab, and the flagship
candidate the lab was designed to verify was dropped -- Block fixed the relay
half independently (block#4196) and the desktop half was a fork-local defect.
Chose to AMEND 006 in place over superseding it with a 008: the change narrows
the record rather than reversing it, and six downstream docs cite 006 by number,
so amending keeps every existing pointer valid.
THE PRODUCTION HOST NAME IS UNCHANGED. intent-ops-buzz is a real VPS with DNS,
systemd units, compose files, and backup scripts; ~80 of the 86 references
across the estate are to it and are correct. This commit touches no prod, no
compose, no secrets, and no runbook procedure.
VERIFICATION
- scripts/audit-harness verify: exit 0. It exited 2 BEFORE this branch, on
committed content -- 000-INDEX.md had drifted from its pin and
007-AA-AUDR-* was never pinned (both landed via #17/#20 with no follow-up
re-pin), so pre-push was red for everyone in this repo. Reviewed the drift,
confirmed both were legitimate content changes, then re-pinned 006/001/
000-INDEX and added 007 in one pass: "pinned 13 file(s)".
- scripts/fork-gates/check-additive-only.sh: "additive-only OK vs upstream/main".
- scripts/fork-gates/check-must-survive.sh: "must-survive set intact (12 paths)".
- grep -rn 'intent-ops-buzz' 000-docs/: every remaining hit is the production
host, except 006's Revision note which documents the retirement itself.
- gh repo view intent-solutions-io/intent-ops-buzz: still 404 -- and now nothing
claims otherwise.
RISK
Documentation only; no runtime surface. The reachable failure mode is a future
session looking for a lab repo that the docs no longer mention -- addressed by
the dated Revision note in 006, the CLOSED Phase 6 section in 001, and
intent-os decision-log/048.
UNFINISHED
The parked architecture draft lands in the private ops lane in a companion
intent-os PR (ops/buzz/PLAN-contrib-lab-architecture.md, DEFERRED) alongside
decision-log/048, which supersedes D138 in decision-log/040.
Beads: buzz-v2p
Signed-off-by: jeremylongshore <jeremylongshore@users.noreply.github.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughThe PR retires phantom repositories, defers the contributor-lab architecture, preserves the production host name, revises Buzz to four assets and three planes, expands gate evidence, and adds fork review guidance with hash and gate protections. ChangesBuzz governance and fork contract
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches 💡 1⚔️ Resolve merge conflicts 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Code Review SummaryThe review did not run because the selected model is no longer available. Choose another model in Kilo Code review settings: https://app.kilo.ai/code-reviews Previous Review Summaries (4 snapshots)Current summary above is authoritative. Previous snapshots are kept for context only. Previous reviewThe review did not run because the selected model is no longer available. Choose another model in Kilo Code review settings: https://app.kilo.ai/code-reviews Previous reviewThe review did not run because the selected model is no longer available. Choose another model in Kilo Code review settings: https://app.kilo.ai/code-reviews Previous reviewThe review did not run because the selected model is no longer available. Choose another model in Kilo Code review settings: https://app.kilo.ai/code-reviews Previous reviewThe review did not run because the selected model is no longer available. Choose another model in Kilo Code review settings: https://app.kilo.ai/code-reviews |
|
Linked bead: |
… flight, not landed WHAT 006 and 001 both stated that Block "fixed the relay half independently (block#4196)" as part of the rationale for closing Track C. Reworded to "Block has its own upstream fix for the relay half in flight (block#4196, open at time of writing)". Re-pinned .harness-hash for the two edited files. WHY block#4196 is OPEN, not merged -- verified against the GitHub API while checking the same branch's other claims: $ gh pr view 4196 --repo block/buzz --json state,mergedAt {"mergedAt":null,"number":4196,"state":"OPEN", ...} 006 is the canonical naming record, so an overstated upstream status there propagates to every doc that defers to it. The Track-C closure rationale is unaffected in substance: the point is that the fork-local onboarding change was dropped because upstream owns that fix, and that remains true whether block#4196 has landed yet or not. The desktop half was a fork-local defect that had no business on fork main regardless. VERIFICATION - scripts/audit-harness verify: exit 0 after re-pin. - scripts/fork-gates/check-additive-only.sh: OK vs upstream/main. - scripts/fork-gates/check-must-survive.sh: 12 paths intact. Refs: #23 Beads: buzz-v2p Signed-off-by: jeremylongshore <jeremylongshore@users.noreply.github.com>
|
bd-sync from |
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
000-docs/006-DR-STND-authoritative-naming-and-boundaries.md (1)
67-85: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winAlign the three-plane definition with the diagram.
The earlier boundary text identifies the code fork, live ops lane, and production host as the three planes. This section instead assigns the three jobs to IEP, Intent OS, and the host. The diagram also shows upstream, the code fork, IEP, the ops lane, and the host without assigning each box to a plane.
State explicitly whether IEP belongs to the contribution plane and define the code fork's role. Keep one plane mapping in both the prose and diagram.
As per coding guidelines,
006-DR-STNDis canonical for asset naming and plane boundaries.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@000-docs/006-DR-STND-authoritative-naming-and-boundaries.md` around lines 67 - 85, Revise the “The three-plane flow” section so the prose and diagram use one consistent plane mapping: explicitly place IEP within or outside the contribution plane, define the code fork’s role, and identify how the upstream, code fork, IEP, ops lane, and production host map to the three planes. Use 006-DR-STND’s canonical asset-naming and boundary definitions, and update both the explanatory text and diagram together.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@000-docs/001-PP-PLAN-buzz-adoption-master-blueprint.md`:
- Around line 92-94: Reconcile the E2d and E3 completion-ledger rows in the
blueprint with the current state recorded in .beads/issues.jsonl and
.beads/interactions.jsonl. Update them to reflect the permanent production URL,
passed production gate suite, and closed production epic, or explicitly mark the
outdated pre-cutover entries as historical so retired DNS/cutover work and
completed gates are not reopened.
In `@000-docs/006-DR-STND-authoritative-naming-and-boundaries.md`:
- Around line 111-114: Update the “code fork stays rebase-clean” guidance near
the additive-only rule to allow the declared fork-governance tooling and
divergences: scripts/fork-gates/, the vendored audit harness,
lefthook-local.yml, and the two documented divergences. Restrict the prohibition
to product and operational tooling while retaining the existing intent-only path
exclusions.
---
Outside diff comments:
In `@000-docs/006-DR-STND-authoritative-naming-and-boundaries.md`:
- Around line 67-85: Revise the “The three-plane flow” section so the prose and
diagram use one consistent plane mapping: explicitly place IEP within or outside
the contribution plane, define the code fork’s role, and identify how the
upstream, code fork, IEP, ops lane, and production host map to the three planes.
Use 006-DR-STND’s canonical asset-naming and boundary definitions, and update
both the explanatory text and diagram together.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: a668bb7f-e4f3-4ab7-8cbf-d4ae98ab93d7
📒 Files selected for processing (7)
.beads/interactions.jsonl.beads/issues.jsonl.harness-hash000-docs/000-INDEX.md000-docs/001-PP-PLAN-buzz-adoption-master-blueprint.md000-docs/006-DR-STND-authoritative-naming-and-boundaries.mdCLAUDE.md
…k-governance tooling in 006 WHAT Two review findings on PR #23, both in text this branch touched: - §3 "three-plane flow": the prose named IEP/IntentOS/host as the three planes while the diagram showed five boxes and §5 discussed fork/ops-lane/host, so a reader could not tell which boxes were planes. Now states outright that upstream and the fork are SOURCE (not planes), that the fork never decides, records, or runs, and tags every diagram box with its plane or SOURCE. - §5 "boundaries": "internal tooling never enters the fork" contradicted the fork's actual surface. Narrowed to internal PRODUCT AND OPS tooling, with an explicit fork-governance exception naming scripts/fork-gates/, the vendored audit harness, and lefthook-local.yml as REQUIRED on governance main per FORK.md's must-survive table. Also made explicit that contrib/* excludes governance files too -- the two lanes never mix in either direction. WHY The §3 ambiguity is one I introduced in this branch by collapsing four planes into three and leaving the diagram's box set unchanged. 006 is the canonical naming and boundaries record; a plane mapping a reader has to infer is exactly the class of defect this branch exists to remove. The §5 contradiction is older -- the sentence predates this branch -- but it sits in a section this branch rewrote, and it is a one-line carve-out rather than a scope extension. Left as-is it says the fork gates violate the fork contract they enforce. DEFERRED, NOT FIXED (scope): the same review flagged that 001's E2d/E3 ledger rows still describe pre-cutover production while the beads record the epic closed 2026-07-30. That is pre-existing drift in lines this branch does not modify, and reconciling it means asserting current production cutover state -- which needs verification against the host and the ops lane, not a docs edit. Filed as bead buzz-51i. VERIFICATION - scripts/audit-harness verify: OK (re-pinned after the edit). - scripts/fork-gates/check-additive-only.sh: OK vs upstream/main. - scripts/fork-gates/check-must-survive.sh: 12 paths intact. - `grep -n '^## ' 006`: sections still 1-6 with no renumbering, so the one in-repo cross-ref (`001` cites `006` §4 for the two gates) still resolves. Refs: #23 Beads: buzz-v2p, buzz-51i Signed-off-by: jeremylongshore <jeremylongshore@users.noreply.github.com>
|
Addressed the review in Fixed (both in text this branch touched):
Deferred with a bead —
Gates after the fix: Note on the red
|
…l three gate surfaces WHAT - NEW REVIEW.md: repository-specific guidance for Kilo's automated PR reviewer, following the estate convention (intent-os, claude-code-plugins, and the three bobs-big-brain repos all carry a root REVIEW.md). Written for THIS repo rather than copied: the fork contract as the rule that outranks everything, the two branch lanes, public-repo disclosure safety, 006 as the canonical naming authority, the gate/pin mechanics, and severity calibration whose Critical tier is headed by "an upstream-owned path modified on main". - Registered in all three places a new root file must appear, in lockstep: the ALLOW array in check-additive-only.sh, the MUST_SURVIVE array in check-must-survive.sh (12 -> 13 paths), and FORK.md's must-survive table. - Added to .harness-hash-extra-patterns and re-pinned (13 -> 14 files). WHY This fork had no reviewer guidance at all, so the bot reviewed it as if it were an ordinary repo -- with no idea that modifying an upstream-owned path is the defect that matters most here. That is not hypothetical: PR #16 merged 14 upstream-owned paths onto main and had to be reverted (000-docs/007-AA-AUDR-fork-contract-breach-2026-08-03.md). REVIEW.md puts the contract, the breach audit, and the lane separation in front of the reviewer before it reads a diff. Verified REVIEW.md is NOT an upstream-owned path before adding it -- `git ls-tree upstream/main --name-only | grep -i '^review'` returns nothing -- so this is a true addition, not a third declared divergence. The three-surface registration is not ceremony: check-additive-only.sh is a strict prefix ALLOWLIST, so an unregistered new root file FAILS the gate rather than passing silently. REVIEW.md is policy surface, so it is hash-pinned for the same reason FORK.md is -- a silent edit to reviewer instructions is exactly the drift the pin exists to catch. Chose to pin it over leaving it unpinned because reviewer guidance that can be quietly weakened is worse than none. VERIFICATION - scripts/audit-harness verify: OK (14 files pinned, REVIEW.md among them). - scripts/fork-gates/check-additive-only.sh: OK vs upstream/main. - scripts/fork-gates/check-must-survive.sh: "must-survive set intact (13 paths)". - Confirmed the gate would have rejected REVIEW.md before registration: it is a prefix allowlist with no wildcard for root files. RISK No runtime surface. The one real risk is the allowlist and FORK.md drifting apart in future -- REVIEW.md itself now instructs the reviewer to flag a PR that edits one without the other. Refs: #23 Beads: buzz-v2p Signed-off-by: jeremylongshore <jeremylongshore@users.noreply.github.com>
|
bd-sync from Also addressed the CodeRabbit review on #23: fixed the §3 three-plane ambiguity I introduced (every diagram box now tagged with its plane or SOURCE) and the §5 'internal tooling never enters the fork' contradiction (fork-governance carve-out). Deferred the stale 001 E2d/E3 ledger rows as bead buzz-51i — pre-existing drift in unmodified lines, and reconciling it means asserting prod cutover state that needs verification, not a passing docs edit. |
…zz-51i Captures the bd-sync notes made while PR #23 was in flight: the stale-branch tip SHA recorded before deletion, the REVIEW.md scope addition and its three-surface registration, and the CodeRabbit review disposition. Also lands buzz-51i, the deferred 001 ledger-reconciliation bead filed from that review. The mirror is the tracked portable export; Dolt holds the authoritative history. Flushed with bd export, not hand-edited. Refs: #23 Beads: buzz-v2p, buzz-51i Signed-off-by: jeremylongshore <jeremylongshore@users.noreply.github.com>
|
bd-sync from
Correction worth recording: I nearly reported this as pre-existing drift, but the four earlier pushes on this branch all CANCELLED their CI runs, so this was the first Desktop suite to complete on the branch and there was no prior green to compare against. The re-run is the evidence, not the assumption. Required-check status: buzz#23 |
The bead read 'Install nak on the Buzz hosts and run the real functional-probe rehearsal, then enable the prod updater timer'. Two of those three were already true or are now done, and the stated blocker was never the real one: - nak was ALREADY installed on both hosts; the bead had been blocked on that since 2026-07-29 on a wrong diagnosis. - The real blocker was that the functional probe defaults to ws://127.0.0.1:3004 while the relay is vhost-scoped, so loopback 404s on the WS upgrade and a healthy relay looks broken. - The rehearsal is now done and green on staging AND production, and both hosts were promoted off a 32-day-stale image in the process (intent-os PR block#455). What remains is one drill: a persistent smoke failure on the NEW digest with a healthy old one, proving a clean revert without latching HOLD. Until that passes the timer stays dormant. Retitled so the next reader sees the actual gate instead of re-deriving it from a stale description. Status returned to open — the work is not in flight, it is waiting on that drill. Signed-off-by: jeremylongshore <jeremylongshore@users.noreply.github.com>
There was a problem hiding this comment.
Actionable comments posted: 8
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.beads/interactions.jsonl:
- Around line 38-39: Synchronize the status for issue buzz-2i6 using bd or
bd-sync so the tracked snapshot in issues.jsonl matches the latest interaction
log state, open, and retains the corresponding update timestamp; do not edit
either JSONL file directly.
In @.beads/issues.jsonl:
- Line 24: Update the description of issue buzz-v2p in .beads/issues.jsonl so
the reference to block/buzz#4196 reflects its verified open status rather than
claiming Block fixed the relay half. Keep the Track C deferral rationale
accurate by stating only the confirmed outcome supported by that issue’s current
state.
- Line 18: The issue title overstates readiness by naming only the clean-revert
drill while the description still lists restore_stores and the real SBOM gate as
prerequisites. Update the issue title to include all remaining timer-enablement
gates, or remove each gate from the description only after recording evidence
that it passed.
- Line 18: Sanitize the public bead record for issue “buzz-2i6” by removing
production-host identities, deployment and updater configuration, probe
behavior, backup/restore details, private paths, and other operational runbook
content from its description and notes. Retain only a concise public-safe status
and planning summary, and move the removed operational details into the private
intent-os/ops/buzz/ lane.
In `@REVIEW.md`:
- Around line 120-123: The task-state instructions in REVIEW.md should require
all beads mutations and synchronization through bd-sync, explicitly prohibit raw
bd commands, and retain the buzz prefix and manual or bulk JSONL edit
restrictions.
- Around line 12-13: Update the repository read-order guidance in REVIEW.md to
require AGENTS.md first, followed by FORK.md and 000-docs/000-INDEX.md. Move
CLAUDE.md after this mandatory sequence only if it remains necessary, and remove
the existing order that places it first and AGENTS.md third.
- Around line 26-28: Reconcile the fork-owned path lists by comparing the ALLOW
array in check-additive-only.sh with the must-survive table in FORK.md. Add
.gitleaksignore to both FORK.md and MUST_SURVIVE if it is fork-owned, or remove
it from ALLOW if it is not; ensure future edits to either list require updating
the other.
In `@scripts/fork-gates/check-additive-only.sh`:
- Line 25: Update the matcher in the additive-only gate around the ALLOW-entry
loop so entries ending in “/” use prefix matching, while file entries such as
“REVIEW.md” require an exact path match. Preserve the existing allowlist
behavior and ensure any newly added root-level or prefix file is also documented
in FORK.md.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 41a1e38f-aa19-4803-85f7-d5c81f777f1c
📒 Files selected for processing (10)
.beads/interactions.jsonl.beads/issues.jsonl.harness-hash.harness-hash-extra-patterns000-docs/001-PP-PLAN-buzz-adoption-master-blueprint.md000-docs/006-DR-STND-authoritative-naming-and-boundaries.mdFORK.mdREVIEW.mdscripts/fork-gates/check-additive-only.shscripts/fork-gates/check-must-survive.sh
🚧 Files skipped from review as they are similar to previous changes (2)
- 000-docs/001-PP-PLAN-buzz-adoption-master-blueprint.md
- 000-docs/006-DR-STND-authoritative-naming-and-boundaries.md
| {"id":"int-a5479c82c5d9c3c7da53d4baf4bb8f08","kind":"field_change","created_at":"2026-08-11T19:49:36.533530195Z","actor":"jeremylongshore","issue_id":"buzz-2i6","extra":{"field":"status","new_value":"in_progress","old_value":"open"}} | ||
| {"id":"int-9c727b473c1d75965374aa86d3810db0","kind":"field_change","created_at":"2026-08-11T20:37:16.384829305Z","actor":"jeremylongshore","issue_id":"buzz-2i6","extra":{"field":"status","new_value":"open","old_value":"in_progress"}} |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Synchronize the status snapshot with the interaction log.
Line 39 changes buzz-2i6 to open, but .beads/issues.jsonl Line 18 still reports in_progress with the same update timestamp. Snapshot readers and replay readers will return different states. Update the bead through bd/bd-sync so both records agree.
As per coding guidelines, synchronize the tracked JSONL mirror with bd-sync, not raw JSONL edits.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.beads/interactions.jsonl around lines 38 - 39, Synchronize the status for
issue buzz-2i6 using bd or bd-sync so the tracked snapshot in issues.jsonl
matches the latest interaction log state, open, and retains the corresponding
update timestamp; do not edit either JSONL file directly.
Source: Coding guidelines
| {"_type":"issue","id":"buzz-yfe","title":"Encode durable Buzz operational expertise — reference, skill, operator agents","description":"Stop operating Buzz by trial-and-error. Produce source-grounded reference docs, a buzz-ops skill that bundles them, and validated operator agents that actually know how Buzz is wired. Built via /skill-creator and /agent-creator (IS 8-field spec), grounded in the references. Home: ops/buzz/reference/ (docs), intent-os .claude/ (skill+agents).","status":"closed","priority":1,"issue_type":"epic","owner":"jeremylongshore@users.noreply.github.com","created_at":"2026-07-31T03:27:11Z","created_by":"jeremylongshore","updated_at":"2026-07-31T03:37:21Z","closed_at":"2026-07-31T03:37:21Z","close_reason":"All 7 children closed: 2 references + skill + 3 agents + validation; all PASS the IS validators","dependency_count":0,"dependent_count":0,"comment_count":0} | ||
| {"_type":"issue","id":"buzz-ehv","title":"Community channel layout and identity roster — build clean, keep clean","description":"The buzz-prod community's channel architecture and member/agent identity hygiene. Ground truth + procedures: ops/buzz/RUNBOOK-channels.md (source-cited). SHIPPED this session (2026-07-31): the clean provider-first open layout (0-general pinned, ask, ai-wire, anthropic-* group, \u003cprovider\u003e-wire firehoses, topic *-wire, private sys-*); persona agents (Bumble/Fizz/Honey/CCA-F) purged; canonical names set (Buzz Admin, goose minimax3, AI Wire, humans); RUNBOOK-channels.md written. Open children below.","status":"open","priority":1,"issue_type":"epic","owner":"jeremylongshore@users.noreply.github.com","created_at":"2026-07-31T03:27:09Z","created_by":"jeremylongshore","updated_at":"2026-07-31T03:27:09Z","dependency_count":0,"dependent_count":0,"comment_count":0} | ||
| {"_type":"issue","id":"buzz-2i6","title":"Install nak on the Buzz hosts and run the real functional-probe rehearsal, then enable the prod updater timer","description":"The updater lane is deployed to staging (dormant) but the real functional-probe rehearsal is blocked: nak (the NIP-42 auth+publish+readback CLI the probe uses) is absent on the Buzz hosts. buzz-admin IS in the relay image. Steps: install nak on staging (+ prod), run functional-probe.sh against the live staging relay (throwaway member auth+publish+readback, un-invited refused, cleans up), then a controlled no-op-digest updater rehearsal on staging, THEN install-updater-lane.sh intent-ops-buzz --enable-timer for prod. Parent: buzz-ocv.4.","notes":"REHEARSAL PARTIAL on live staging 2026-07-29 (nak copied to /usr/local/bin/nak on the staging host; jq present). VERIFIED LIVE: closed relay up+healthy+CORS-applied; buzz-admin add-member/remove-member/list-members work — EXACT syntax is 'buzz-admin add-member --pubkey \u003chex-or-npub\u003e' (NOT positional; positional errors with usage). nak emits 64-char hex from 'nak key public'; relay accepts hex. add+remove round-trip proven; test member cleaned up (relay left clean: owner + 1 pre-existing member). REMAINING: the nak publish/readback NIP-42 flow hung with reactive '--auth' — the closed relay likely needs '--force-pre-auth' (authenticate BEFORE the EVENT/REQ), and readback (nak req -i \u003cid\u003e) on a closed relay also needs auth so the member NSEC must be threaded into functional-probe.sh's readback() (currently it only gets the event id). NEXT: (1) prove 'NOSTR_SECRET_KEY=\u003cnsec\u003e nak event -k1 -c X --auth --force-pre-auth \u003cws\u003e' returns an id against staging; (2) prove readback with the member key; (3) bake the verified commands + --pubkey into functional-probe.sh add_member/del_member/publish/readback; (4) then no-op-digest updater rehearsal on staging; (5) install-updater-lane.sh intent-ops-buzz --enable-timer.\nREHEARSAL DONE on staging (intent-os PR #288): nak installed on the staging host; functional-probe.sh fixed to the real NIP-42 flow (--sec, public wss through Caddy, --force-pre-auth readback, --pubkey, keygen newline, global cleanup trap) and PROVEN GREEN E2E against the live staging relay — member publish+readback, un-invited refused; smoke-suite PASS; unauth-matrix 6/6. Self-cleaning; staging membership left clean. REMAINING: install nak on the PROD host + run the same 3 gates against buzz-prod off-network; then enable the prod updater timer.\nAdvanced 2026-07-30 (ultracode Track-A workflow), timer NOT armed by design: (1) nak installed on prod host intent-ops-buzz (/usr/local/bin/nak, keygen verified); (2) wrapped-updater lane installed DORMANT via install-updater-lane.sh (no --enable-timer) — 6/6 lane scripts + both systemd units present, daemon-reload+syntax OK; (3) smoke-suite.sh + unauth-matrix.sh pushed (the installer omits them); (4) functional-probe rehearsal PASSED green against live prod (see buzz-nry.3 gate-suite run — member auth/publish/readback, un-invited refused, self-cleaned). VERIFIED dormant: timer disabled+inactive, updater.service never ran, serving digest unchanged (a0f672). REMAINING = arm the timer (systemctl enable --now) — HELD pending owner call: arming = unattended weekly pre-1.0 prod deploys with advisory-only scan, before apex cutover. Recommend arming AFTER apex cutover; lane is one command from armed.","status":"open","priority":1,"issue_type":"task","owner":"jeremylongshore@users.noreply.github.com","created_at":"2026-07-29T21:47:43Z","created_by":"jeremylongshore","updated_at":"2026-07-30T05:40:19Z","labels":["go-live","probe","updater"],"dependency_count":0,"dependent_count":0,"comment_count":0} | ||
| {"_type":"issue","id":"buzz-2i6","title":"Enable the Buzz prod updater timer — blocked only on drilling the clean revert case, everything else is done and proven","description":"The updater lane is deployed to staging (dormant) but the real functional-probe rehearsal is blocked: nak (the NIP-42 auth+publish+readback CLI the probe uses) is absent on the Buzz hosts. buzz-admin IS in the relay image. Steps: install nak on staging (+ prod), run functional-probe.sh against the live staging relay (throwaway member auth+publish+readback, un-invited refused, cleans up), then a controlled no-op-digest updater rehearsal on staging, THEN install-updater-lane.sh intent-ops-buzz --enable-timer for prod. Parent: buzz-ocv.4.","notes":"REHEARSAL PARTIAL on live staging 2026-07-29 (nak copied to /usr/local/bin/nak on the staging host; jq present). VERIFIED LIVE: closed relay up+healthy+CORS-applied; buzz-admin add-member/remove-member/list-members work — EXACT syntax is 'buzz-admin add-member --pubkey \u003chex-or-npub\u003e' (NOT positional; positional errors with usage). nak emits 64-char hex from 'nak key public'; relay accepts hex. add+remove round-trip proven; test member cleaned up (relay left clean: owner + 1 pre-existing member). REMAINING: the nak publish/readback NIP-42 flow hung with reactive '--auth' — the closed relay likely needs '--force-pre-auth' (authenticate BEFORE the EVENT/REQ), and readback (nak req -i \u003cid\u003e) on a closed relay also needs auth so the member NSEC must be threaded into functional-probe.sh's readback() (currently it only gets the event id). NEXT: (1) prove 'NOSTR_SECRET_KEY=\u003cnsec\u003e nak event -k1 -c X --auth --force-pre-auth \u003cws\u003e' returns an id against staging; (2) prove readback with the member key; (3) bake the verified commands + --pubkey into functional-probe.sh add_member/del_member/publish/readback; (4) then no-op-digest updater rehearsal on staging; (5) install-updater-lane.sh intent-ops-buzz --enable-timer.\nREHEARSAL DONE on staging (intent-os PR #288): nak installed on the staging host; functional-probe.sh fixed to the real NIP-42 flow (--sec, public wss through Caddy, --force-pre-auth readback, --pubkey, keygen newline, global cleanup trap) and PROVEN GREEN E2E against the live staging relay — member publish+readback, un-invited refused; smoke-suite PASS; unauth-matrix 6/6. Self-cleaning; staging membership left clean. REMAINING: install nak on the PROD host + run the same 3 gates against buzz-prod off-network; then enable the prod updater timer.\nAdvanced 2026-07-30 (ultracode Track-A workflow), timer NOT armed by design: (1) nak installed on prod host intent-ops-buzz (/usr/local/bin/nak, keygen verified); (2) wrapped-updater lane installed DORMANT via install-updater-lane.sh (no --enable-timer) — 6/6 lane scripts + both systemd units present, daemon-reload+syntax OK; (3) smoke-suite.sh + unauth-matrix.sh pushed (the installer omits them); (4) functional-probe rehearsal PASSED green against live prod (see buzz-nry.3 gate-suite run — member auth/publish/readback, un-invited refused, self-cleaned). VERIFIED dormant: timer disabled+inactive, updater.service never ran, serving digest unchanged (a0f672). REMAINING = arm the timer (systemctl enable --now) — HELD pending owner call: arming = unattended weekly pre-1.0 prod deploys with advisory-only scan, before apex cutover. Recommend arming AFTER apex cutover; lane is one command from armed.\nUNBLOCKED AND MOSTLY DONE, but the timer is deliberately NOT enabled. The bead's stated blocker was wrong: nak was already installed on BOTH hosts. The real blocker was that the functional probe defaults to ws://127.0.0.1:3004 and the relay is vhost-scoped, so loopback returns 404 on the WS upgrade - a healthy relay looked broken. Rehearsal then found the lane had never been runnable at all: (1) BUZZ_IMAGE_CHANNEL=ghcr.io/block/buzz:relay is a 404 tag on both hosts; (2) DW_SMOKE_CMD was UNSET on both hosts and deploy-wrapper treats unset as SUCCESS, so every promotion would self-certify and auto-revert could never fire; (3) backup.sh/restore.sh were never shipped by install-updater-lane.sh so staging aborted at 'bound snapshot failed'. All four fixed in intent-os PR #455 with a new smoke-probe.sh that self-resolves RELAY_URL per host. PROVEN LIVE: smoke gate passes healthy and fails closed on both hosts; staging AND production promoted a0f67203 (built 2026-07-10, 32 days stale) -\u003e 4e31b7c7 (2026-08-08) with the functional probe green; prod verified after - NIP-11 200, 13 members and 483 channel/roster event pairs intact. This closes the RUSTSEC-2026-0225..0232 nostr bump and the relay subscription lock-inversion fix. TIMER STAYS DORMANT because the clean revert case is still unproven: a /bin/false drill did revert the image but could not confirm health so it paged and latched HOLD (correct fail-closed), and a once-fail drill was defeated by the wrapper's bounded smoke retry. Remaining before enabling: drill the clean revert, drill restore_stores (never exercised), and replace the always-pass advisory-scan with a real SBOM gate.","status":"open","priority":1,"issue_type":"task","owner":"jeremylongshore@users.noreply.github.com","created_at":"2026-07-29T21:47:43Z","created_by":"jeremylongshore","updated_at":"2026-08-11T20:37:16Z","started_at":"2026-08-11T19:49:36Z","labels":["go-live","probe","updater"],"dependency_count":0,"dependent_count":0,"comment_count":0} |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
Align the title with all remaining timer gates.
Line 18 says the updater is blocked only on the clean-revert drill. The same record lists the restore_stores drill and replacement of the always-pass advisory scan with a real SBOM gate. This mismatch can cause premature production timer enablement. Update the title or remove each remaining gate only after evidence is recorded.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.beads/issues.jsonl at line 18, The issue title overstates readiness by
naming only the clean-revert drill while the description still lists
restore_stores and the real SBOM gate as prerequisites. Update the issue title
to include all remaining timer-enablement gates, or remove each gate from the
description only after recording evidence that it passed.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Remove private operational detail from public bead records.
Lines 18 and 24 add production-host identity and deployment details, including updater state, image configuration, probe behavior, backup/restore work, and private intent-os/ops/buzz paths. Keep a short public status and move runbook and configuration details to the private ops lane.
As per coding guidelines, the public repository must contain only public-safe planning; runbooks, backups, and private operational configuration belong in intent-os/ops/buzz/.
Also applies to: 24-24
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.beads/issues.jsonl at line 18, Sanitize the public bead record for issue
“buzz-2i6” by removing production-host identities, deployment and updater
configuration, probe behavior, backup/restore details, private paths, and other
operational runbook content from its description and notes. Retain only a
concise public-safe status and planning summary, and move the removed
operational details into the private intent-os/ops/buzz/ lane.
Source: Coding guidelines
| {"_type":"issue","id":"buzz-nry.2","title":"Deploy production from the proven staging artifacts with fresh secrets and cut DNS over","description":"Deploy prod from the proven staging artifacts (same digest-pinned compose) with FRESH secrets minted on the new box (new relay identity, new bootstrap owner key until the owner's desktop key swaps in, new db/redis/minio; staging keys never promote). DNS cuts over to the prod host at go-live; the shared stack renames to the staging domain. Deploy specifics + addressing in intent-os ops/buzz. Depends on the bootstrap child.","notes":"Prod deploy DONE (apex cutover pending): staging-proven digest-pinned compose deployed with FRESH prod secrets; 4 containers healthy; own Caddy ingress TLS + security headers. REMAINING (gated on the owner's client-generated desktop key): DNS cutover to the prod host, rename staging to the staging domain, swap BUZZ_DOMAIN/RELAY_URL/CORS to the apex, swap RELAY_OWNER_PUBKEY to the owner's desktop pubkey. Addressing + specifics in intent-os ops/buzz.","status":"closed","priority":1,"issue_type":"task","owner":"jeremylongshore@users.noreply.github.com","created_at":"2026-07-29T16:31:22Z","created_by":"jeremylongshore","updated_at":"2026-07-30T07:17:44Z","closed_at":"2026-07-30T07:17:44Z","close_reason":"DONE 2026-07-30. Production deployed from proven staging artifacts with FRESH secrets on the dedicated host intent-ops-buzz, serving buzz-prod.intentsolutions.io (169.58.95.32). The 'cut DNS over' (apex → buzz.) requirement is DROPPED by owner decision 2026-07-30: buzz-prod.intentsolutions.io is the PERMANENT production URL (no apex cutover). Prod DNS is therefore already on its permanent, correct name — nothing further to cut over.","labels":["hosting"],"dependencies":[{"issue_id":"buzz-nry.2","depends_on_id":"buzz-nry","type":"parent-child","created_at":"2026-07-29T10:31:22Z","created_by":"jeremylongshore","metadata":"{}"},{"issue_id":"buzz-nry.2","depends_on_id":"buzz-nry.1","type":"blocks","created_at":"2026-07-29T10:31:31Z","created_by":"jeremylongshore","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0} | ||
| {"_type":"issue","id":"buzz-nry.1","title":"Bootstrap the new production host to estate conventions","description":"Bootstrap the dedicated prod host to estate ops/host conventions: Ubuntu 24.04, tailnet-only SSH, ufw, fail2ban, unattended-upgrades, docker, its own Caddy (separate ingress = separate failure domain), age host key + sops, borg client, Netdata (tailnet-bound). Host addressing, key paths, and access detail live ONLY in intent-os ops/buzz. Gated on the owner installing the dev-box SSH key.","status":"closed","priority":1,"issue_type":"task","owner":"jeremylongshore@users.noreply.github.com","created_at":"2026-07-29T16:31:15Z","created_by":"jeremylongshore","updated_at":"2026-07-29T18:06:58Z","started_at":"2026-07-29T17:57:57Z","closed_at":"2026-07-29T18:06:58Z","close_reason":"intent-ops-buzz bootstrapped to estate baseline + verified: Ubuntu 24.04.4 LTS, hostname intent-ops-buzz, joined tailnet [tailnet addr — intent-os ops/buzz] (untagged/user-owned, matching estate); ufw default-deny (tailnet-trusted iface + public 80/443 only, public 22 CLOSED/times-out); sshd key-only + PermitRootLogin no + PasswordAuthentication no; a non-root sudo admin account (NOPASSWD, docker group); fail2ban + unattended-upgrades active; 2G swap swappiness=10; docker 29.6 (log-rotation + live-restore) + compose v5.3; caddy 2.11 (own ingress); age host key at [host key path — intent-os ops/host] (recipient [host age recipient — intent-os ops/host/secrets]); borg client; sops 3.9.4; Netdata bound loopback+tailnet only (127.0.0.1:19999 + [tailnet addr — intent-os ops/buzz]:19999, not public). 7/7 services active.","labels":["hosting"],"dependencies":[{"issue_id":"buzz-nry.1","depends_on_id":"buzz-nry","type":"parent-child","created_at":"2026-07-29T10:31:15Z","created_by":"jeremylongshore","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} | ||
| {"_type":"issue","id":"buzz-nry","title":"Stand up the dedicated Buzz production VPS and cut the prod domain over to it","description":"Track D: Buzz production runs on its OWN dedicated VPS (owner topology decision 2026-07-29, fork 000-docs/005) so a fast-moving pre-1.0 stack does not share a failure domain with revenue workloads. The shared-VPS stack becomes permanent STAGING (epic buzz-ocv). Prod = the proven staging artifacts (same digest-pinned compose) with FRESH secrets; staging keys never promote. All go-live gates run against prod before any invite. Concrete host detail (addressing, keys, DNS, deploy specifics) lives ONLY in the private intent-os ops/buzz lane.","notes":"GitHub: intent-solutions-io/buzz#9 — https://github.com/intent-solutions-io/buzz/issues/9. MIRROR RULE: bd-sync handles fan-out — `bd-sync note buzz-nry` and `bd-sync close buzz-nry` mirror to GH and Plane automatically.\n\nPlane: BUZZ-3 — (Plane, internal)\nProd pairing milestone 2026-07-30: mobile device pairing now LIVE on the production host (buzz-prod.intentsolutions.io) — sidecar + Caddy /pair deployed, owner confirmed a real device paired (intent-os PR #291). Prod relay + sidecar both healthy. Remaining under this prod epic: .2 apex DNS cutover off buzz-prod-\u003e buzz., .3 full go-live gate suite against prod.","status":"closed","priority":1,"issue_type":"epic","owner":"jeremylongshore@users.noreply.github.com","created_at":"2026-07-29T16:31:08Z","created_by":"jeremylongshore","updated_at":"2026-07-30T07:18:01Z","started_at":"2026-07-29T17:57:57Z","closed_at":"2026-07-30T07:18:01Z","close_reason":"EPIC DONE 2026-07-30. Dedicated Buzz production VPS (intent-ops-buzz, 169.58.95.32) stood up to estate conventions (.1), deployed with fresh secrets serving buzz-prod.intentsolutions.io (.2), and the full go-live gate suite passed against it (.3). Owner decision 2026-07-30: buzz-prod.intentsolutions.io is the PERMANENT production URL — the 'cut the prod domain over' (apex) part of this epic is intentionally NOT done and is retired, not deferred. All three children closed.","labels":["hosting"],"dependency_count":0,"dependent_count":0,"comment_count":0} | ||
| {"_type":"issue","id":"buzz-v2p","title":"Retire the two phantom Buzz repositories and delete the naming-disambiguation rule they forced","description":"The naming record 006 reserved two GitHub repositories that were never created: intent-solutions-io/intent-ops-buzz (Track-C contributor lab) and intent-solutions-io/intent-ops-buzz-plugin (deferred operator plugin). The lab repo was given the same string as the real production VPS, and 006 papered over that collision with a 'never write the bare phrase intent-ops-buzz' rule enforced on every mention.\n\nRetire both phantom repos. With the lab gone there is no collision, so the disambiguation rule is DELETED rather than enforced. Track C is closed as deferred-indefinitely: the contribution practice produced one upstream PR (block/buzz#4722) that needed no lab, and the flagship candidate the lab was designed to verify was dropped (Block fixed the relay half in #4196; the desktop half was a fork-local defect). The parked architecture draft moves into version control at intent-os ops/buzz/PLAN-contrib-lab-architecture.md as DEFERRED.\n\nThe production host name intent-ops-buzz is UNCHANGED — it is a real VPS with DNS, systemd units, compose files, and backup scripts, and ~80 of the 86 references across the estate are to it and are correct.\n\nAlso fixes a currently-red gate: scripts/audit-harness verify exits 2 on committed content (000-INDEX drifted from its pin, 007-AA-AUDR was never pinned) — both landed via PRs #17/#20 without a follow-up re-pin, so pre-push is red for everyone in this repo.","acceptance_criteria":"006 lists four assets that all exist; the disambiguation section is deleted; the flow is three planes; 001 ledger has no ELab row and no phantom repo names; scripts/audit-harness verify exits 0; both fork gates green; the parked draft is in version control under intent-os ops/buzz/; decision-log/048 supersedes D138; stale branch origin/fix/community-member-onboarding deleted.","notes":"GitHub: intent-solutions-io/buzz#23 — https://github.com/intent-solutions-io/buzz/issues/23. MIRROR RULE: bd-sync handles fan-out — `bd-sync note buzz-v2p` and `bd-sync close buzz-v2p` mirror to GH and Plane automatically.\nDeleting stale remote branch `fix/community-member-onboarding` (the reverted PR #16 branch). Tip SHA recorded for recovery: `a991d7c77643a59a76a9239bdc5cea98f24d7388`. Its 6 commits are not ancestors of `main` (PR #16 was squash-merged, then reverted by #18), and each is resolved: the push-gateway CI fix is upstream as `block/buzz#4722` (open) and also lives on `contrib/push-gateway-image-override`, which is KEPT until #4722 closes; the nine RUSTSEC bumps were dropped because upstream carries them; the onboarding change was dropped because the relay half belongs upstream (Block's own `#4196`, open) and the desktop half was a fork-local defect that violated the additive-only contract. Recover with `git fetch origin a991d7c77643a59a76a9239bdc5cea98f24d7388` if ever needed.\nScope addition (owner request mid-flight): added a fork-specific `REVIEW.md` — this repo had NO reviewer guidance, so the PR bot reviewed it as an ordinary repo with no notion that touching an upstream-owned path is the defect that matters most here (exactly how PR #16's breach got through). Registered across all three surfaces that a new root file must appear in, in lockstep: the ALLOW array in check-additive-only.sh, MUST_SURVIVE in check-must-survive.sh (12→13 paths), and FORK.md's table; also hash-pinned (13→14 files) so reviewer instructions cannot be silently weakened. Verified `REVIEW.md` is NOT upstream-owned (`git ls-tree upstream/main` → no match), so it is a true addition, not a third declared divergence. Proved the registration is load-bearing by running the gate with the allowlist entry stripped: 'NON-ADDITIVE CHANGE vs upstream/main: REVIEW.md', exit 1.\n\nAlso addressed the CodeRabbit review on #23: fixed the §3 three-plane ambiguity I introduced (every diagram box now tagged with its plane or SOURCE) and the §5 'internal tooling never enters the fork' contradiction (fork-governance carve-out). Deferred the stale 001 E2d/E3 ledger rows as bead buzz-51i — pre-existing drift in unmodified lines, and reconciling it means asserting prod cutover state that needs verification, not a passing docs edit.\nCI verdict: all checks green on #23 except the Kilo bot (not a required check; it is failing on 'selected model is no longer available', a bot-settings issue, not a finding).\n\n`Desktop Smoke E2E (4)` failed once on `thread-focus-mode.spec.ts` — investigated rather than waved off, and it is a FLAKE. Evidence: (1) the PR's complete diff is 12 files — 000-docs/, CLAUDE.md, FORK.md, REVIEW.md, both gate scripts, .harness-hash*, .beads/ — with nothing under desktop/, crates/, web/, mobile/, or src/, so there is no mechanism by which it breaks a desktop E2E test; (2) the same shard already reported `relay-reconnect.spec.ts` as flaky-passed-on-retry in that very run; (3) `gh run rerun --failed` on the identical commit returned RUN=success with zero code changes.\n\nCorrection worth recording: I nearly reported this as pre-existing drift, but the four earlier pushes on this branch all CANCELLED their CI runs, so this was the first Desktop suite to complete on the branch and there was no prior green to compare against. The re-run is the evidence, not the assumption.\n\nRequired-check status: buzz#23 `fork-contract` PASS; intent-os#392 Gates + Drills + gitleaks all PASS. Both awaiting merge approval.","status":"in_progress","priority":2,"issue_type":"task","owner":"jeremylongshore@users.noreply.github.com","created_at":"2026-08-07T22:52:15Z","created_by":"jeremylongshore","updated_at":"2026-08-07T23:37:30Z","started_at":"2026-08-07T22:52:19Z","dependency_count":0,"dependent_count":0,"comment_count":0} |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Correct the upstream issue state.
Line 24 says Block fixed the relay half in #4196. The supplied commit summary says block/buzz#4196 remains open rather than merged. Replace this statement with the verified status before using it to justify Track C deferral.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.beads/issues.jsonl at line 24, Update the description of issue buzz-v2p in
.beads/issues.jsonl so the reference to block/buzz#4196 reflects its verified
open status rather than claiming Block fixed the relay half. Keep the Track C
deferral rationale accurate by stating only the confirmed outcome supported by
that issue’s current state.
| governance files on top. Read `CLAUDE.md` first, then `FORK.md`, then `AGENTS.md` (upstream-owned and | ||
| authoritative for all build, test, and architecture questions). |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Use the mandatory repository read order.
This sequence starts with CLAUDE.md, places AGENTS.md third, and omits 000-docs/000-INDEX.md. Change it to read AGENTS.md, then FORK.md, then 000-docs/000-INDEX.md. Read CLAUDE.md only after that sequence if it remains necessary.
As per coding guidelines: **/*: Follow the mandatory read order: AGENTS.md, then FORK.md, then 000-docs/000-INDEX.md.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@REVIEW.md` around lines 12 - 13, Update the repository read-order guidance in
REVIEW.md to require AGENTS.md first, followed by FORK.md and
000-docs/000-INDEX.md. Move CLAUDE.md after this mandatory sequence only if it
remains necessary, and remove the existing order that places it first and
AGENTS.md third.
Source: Coding guidelines
| The machine form of the contract is the `ALLOW` array in | ||
| `scripts/fork-gates/check-additive-only.sh`; its human form is `FORK.md`'s must-survive table. The | ||
| two must stay in lockstep — **flag any PR that edits one without the other**. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Reconcile the allowlist and must-survive table.
This new lockstep claim is not true in the supplied files. scripts/fork-gates/check-additive-only.sh allows .gitleaksignore at Line 29, but the FORK.md must-survive table has no .gitleaksignore entry. Add the path to FORK.md and MUST_SURVIVE, or remove it from ALLOW after confirming that it is not a fork-owned path.
As per coding guidelines: FORK.md: Keep FORK.md and scripts/fork-gates/check-additive-only.sh in lockstep; flag any change to one without the other.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@REVIEW.md` around lines 26 - 28, Reconcile the fork-owned path lists by
comparing the ALLOW array in check-additive-only.sh with the must-survive table
in FORK.md. Add .gitleaksignore to both FORK.md and MUST_SURVIVE if it is
fork-owned, or remove it from ALLOW if it is not; ensure future edits to either
list require updating the other.
Source: Coding guidelines
| Task state lives in beads (prefix `buzz`); `.beads/issues.jsonl` is the tracked portable mirror, and | ||
| the authoritative history is the local Dolt database. Change beads through `bd`/`bd-sync`, never by | ||
| hand-editing the JSONL. Flag manual JSONL edits, bulk regeneration, or a bead closed in the mirror | ||
| with no evidence in its reason. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Do not list raw bd as an allowed mutation path.
Line 122 says bd and bd-sync are interchangeable. The repository rule rejects raw bd commands. If a maintainer follows this wording, the local beads state can change without synchronizing .beads/issues.jsonl. Name bd-sync as the required synchronization path and explicitly exclude raw bd.
As per coding guidelines: .beads/**/*: Use the buzz prefix for beads task state and synchronize the tracked JSONL mirror with bd-sync, not raw bd commands.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@REVIEW.md` around lines 120 - 123, The task-state instructions in REVIEW.md
should require all beads mutations and synchronization through bd-sync,
explicitly prohibit raw bd commands, and retain the buzz prefix and manual or
bulk JSONL edit restrictions.
Source: Coding guidelines
| # human contract; this array is its machine form). | ||
| ALLOW=( | ||
| "FORK.md" | ||
| "REVIEW.md" |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Match REVIEW.md as an exact file.
The matcher at Line 51-52 applies "$a"* to every ALLOW entry. The new "REVIEW.md" entry therefore also allows REVIEW.md.bak and REVIEW.md/.... An unregistered path can bypass the additive-only gate. Match file entries exactly and reserve prefix matching for entries that end in /.
Match files exactly and directories by prefix
- for a in "${ALLOW[@]}" "${CARRIED_PATCHES[@]}"; do
- case "$path" in "$a"*) ok=1; break;; esac
+ for a in "${ALLOW[@]}" "${CARRIED_PATCHES[@]}"; do
+ if [[ "$a" == */ ]]; then
+ case "$path" in "$a"*) ok=1; break;; esac
+ elif [[ "$path" == "$a" ]]; then
+ ok=1
+ break
+ fi
doneAs per coding guidelines: {FORK.md,scripts/fork-gates/check-additive-only.sh}: Any new root-level or new-prefix file must be added to both the gate allowlist and FORK.md.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/fork-gates/check-additive-only.sh` at line 25, Update the matcher in
the additive-only gate around the ALLOW-entry loop so entries ending in “/” use
prefix matching, while file entries such as “REVIEW.md” require an exact path
match. Preserve the existing allowlist behavior and ensure any newly added
root-level or prefix file is also documented in FORK.md.
Source: Coding guidelines
… store-restore log line buzz-2i6: the timer is now ENABLED on both hosts per owner decision (weekly, Sun 05:30 UTC, randomized 600s). Before enabling, the clean revert case was finally drilled and it PASSES: a persistent smoke failure on the newly promoted digest — using a digest-aware fault that defeats the 3-attempt retry which beat the previous drill — reverts the image to the known-good digest, re-runs the REAL functional probe against the reverted relay, passes, and latches HOLD. buzz-2i6.1: filed, then CORRECTED. The drill logged 'STORE-RESTORE FAILED after revert — MANUAL recovery required' and I first filed that as a broken rollback. Checking restore.sh showed it is by design: it refuses a live restore without --in-place because a destructive DB rollback is human-gated per decision-log/038. The updater calls it without that flag, so it always declines and pages — which is correct for an unattended weekly job. The bead is now about the WORDING: that line reads as a malfunction to whoever gets paged on a Sunday morning and will send them hunting a bug that does not exist. HOLD left by the drill was cleared on staging; both hosts verified healthy on 4e31b7c7 with no HOLD outstanding. Signed-off-by: jeremylongshore <jeremylongshore@users.noreply.github.com>
|
Superseded by #25. The canonical naming cleanup and reviewer guidance were carried forward onto the current synchronized branch, combined with the AGENTS/source-versus-ops cleanup, and revalidated against upstream/main. |
What
Narrows the canonical naming record to assets that actually exist, and fixes a fork gate that is red on
maintoday.000-docs/006-DR-STND(canonical naming record) — six assets → four, all of which exist. Drops the Contributor lab and Deferred plugin rows. Deletes §3 (the disambiguation rule) outright. The four-plane flow becomes three planes, ASCII diagram redrawn. Gate/boundary/IEP prose no longer routes through a lab that will not be built. Adds a dated Revision 2026-08-07 note recording what was removed and why.000-docs/001-PP-PLAN(master blueprint) — drops theELabledger row; rewrites Phase 6 as CLOSED, deferred indefinitely with the real reason; removes E9's phantom plugin-repo name (the epic stays deferred).000-docs/000-INDEX.md— the006summary no longer advertises six assets or the deleted rule.CLAUDE.md— commits this session's fork-lane guidance (both gates, the two branch lanes, vendored-harness commands, task-state pointers); drops the now-stale "host-vs-repo boundaries" phrasing..harness-hash— re-pinned; see Verification.Why
Neither
intent-solutions-io/intent-ops-buzznorintent-solutions-io/intent-ops-buzz-pluginhas ever been created, and both are still 404. The lab repo was additionally given the same string as the real production VPS, and006papered over that collision with a rule enforced on every mention — "a bareintent-ops-buzzis a defect, fix it on sight." A name that needs a footnote every time it appears is the defect. Killing the phantom removes the collision at its source, so the rule is deleted rather than policed.Track C is closed as deferred-indefinitely. The contribution practice has produced one upstream PR (
block/buzz#4722) that needed no lab, and the flagship candidate the lab was designed to verify was dropped — Block fixed the relay half independently (#4196) and the desktop half turned out to be a fork-local defect.Decision rationale
Amend
006in place rather than supersede it with an008: the change narrows the record rather than reversing it, and six downstream docs cite006by number — amending keeps every existing pointer valid. The dated Revision note carries the audit trail that a supersession would otherwise have provided.intent-ops-buzzis a real VPS with DNS, systemd units, compose files, and backup scripts. ~80 of the 86 references across the estate are to the host and are correct — none of them are touched. This is a ~8-file change, not an 86-reference rename.Layer(s) touched
Fork-governance lane only (
000-docs/,CLAUDE.md,.harness-hash,.beads/). All paths are fork-owned and gate-allowlisted; additive-only is unaffected. No invariant changes — the fork contract, the two declared divergences, and the must-survive set are all untouched.Verification & evidence
scripts/audit-harness verifyHARNESS_TAMPERED)harness-hash: OK)scripts/fork-gates/check-additive-only.shadditive-only OK vs upstream/mainscripts/fork-gates/check-must-survive.shmust-survive set intact (12 paths)The harness gate was red before this branch, on committed content.
000-docs/000-INDEX.mdhad drifted from its pin and000-docs/007-AA-AUDR-*was never pinned — both landed via #17/#20 with no follow-up re-pin, so pre-push was red for everyone in this repo. Reviewed the drift, confirmed both were legitimate content changes, then re-pinned006/001/000-INDEXand added007in one pass (pinned 13 file(s)).Risk assessment
Low — documentation only, no runtime surface. The reachable failure mode is a future session hunting for a lab repo the docs no longer mention; addressed by the dated Revision note in
006, the CLOSED Phase 6 section in001, andintent-osdecision-log/048.Operational impact
None. No prod, no compose, no secrets, no runbook procedure, no deploy order, no dependency or cost change. The production host and every script that reaches it are untouched.
Follow-up & deferred
intent-osPR lands the parked architecture draft in version control atops/buzz/PLAN-contrib-lab-architecture.md(DEFERRED, with un-parking conditions), syncs theops/buzz/docs + thebuzz-opsskill mirror, and filesdecision-log/048superseding D138 indecision-log/040.origin/fix/community-member-onboarding(the reverted PR fix(onboarding): auto-join invited members to General #16) is deleted separately — its work is fully resolved.contrib/push-gateway-image-overrideis kept untilblock/buzz#4722closes.Governance links
FORK.md· breach audit000-docs/007-AA-AUDR-fork-contract-breach-2026-08-03.md000-docs/006-DR-STND-authoritative-naming-and-boundaries.md§ Revision 2026-08-07Beads:
buzz-v2pintentsolutions.io
Summary by CodeRabbit
Documentation
Maintenance