DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path foray-reference/loomworks-foray-r2-forward-gap-scoping-note-v0_4-census-correction-v0_1.md

R-2 Forward-Gap Scoping Note v0.4 — Census Correction — v0_1

Version. 0.1 Date. 2026-08-21 Status. Correction note. Read beside loomworks-foray-r2-forward-gap-scoping-note-v0_4, which is not edited. Corrections sit beside. Occasion. CR-2026-231 v0_3 §7 asserted "the census of sixteen becomes seventeen when this lands." Pre-flighting Gate 2 found the raw count was already 17 at 22bec5d, before anything landed. This note reconciles the two numbers and reports the new one. Grounded on. git grep FORAY_RESERVED_LOCATION at engine 22bec5d and at 9b103d8.


1. The three numbers

| | Count | What it counts | |---|---|---| | R-2 v0.4 §7 census | 16 | Real emit call sites. Correct. | | Raw grep at 22bec5d | 17 | Marker comments in src/ | | Raw grep at 9b103d8 | 18 | Marker comments in src/, after CR-2026-231 |

v0.4's census of 16 was right and stays right. Nothing is wrong with it. The discrepancy is between sites and marker strings, and CR-2026-231 §7 compared one to the other.

2. What the seventeenth was

src/loomworks/foray/reserved_emit.py:9.


    # FORAY_RESERVED_LOCATION: <event_kind>

It is not a call site. It is the pattern's own documentation — the marker format, quoted inside the emitter module's docstring, showing call sites how to tag themselves:

> Every call site that emits a reserved-location event tags itself with the comment marker:: > # FORAY_RESERVED_LOCATION: <event_kind> > so the call sites are grep-discoverable at integration time.

The mechanism that makes the census work is the seventeenth thing the census finds. A grep-discoverable convention documented in grep-visible form counts itself. The placeholder <event_kind> is the tell: no real site emits an event kind called <event_kind>.

This does not change v0.4's site list, its payload analysis, or its Stage 2 scoping. All sixteen sites are real, and there is no seventeenth site to add to the table.

3. A second reconciliation, while the numbers are out

Grepping markers under-reports in the other direction too, and both errors were live at once:

So grep | wc -l is not the census, in either direction. It over-counts by one documentation example and under-counts by three collapsed emits. The census got the answer right by reading sites rather than counting strings, and this note exists so the next person who runs the grep does not "correct" a number that was already correct.

4. The new number, and what added it

18 markers at 9b103d8; 17 real sites.

The new one is a genuine site: src/loomworks/agents/lifecycle_record.pyFORAY_RESERVED_LOCATION: agents.grant_lifecycle, added by CR-2026-231 Gate 2 (324c080). It fires once per grant-lifecycle row — granted, refused, closed, abandoned, identity_frozen — carrying identity, kind, session, reason, actor, timestamp and engagement.

Why this one is a new site rather than an extension of an existing one, which is the distinction CR-2026-231 §7 was careful about and which v0.4 should carry forward: H0's earlier FORAY additions extended _ANCHOR_PRIORITY, a registry that Memory's dynamic site at 12 already reads — no new call site, which is why the R-2 census correctly found zero delta from H0. agent_lifecycle_events is a new write path with no existing dispatch site to absorb it, so it needed its own marker and its own emit.

Consequence for Stage 2's scope: one more site to close a forward gap at, in a file that did not exist when v0.4 was written. Its payload is already complete — the emit forwards every field the row carries — so it arrives with no forward gap. It adds a site to the census and no work to the closure list.

5. The lesson, for the dispositions family

A census that counts a marker counts its own definition. The R-2 note avoided this by reading sites; the CR that cited it did not, and asserted a wrong baseline in good faith from a one-line grep.

Worth carrying wherever the census number is quoted: say whether the number is sites or strings. They differ by one in one direction and three in the other, and they have differed the whole time.