From 99d8a22c4cdd5bc550d43924ce5b8924f62ed727 Mon Sep 17 00:00:00 2001 From: gregoryfoster Date: Fri, 16 Oct 2026 22:34:29 +0000 Subject: [PATCH 1/4] =?UTF-8?q?docs:=20curate=20AGENTS.md=20back=20under?= =?UTF-8?q?=20budget=20=E2=80=94=206199=20->=205887=20tokens?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three Bus Conventions bullets pruned as duplicates, each read against a destination that already states every fact at length (judged entries in .skills/context-loss-ok): - Two blob backends, one seam -> docs/STORAGE.md ## Two backends, one seam - The replicate loop writes for gcs (#29) -> docs/CONVENTIONS.md, docs/STREAMS.md - Watcher alone issues content.fetch (#90) -> docs/STREAMS.md prove-no-loss: lost 0, warranted 10, claims dropped 0. Seams 0 (4 new back-references acknowledged), counts 0 (one stale ack pruned). Co-Authored-By: Claude Opus 5.5 --- .skills/context-counts-ok | 1 - .skills/context-loss-ok | 22 ++++++++++++++++++++++ .skills/context-seams-ok | 9 +++++++++ AGENTS.md | 10 ---------- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/.skills/context-counts-ok b/.skills/context-counts-ok index a9db3ac..1157ec7 100644 --- a/.skills/context-counts-ok +++ b/.skills/context-counts-ok @@ -17,7 +17,6 @@ docs/ARCHITECTURE.md :: enumerated :: **two backends** (`local`, `gcs`) AGENTS.md :: enumerated :: Two that bite, each symptomless until it matters: AGENTS.md :: enumerated :: Two env files, split by a security boundary -AGENTS.md :: enumerated :: **Two blob backends, one seam.** AGENTS.md :: enumerated :: **Three stream kinds, three sets of rules.** # The three contracts and their four documents are the four `docs/contracts/` # rows in ## Detail Docs, one line down the same file. diff --git a/.skills/context-loss-ok b/.skills/context-loss-ok index 2a0c596..520557c 100644 --- a/.skills/context-loss-ok +++ b/.skills/context-loss-ok @@ -703,3 +703,25 @@ AGENTS.md :: tighten :: - [CONVENTIONS.md](docs/CONVENTIONS.md) — the rules co AGENTS.md :: tighten :: - [INFRASTRUCTURE.md](docs/INFRASTRUCTURE.md) — VM topology, ports, the broker, and the buckets AGENTS.md :: tighten :: - [TESTING.md](docs/TESTING.md) — fakeredis's divergences, the keys an integration run may create AGENTS.md :: tighten :: - [content-persist-issuer-contract.md](docs/contracts/content-persist-issuer-contract.md) — keeping a blob in the permanent store by digest: obligations, the refusal registry + +# Judged losses from the 2026-10-16 curation (AGENTS.md 6199 -> under 6000). +# Three Bus Conventions bullets whose every fact the destination already states +# at length; a verbatim move would sit a near-duplicate beside the canonical +# treatment, which Phase 5 forbids. Each read against its destination: +# blob backends -> docs/STORAGE.md ## Two backends, one seam: REPLICATOR_BLOB_BACKEND +# (#7), the file:// / gs:// table row, "local is the default and stays +# the default", the bold to_thread rule; STORAGE.md is indexed. +# replicate gcs -> docs/CONVENTIONS.md (create-if-absent, "never resolved as a path", +# line 45) and docs/STREAMS.md's content.replicate bullet (#29). +# Watcher issues -> docs/STREAMS.md's "Watcher alone issues content.fetch" bullet: #90, +# seed_fetch.py seeds scratch streams, --production, Watcher's identity. +AGENTS.md :: duplicate :: - **Two blob backends, one seam.** `REPLICATOR_BLOB_BACKEND` selects them: `local` +AGENTS.md :: duplicate :: announces `file://` and `gcs` announces `gs://`, and `local` stays the +AGENTS.md :: duplicate :: compiled-in default deliberately (#7). Every `BlobStore` call from a coroutine +AGENTS.md :: duplicate :: goes through `asyncio.to_thread`. +AGENTS.md :: duplicate :: [docs/STORAGE.md](docs/STORAGE.md) is the authority for either store. +AGENTS.md :: duplicate :: - **The replicate loop writes for `gcs` (#29)** — create-if-absent, and `blob_uri` is +AGENTS.md :: duplicate :: never resolved as a path. Read [docs/CONVENTIONS.md](docs/CONVENTIONS.md) first. +AGENTS.md :: duplicate :: - **Watcher alone issues `content.fetch` (#90).** `scripts/seed_fetch.py` seeds +AGENTS.md :: duplicate :: scratch streams; the live one takes `--production` and Watcher's identity, never +AGENTS.md :: duplicate :: `replicator`'s. diff --git a/.skills/context-seams-ok b/.skills/context-seams-ok index 6af9665..265833e 100644 --- a/.skills/context-seams-ok +++ b/.skills/context-seams-ok @@ -469,3 +469,12 @@ tests/test_socraticode_config.py :: f"docs/COMMANDS.md caps at {sorted(map(sorte .socraticodecontextartifacts.json :: "description": "How the systemd unit runs and the guards it starts behind; # The POLITENESS description this run extended: ENVIRONMENT.md does index REPLICATOR_MIN_HOST_INTERVAL_SECONDS by name. .socraticodecontextartifacts.json :: "description": "Per-host politeness, the consumer-side mechanism; +# 2026-10-16 curation: back-references to sections that stayed inline. +# Common Commands still carries the env-load line COMMANDS.md points at. +docs/COMMANDS.md :: AGENTS.md), then source this once per shell from the repo root; the examples below assume it: +# Design Preferences stays in AGENTS.md; both SKILLS.md lines point at it by name. +docs/SKILLS.md :: None — `brainstorming` runs upstream's, under AGENTS.md's **Design Preferences**. +docs/SKILLS.md :: | `brainstorming` | Intent and design before building; this repo's overrides are AGENTS.md's Design Preferences | +# Provenance heading from #131, not this run's; nothing links its anchor (grep "in-flight-count"), +# so the slug is not load-bearing. Rename it with the next COMMANDS.md edit rather than widen this one. +docs/COMMANDS.md :: The patching gate's in-flight count (#131) diff --git a/AGENTS.md b/AGENTS.md index 45be1c7..b13ccc5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -128,11 +128,6 @@ Replicator is a **consumer** first — follow what co-core and the archiver prod `command_id:occurred_at`). `info_source_id` and replicate's `info_item_rep_spec_id` are **echoed, never read** — a `test_boundaries.py` carve-out is one field wide, and adding one edits the charter (#28, #29). -- **Two blob backends, one seam.** `REPLICATOR_BLOB_BACKEND` selects them: `local` - announces `file://` and `gcs` announces `gs://`, and `local` stays the - compiled-in default deliberately (#7). Every `BlobStore` call from a coroutine - goes through `asyncio.to_thread`. - [docs/STORAGE.md](docs/STORAGE.md) is the authority for either store. - **Store, then publish — never the reverse.** A fact pointing at absent bytes is unrepairable by the consumer; stored bytes with no fact repair themselves on the reclaim. @@ -169,12 +164,7 @@ Replicator is a **consumer** first — follow what co-core and the archiver prod default); `content.blobs` carries both fetch outcomes and `content.artifacts` both outcomes of replicate and of persist; `content.fetch-policy` is read **groupless** — no group, no ack, no DLQ. -- **The replicate loop writes for `gcs` (#29)** — create-if-absent, and `blob_uri` is - never resolved as a path. Read [docs/CONVENTIONS.md](docs/CONVENTIONS.md) first. - **A fetch may not reach loopback, RFC 1918, or the tailnet (#89, #95).** Per redirect hop. -- **Watcher alone issues `content.fetch` (#90).** `scripts/seed_fetch.py` seeds - scratch streams; the live one takes `--production` and Watcher's identity, never - `replicator`'s. - **The `docs/contracts/` documents are normative**, indexed below. `tests/test_boundaries.py` enforces the charter in CI; change a charter and its tests together. From 4728c6946aa923632bc425e0084f2d344327257f Mon Sep 17 00:00:00 2001 From: gregoryfoster Date: Fri, 16 Oct 2026 22:34:48 +0000 Subject: [PATCH 2/4] chore: record AGENTS.md curation telemetry (baseline 6199, after 5887) Co-Authored-By: Claude Opus 5.5 --- .skills/context-metrics.jsonl | 2 ++ .skills/context-token-counts | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.skills/context-metrics.jsonl b/.skills/context-metrics.jsonl index aba9642..ce7e6ed 100644 --- a/.skills/context-metrics.jsonl +++ b/.skills/context-metrics.jsonl @@ -58,3 +58,5 @@ {"actions": ["baseline:scheduled"], "budget": 6000, "bytes": 14180, "claims_dropped": null, "claims_warranted": null, "counts": null, "counts_acked": null, "delta_days": 0, "delta_tokens": 0, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 249, "links_dead": 0, "links_dead_anchors": 0, "no_loss": null, "no_loss_warrants": null, "note": null, "over_budget": false, "repo": "replicator", "repo_commit": "7550060", "seams": 0, "seams_acked": 36, "skill_commit": "c4ae0d7", "skill_version": "1.31", "tokens": 5993, "tokens_exact": true, "tokens_live": 164942, "top_section": "Bus Conventions", "top_section_share": 28, "ts": "2026-09-29"} {"actions": ["baseline:scheduled"], "budget": 6000, "bytes": 14198, "claims_dropped": null, "claims_warranted": null, "counts": null, "counts_acked": null, "delta_days": 7, "delta_tokens": 16, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 249, "links_dead": 0, "links_dead_anchors": 0, "no_loss": null, "no_loss_warrants": null, "note": null, "over_budget": true, "repo": "replicator", "repo_commit": "7604d0f", "seams": 40, "seams_acked": 36, "skill_commit": "7cf855e", "skill_version": "1.31", "tokens": 6009, "tokens_exact": true, "tokens_live": 165904, "top_section": "Bus Conventions", "top_section_share": 28, "ts": "2026-10-06"} {"actions": ["baseline:scheduled"], "budget": 6000, "bytes": 14190, "claims_dropped": null, "claims_warranted": null, "counts": null, "counts_acked": null, "delta_days": 7, "delta_tokens": -4, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 249, "links_dead": 0, "links_dead_anchors": 0, "no_loss": null, "no_loss_warrants": null, "note": null, "over_budget": true, "repo": "replicator", "repo_commit": "bd49943", "seams": 2, "seams_acked": 35, "skill_commit": "5ff7a82", "skill_version": "1.31", "tokens": 6005, "tokens_exact": true, "tokens_live": 166891, "top_section": "Bus Conventions", "top_section_share": 28, "ts": "2026-10-13"} +{"actions": ["baseline:pre-curation"], "budget": 6000, "bytes": 14641, "claims_dropped": null, "claims_warranted": null, "counts": null, "counts_acked": null, "delta_days": 3, "delta_tokens": 194, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 259, "links_dead": 0, "links_dead_anchors": 0, "no_loss": null, "no_loss_warrants": null, "note": null, "over_budget": true, "repo": "replicator", "repo_commit": "931ddbf", "seams": null, "seams_acked": null, "skill_commit": "3cea77a", "skill_version": "1.31", "tokens": 6199, "tokens_exact": true, "tokens_live": 167028, "top_section": "Bus Conventions", "top_section_share": 27, "ts": "2026-10-16"} +{"actions": ["prune:Bus Conventions/blob-backends (dup docs/STORAGE.md)", "prune:Bus Conventions/replicate-gcs (dup docs/CONVENTIONS.md+STREAMS.md)", "prune:Bus Conventions/watcher-issues-fetch (dup docs/STREAMS.md)", "ack:seams x4", "prune:stale counts-ok entry"], "budget": 6000, "bytes": 13944, "claims_dropped": 0, "claims_warranted": 0, "counts": 0, "counts_acked": 4, "delta_days": 0, "delta_tokens": -312, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 249, "links_dead": 0, "links_dead_anchors": 0, "no_loss": "ok", "no_loss_warrants": 10, "note": null, "over_budget": false, "repo": "replicator", "repo_commit": "99d8a22", "seams": 0, "seams_acked": 39, "skill_commit": "3cea77a", "skill_version": "1.31", "tokens": 5887, "tokens_exact": true, "tokens_live": 166716, "top_section": "Bus Conventions", "top_section_share": 23, "ts": "2026-10-16"} diff --git a/.skills/context-token-counts b/.skills/context-token-counts index 160ed11..993265b 100644 --- a/.skills/context-token-counts +++ b/.skills/context-token-counts @@ -3,7 +3,7 @@ # The offline estimators prefer a file's own last exact measurement to the # repo-wide figure in .skills/context-token-ratio, falling back to it for a # file never counted exactly or since drifted far from the size recorded here. -14190 6005 AGENTS.md +13944 5887 AGENTS.md 5692 2194 docs/ARCHITECTURE.md 26724 10372 docs/COMMANDS.md 26391 9745 docs/CONVENTIONS.md @@ -12,7 +12,7 @@ 8941 3330 docs/FAILURE-NOTIFICATION.md 21824 8554 docs/INFRASTRUCTURE.md 18208 6458 docs/POLITENESS.md -26831 10116 docs/SKILLS.md +26669 10059 docs/SKILLS.md 11592 4447 docs/SOCRATICODE.md 22502 8233 docs/STORAGE.md 25396 9285 docs/STREAMS.md From c95aa3f025e5809a6eb702ecf1e460decdb4a9c5 Mon Sep 17 00:00:00 2001 From: gregoryfoster Date: Fri, 16 Oct 2026 22:36:50 +0000 Subject: [PATCH 3/4] =?UTF-8?q?docs:=20CR=201=20=E2=80=94=20keep=20the=20t?= =?UTF-8?q?o=5Fthread=20rule=20inline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fresh-eyes review: a coding rule anyone adding a BlobStore call in src/worker/ needs, and the off-loop test pins only the call sites it names. Restored as one bullet with the STORAGE.md pointer, verbatim. Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index b13ccc5..7f2b369 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -131,6 +131,8 @@ Replicator is a **consumer** first — follow what co-core and the archiver prod - **Store, then publish — never the reverse.** A fact pointing at absent bytes is unrepairable by the consumer; stored bytes with no fact repair themselves on the reclaim. +- **Every `BlobStore` call from a coroutine goes through `asyncio.to_thread`** — + [docs/STORAGE.md](docs/STORAGE.md) is the authority for either store. - **Read `count=1`.** `AsyncBusConsumer.read(count>1)` raises on a malformed frame *before* returning the well-formed ones. Recovery claims at `count=1` too — for the #98 turn bound, not poison (#109). From f638266a8b03982a50951c945e4a499823177a42 Mon Sep 17 00:00:00 2001 From: gregoryfoster Date: Fri, 16 Oct 2026 22:36:58 +0000 Subject: [PATCH 4/4] chore: amend curation telemetry row after CR 1 Co-Authored-By: Claude Opus 5.5 --- .skills/context-metrics.jsonl | 2 +- .skills/context-token-counts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.skills/context-metrics.jsonl b/.skills/context-metrics.jsonl index ce7e6ed..89a2542 100644 --- a/.skills/context-metrics.jsonl +++ b/.skills/context-metrics.jsonl @@ -59,4 +59,4 @@ {"actions": ["baseline:scheduled"], "budget": 6000, "bytes": 14198, "claims_dropped": null, "claims_warranted": null, "counts": null, "counts_acked": null, "delta_days": 7, "delta_tokens": 16, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 249, "links_dead": 0, "links_dead_anchors": 0, "no_loss": null, "no_loss_warrants": null, "note": null, "over_budget": true, "repo": "replicator", "repo_commit": "7604d0f", "seams": 40, "seams_acked": 36, "skill_commit": "7cf855e", "skill_version": "1.31", "tokens": 6009, "tokens_exact": true, "tokens_live": 165904, "top_section": "Bus Conventions", "top_section_share": 28, "ts": "2026-10-06"} {"actions": ["baseline:scheduled"], "budget": 6000, "bytes": 14190, "claims_dropped": null, "claims_warranted": null, "counts": null, "counts_acked": null, "delta_days": 7, "delta_tokens": -4, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 249, "links_dead": 0, "links_dead_anchors": 0, "no_loss": null, "no_loss_warrants": null, "note": null, "over_budget": true, "repo": "replicator", "repo_commit": "bd49943", "seams": 2, "seams_acked": 35, "skill_commit": "5ff7a82", "skill_version": "1.31", "tokens": 6005, "tokens_exact": true, "tokens_live": 166891, "top_section": "Bus Conventions", "top_section_share": 28, "ts": "2026-10-13"} {"actions": ["baseline:pre-curation"], "budget": 6000, "bytes": 14641, "claims_dropped": null, "claims_warranted": null, "counts": null, "counts_acked": null, "delta_days": 3, "delta_tokens": 194, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 259, "links_dead": 0, "links_dead_anchors": 0, "no_loss": null, "no_loss_warrants": null, "note": null, "over_budget": true, "repo": "replicator", "repo_commit": "931ddbf", "seams": null, "seams_acked": null, "skill_commit": "3cea77a", "skill_version": "1.31", "tokens": 6199, "tokens_exact": true, "tokens_live": 167028, "top_section": "Bus Conventions", "top_section_share": 27, "ts": "2026-10-16"} -{"actions": ["prune:Bus Conventions/blob-backends (dup docs/STORAGE.md)", "prune:Bus Conventions/replicate-gcs (dup docs/CONVENTIONS.md+STREAMS.md)", "prune:Bus Conventions/watcher-issues-fetch (dup docs/STREAMS.md)", "ack:seams x4", "prune:stale counts-ok entry"], "budget": 6000, "bytes": 13944, "claims_dropped": 0, "claims_warranted": 0, "counts": 0, "counts_acked": 4, "delta_days": 0, "delta_tokens": -312, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 249, "links_dead": 0, "links_dead_anchors": 0, "no_loss": "ok", "no_loss_warrants": 10, "note": null, "over_budget": false, "repo": "replicator", "repo_commit": "99d8a22", "seams": 0, "seams_acked": 39, "skill_commit": "3cea77a", "skill_version": "1.31", "tokens": 5887, "tokens_exact": true, "tokens_live": 166716, "top_section": "Bus Conventions", "top_section_share": 23, "ts": "2026-10-16"} +{"actions": ["prune:Bus Conventions/blob-backends (dup docs/STORAGE.md; to_thread rule kept inline)", "prune:Bus Conventions/replicate-gcs (dup docs/CONVENTIONS.md+STREAMS.md)", "prune:Bus Conventions/watcher-issues-fetch (dup docs/STREAMS.md)", "ack:seams x4", "prune:stale counts-ok entry"], "budget": 6000, "bytes": 14099, "claims_dropped": 0, "claims_warranted": 0, "counts": 0, "counts_acked": 4, "delta_days": 0, "delta_tokens": -244, "docs_orphaned": 0, "docs_total": 22, "docs_unindexed": 0, "file": "AGENTS.md", "lines": 251, "links_dead": 0, "links_dead_anchors": 0, "no_loss": "ok", "no_loss_warrants": 9, "note": null, "over_budget": false, "repo": "replicator", "repo_commit": "c95aa3f", "seams": 0, "seams_acked": 39, "skill_commit": "3cea77a", "skill_version": "1.31", "tokens": 5955, "tokens_exact": true, "tokens_live": 166784, "top_section": "Bus Conventions", "top_section_share": 24, "ts": "2026-10-16"} diff --git a/.skills/context-token-counts b/.skills/context-token-counts index 993265b..f2f2c8b 100644 --- a/.skills/context-token-counts +++ b/.skills/context-token-counts @@ -3,7 +3,7 @@ # The offline estimators prefer a file's own last exact measurement to the # repo-wide figure in .skills/context-token-ratio, falling back to it for a # file never counted exactly or since drifted far from the size recorded here. -13944 5887 AGENTS.md +14099 5955 AGENTS.md 5692 2194 docs/ARCHITECTURE.md 26724 10372 docs/COMMANDS.md 26391 9745 docs/CONVENTIONS.md