[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CF896XKSRQVB1CSHY8GSXB":3,"skill-same:01M6CF896XKSRQVB1CSHY8GSXB":92},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":70,"commitSha":71,"skillDirectory":72,"forksCount":73,"repositoryHtmlUrl":74,"repositoryHomepageUrl":6,"ownerHtmlUrl":75,"ownerBlogUrl":6,"ownerDescription":76,"updatedAt":77,"install":78,"resources":91},"01M6CF896XKSRQVB1CSHY8GSXB","receipt-stream",null,"Cross-cycle receipt-stream doctrine for protocol-iteration. Use when γ closes a cycle and writes the per-cycle iteration artifact (`cdd-iteration.md`), when γ updates the cross-cycle aggregator at `.cdd\u002Fiterations\u002FINDEX.md`, when ε reads the receipt stream across cycles to surface protocol-gap patterns, when a finding's disposition lands a cross-repo patch and the cross-repo trace bundle attaches, or when a courtesy empty-findings stub is written for a `protocol_gap_count == 0` cycle.","usurobor\u002Fcnos","usurobor","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F182342826?v=4","01M6CEXJCRMYD8HB2315FGB1Q8","Peter Lisovin","01M6CEXJH2RW04GQ2SNXY40F5S",9,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fblob\u002Fmain\u002Fsrc\u002Fpackages\u002Fcnos.handoff\u002Fskills\u002Fhandoff\u002Freceipt-stream\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"receipt stream","closeout","doctrine","cdd","shape","patch","embedded","use","channel","read","handoff","repo","public","trace","format","learning","how","index","protocol","artifacts","2026-11-10 10:12:30",false,"---\nname: receipt-stream\ndescription: Cross-cycle receipt-stream doctrine for protocol-iteration. Use when γ closes a cycle and writes the per-cycle iteration artifact (`cdd-iteration.md`), when γ updates the cross-cycle aggregator at `.cdd\u002Fiterations\u002FINDEX.md`, when ε reads the receipt stream across cycles to surface protocol-gap patterns, when a finding's disposition lands a cross-repo patch and the cross-repo trace bundle attaches, or when a courtesy empty-findings stub is written for a `protocol_gap_count == 0` cycle.\nartifact_class: skill\nkata_surface: embedded\ngoverning_question: How does the protocol carry its own learning signal across cycles — through a per-cycle iteration artifact (with a fixed per-finding shape) and a cross-cycle aggregator (with a fixed row format) — so that ε can read the receipt stream and surface protocol-gap patterns no single cycle can surface?\nvisibility: public\nparent: handoff\ntriggers:\n  - receipt-stream\n  - cdd-iteration\n  - INDEX.md\n  - aggregator\n  - protocol_gap_count\n  - courtesy stub\n  - per-finding shape\n  - ε feed\nscope: task-local\ninputs:\n  - closing cycle with γ-closeout filed\n  - cycle's receipt with `protocol_gap_count` populated\n  - α \u002F β \u002F γ close-out artifacts on main\noutputs:\n  - per-cycle iteration artifact at `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` (or courtesy stub)\n  - one new row in `.cdd\u002Fiterations\u002FINDEX.md`\n  - cross-repo trace bundle at `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F` when a finding lands a cross-repo patch\nrequires:\n  - γ close-out is filed\n  - cycle's receipt is final (`protocol_gap_count`, `protocol_gap_refs` populated)\ncalls:\n  - HANDOFF.md\n  - artifact-channel\u002FSKILL.md\n  - cross-repo\u002FSKILL.md\n---\n\n# Receipt-Stream — cross-cycle ε feed (per-cycle iteration artifact + cross-cycle aggregator)\n\n## Core principle\n\n**The receipt-stream is the protocol's own learning signal across cycles. Each cycle that surfaces a protocol gap (`protocol_gap_count > 0`) emits a per-cycle iteration artifact (`cdd-iteration.md`) with a fixed per-finding shape; γ then appends one row to the cross-cycle aggregator (`.cdd\u002Fiterations\u002FINDEX.md`). ε reads the aggregator to surface patterns across cycles; the per-cycle artifact carries the structured findings the aggregator points at. Cycles with `protocol_gap_count == 0` may write a courtesy empty-findings stub (per cycle\u002F401 convention) but are not required to.**\n\nThe per-cycle artifact is **role-local**: γ authors it as part of the cycle's close-out (with ε review where ε is a distinct actor; ε=δ collapsed in the current cnos cdd operating point per `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §2`). The cross-cycle aggregator is **persistent**: `.cdd\u002Fiterations\u002FINDEX.md` accumulates one row per cycle that produced an iteration artifact. The two together form the receipt-stream surface that ε observes — the per-cycle structured findings *plus* the cross-cycle row-by-row index that lets ε scan many cycles at once.\n\nThe failure mode is **receipt-stream drift** — γ writes the iteration artifact but forgets the aggregator row (ε cannot find the cycle when scanning); γ writes the aggregator row but the per-finding shape diverges from the canonical fields (ε's pattern-detection across cycles breaks); a cross-repo `patch-landed` finding lands without the bundle trace (the patch's lineage is lost when the source-side bundle archives); the courtesy stub gets misused as \"iteration complete\" when no actual triage happened (survivorship bias re-emerges). The protocol closes each failure mode by pinning the per-finding shape, the row format, the cadence rule, and the cross-repo bundle invariant explicitly.\n\nThis skill is the **canonical surface** for the receipt-stream wire-format invariants: the per-finding shape inside `cdd-iteration.md`; the INDEX.md row format; the cadence rule (required when `protocol_gap_count > 0`; courtesy stub when 0); the finding-disposition vocabulary (`patch-landed` \u002F `next-MCA` \u002F `no-patch`); the cross-repo trace bundle composition. Consumer protocols cite this skill for the wire-format; the role-local authoring procedure (which session writes, what review pass applies) lives in the consumer (`cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` is now a pointer; `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` is ε's role-local authority on classification).\n\n## Authority\n\n- This skill (in `cnos.handoff`) is the only canonical home for the receipt-stream wire-format invariants: the per-finding shape (`Source` \u002F `Class` \u002F `Trigger` \u002F `Description` \u002F `Root cause` \u002F `Disposition` + per-disposition sub-fields); the INDEX.md row format (eight pipe-separated columns: `Cycle | Issue | Date | Findings | Patches | MCAs | No-patch | Path`); the cadence rule; the finding-disposition vocabulary; the cross-repo trace bundle invariant. If another skill or doctrine surface carries the same wire-format claims, this skill governs.\n- The consumer protocol packages carry the role-local authoring procedure. `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` is a pointer to this skill for the wire-format and applies the rule at cycle close-out (γ writes the artifact per this skill's shape; γ appends the INDEX row). `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` is the role-local authority on the CDD-specific gap-class instantiation (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F `cdd-tooling-gap` \u002F `cdd-metric-gap`); the gap-class names are CDD-side. CDR has its own gap-class set per `cnos.cdr\u002Fskills\u002Fcdr\u002Fepsilon\u002FSKILL.md §1` (`cdr-data-gate-gap` \u002F `cdr-overclaim-gap` \u002F etc.); the per-finding shape and aggregator row format are protocol-agnostic.\n- The cross-repo trace bundle composes with `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. When a finding's disposition is `patch-landed` with a `Cross-repo` target, γ creates a bundle at `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F` per the cross-repo skill's case-(b) \u002F case-(c) bundle file set. This skill names the trigger; cross-repo names the bundle composition.\n\n## Scope\n\nIn scope:\n\n- The per-finding shape inside `cdd-iteration.md` (F1, F2, … with `Source` \u002F `Class` \u002F `Trigger` \u002F `Description` \u002F `Root cause` \u002F `Disposition` and per-disposition sub-fields: `Patch` + `Affects` + `Cross-repo` for `patch-landed`; `Issue filed` + `First AC` for `next-MCA`; `Reason` for `no-patch`).\n- The cross-cycle aggregator (`.cdd\u002Fiterations\u002FINDEX.md`) row format: eight pipe-separated columns naming the cycle \u002F issue \u002F date \u002F findings count \u002F patches count \u002F MCAs count \u002F no-patch count \u002F iteration-file path.\n- The cadence rule: per-cycle artifact required when `protocol_gap_count > 0`; courtesy empty-findings stub permitted (not required) when `protocol_gap_count == 0` (cycle\u002F401 convention).\n- The finding-disposition vocabulary: `patch-landed` | `next-MCA` | `no-patch` (no other dispositions are valid).\n- The aggregator location: `.cdd\u002Fiterations\u002FINDEX.md` at the repo root (the live, persistent aggregator; data, not doctrine — content stays put; doctrine about it lives here).\n- The cross-repo trace bundle invariant: when a finding's disposition is `patch-landed` with `Cross-repo` target, γ creates a bundle at the canonical path per `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`.\n- Empirical anchors: cycle\u002F335 (aggregator initialized); cycle\u002F401 (courtesy stub convention landed); every cycle since cnos#364 carries an INDEX row + a `cdd-iteration.md`.\n\nOut of scope:\n\n- The role-local authoring procedure (which session writes; the close-out gate ordering; the ε-vs-γ collapse rule). Lives in `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` (cdd-side runbook, now pointer to this skill) and `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` (ε's CDD-side role-local authority).\n- The CDD-specific gap-class names (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F `cdd-tooling-gap` \u002F `cdd-metric-gap`). Lives in `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1`. CDR has different gap classes; future c-d-X may have other gap classes. The per-finding `Class` field is consumer-specific in vocabulary; the wire-format `Class:` slot is protocol-agnostic.\n- The receipt schema itself (the typed `#Receipt` that carries `protocol_gap_count` and `protocol_gap_refs`). Lives in `schemas\u002Fcdd\u002Freceipt.cue`. This skill consumes the receipt's `protocol_gap_count` as the cadence-rule input; it does not define the receipt's shape.\n- The per-cycle artifact-channel (where the `cdd-iteration.md` file sits during the cycle; the release-time directory move). Lives in `cnos.handoff\u002Fskills\u002Fhandoff\u002Fartifact-channel\u002FSKILL.md`. The per-cycle iteration artifact is an artifact-channel-owned file; the receipt-stream owns its *content shape* and the cross-cycle aggregation; the channel owns the file path \u002F write ownership \u002F freeze-on-merge rules.\n- The cross-repo bundle composition (LINEAGE.md schemas per case; STATUS state machine; feedback-patch format; archival rule). Lives in `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. This skill names the *trigger* for a bundle (a `patch-landed` finding with `Cross-repo` target); cross-repo names the *bundle*.\n- The activation-side cadence declaration (per-repo `cdd-iteration.md` cadence; D\u002FC\u002FB\u002FA severity scale; auto-spawn MCA trigger). Lives in `cnos.cdd\u002Fskills\u002Fcdd\u002Factivation\u002FSKILL.md §22`. The activation skill declares per-repo cadence overlays; this skill carries the generic wire-format invariants.\n- Tooling that auto-verifies receipt-stream discipline (`cn cdd verify` cycle-iteration checks). Deferred; doctrine first, tooling later.\n\n---\n\n## 1. Per-finding shape (`cdd-iteration.md`)\n\nEach finding inside `cdd-iteration.md` carries the following fields, in this order. The shape is preserved verbatim from the pre-migration canonical home (`cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b`):\n\n```markdown\n### F1: \u003Ctitle>\n\n- **Source:** α-closeout \u002F β-review \u002F γ-triage \u002F PRA §3 \u002F PRA §4b — name the artifact and section\n- **Class:** `cdd-skill-gap` | `cdd-protocol-gap` | `cdd-tooling-gap` | `cdd-metric-gap`\n- **Trigger:** §9.1 trigger N | \"γ process-gap check\" | \"review pattern across cycles\"\n- **Description:** one paragraph\n- **Root cause:** one paragraph\n- **Disposition:** `patch-landed` | `next-MCA` | `no-patch`\n\nIf `patch-landed`:\n- **Patch:** `\u003Ccommit-sha>` or `\u003Cfile-path>`\n- **Affects:** `\u003Ccdd skill file or section>` (e.g. `cdd\u002Freview\u002FSKILL.md` §3.13)\n- **Cross-repo:** `\u003Ctarget-repo>` PR `#NN` if patch landed in a different repo than this cycle (otherwise omit)\n\nIf `next-MCA`:\n- **Issue filed:** `\u003Crepo>` `#NN`\n- **First AC:** ...\n\nIf `no-patch`:\n- **Reason:** required justification per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md` §\"Closure\" → §\"Closure rule\"\n```\n\n**Field meaning:**\n\n- **Source.** Which close-out artifact (α-closeout \u002F β-review \u002F γ-triage \u002F PRA §3 \u002F PRA §4b) surfaced this finding. Names the artifact + section; lets ε trace the finding back to its origin.\n- **Class.** The CDD-side gap class per `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` — `cdd-skill-gap` (procedural skill underspecified \u002F wrong); `cdd-protocol-gap` (CDD doctrine drifted from invariant); `cdd-tooling-gap` (tooling absent \u002F wrong \u002F unavailable); `cdd-metric-gap` (measurement missing \u002F wrong). CDR uses different classes per `cnos.cdr\u002Fskills\u002Fcdr\u002Fepsilon\u002FSKILL.md §1`; future c-d-X may use other classes.\n- **Trigger.** Which trigger fired — a `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Assessment\" → §\"Cycle iteration triggers\"` row (e.g. review rounds > 2; mechanical ratio > 20%; avoidable tooling\u002Fenvironmental failure; loaded skill failed to prevent a finding), or the γ process-gap check, or a multi-cycle pattern surfaced by ε's review-pattern-across-cycles read.\n- **Description.** One paragraph naming what happened, in concrete cycle-local terms.\n- **Root cause.** One paragraph naming why it happened — what protocol invariant was unmet, what skill was underspecified, what tool was missing.\n- **Disposition.** One of three values: `patch-landed` (the patch shipped in this cycle), `next-MCA` (issue filed for a follow-on cycle), `no-patch` (explicit no-patch with required reason). No other dispositions are valid.\n\n**Per-disposition sub-fields:**\n\n- **`patch-landed`** — `Patch:` names the commit SHA or file path; `Affects:` names the cdd skill file or section that received the patch; `Cross-repo:` names the target-repo PR if the patch landed in a different repo (otherwise omit).\n- **`next-MCA`** — `Issue filed:` names the repo + issue number; `First AC:` names the first acceptance criterion the follow-on cycle ships against.\n- **`no-patch`** — `Reason:` carries the required justification per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\" → §\"Closure rule\"` (one of: all findings were application gaps with adequate existing spec; zero review findings this cycle; environmental failure with no spec-level fix available).\n\nThe shape is **not redesigned by this skill**; the migration is wholesale. Future tightening (adding fields, changing field semantics) is a follow-on cycle; this skill carries the v0.1 shape.\n\n---\n\n## 2. Aggregator (`.cdd\u002Fiterations\u002FINDEX.md`)\n\nThe cross-cycle aggregator at `.cdd\u002Fiterations\u002FINDEX.md` carries one row per cycle that produced an iteration artifact. The row format is **eight pipe-separated columns**, preserved verbatim from the pre-migration canonical home:\n\n```markdown\n| Cycle | Issue | Date | Findings | Patches | MCAs | No-patch | Path |\n|-------|-------|------|----------|---------|------|----------|------|\n| {N}   | #N    | YYYY-MM-DD | M | P | A | Z | .cdd\u002Freleases\u002F{X.Y.Z}\u002F{N}\u002Fcdd-iteration.md |\n```\n\n**Column meanings:**\n\n| Column | Meaning |\n|---|---|\n| **Cycle** | The cycle identifier (typically the issue number; may include sub-cycle suffix like `344-b` for multi-phase docs cycles). |\n| **Issue** | The GitHub issue number (`#NNN`). Usually equals the cycle but may differ for follow-on cycles re-opening an earlier issue. |\n| **Date** | ISO date (`YYYY-MM-DD`) of cycle close. |\n| **Findings** | Count of findings inside the cycle's `cdd-iteration.md` (M). Zero for courtesy stubs (cycle\u002F401 convention). |\n| **Patches** | Count of findings with disposition `patch-landed` (P). Includes both same-cycle patches and cross-repo `patch-landed` shipments. |\n| **MCAs** | Count of findings with disposition `next-MCA` (A). Each represents one follow-on cycle scheduled. |\n| **No-patch** | Count of findings with disposition `no-patch` (Z). Each carries a recorded `Reason`. |\n| **Path** | Relative path to the cycle's `cdd-iteration.md` artifact. Uses `.cdd\u002Freleases\u002F{X.Y.Z}\u002F{N}\u002Fcdd-iteration.md` for version-tagged releases; uses `.cdd\u002Freleases\u002Fdocs\u002F{ISO-date}\u002F{N}\u002Fcdd-iteration.md` for docs-only releases; uses `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` for in-flight or unreleased cycles. |\n\n**Row update procedure:**\n\nAfter writing `cdd-iteration.md` (or the courtesy empty-findings stub), γ updates `.cdd\u002Fiterations\u002FINDEX.md` with one row appended at the bottom of the data table:\n\n1. Open `.cdd\u002Fiterations\u002FINDEX.md` on the cycle branch.\n2. Append one row matching the format above, with the cycle's actual values (`{N}` \u002F `#N` \u002F ISO date \u002F M \u002F P \u002F A \u002F Z \u002F path).\n3. The four count columns sum: `Findings = Patches + MCAs + No-patch` (M = P + A + Z). This is a derived consistency check; ε's pattern-detection relies on it.\n4. Commit on the cycle branch (same commit as `cdd-iteration.md` if both are written together).\n\nThe aggregator file is **data**, not doctrine. Its content rows are not moved by this migration; this skill names the *format* and the *update procedure*. The live file at `.cdd\u002Fiterations\u002FINDEX.md` is the authoritative aggregator for the cnos repo at the current scale.\n\n---\n\n## 3. Cadence rules\n\nThe per-cycle iteration artifact's cadence is **conditional on the cycle's receipt**:\n\n### 3.1. Required: `protocol_gap_count > 0`\n\nWhen the cycle's receipt has `protocol_gap_count > 0` — i.e. the close-out triage in `gamma-closeout.md` produced ≥ 1 finding tagged `cdd-skill-gap`, `cdd-protocol-gap`, `cdd-tooling-gap`, or `cdd-metric-gap` — the per-cycle iteration artifact is **required**. γ MUST author `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` with each finding structured per the per-finding shape in §1; γ MUST append one INDEX.md row per §2; γ closure gate blocks closure until both exist.\n\nThe receipt's `protocol_gap_count` field is **consistency-pinned** to `len(protocol_gap_refs)` by `schemas\u002Fcdd\u002Freceipt.cue`. The receipt is the always-present record of *whether* an iteration file is required; the file is the conditional record of *what was found*. This is the inherited rule from `ROLES.md §4b.4`.\n\n### 3.2. Permitted: courtesy empty-findings stub when `protocol_gap_count == 0`\n\nWhen the cycle's receipt has `protocol_gap_count == 0` — i.e. the cycle ran cleanly with no `cdd-*-gap` findings — the per-cycle iteration artifact is **optional**. The cycle's gamma-closeout names the no-gap result; no iteration file is required.\n\nHowever, γ MAY write a courtesy empty-findings stub at `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` for traceability. The stub records `protocol_gap_count: 0` explicitly, names the no-findings result, and (optionally) explains why no protocol gap surfaced. The stub variant is the convention landed in **cycle\u002F401** (the empirical anchor for the courtesy-stub rule). Backward compatibility: existing empty-findings `cdd-iteration.md` files written under the prior every-cycle rule remain valid artifacts — the rule is \"required when `> 0`\", not \"forbidden when `== 0`\".\n\nWhen a courtesy stub is written, γ MAY also append the INDEX.md row (with `Findings = 0; Patches = 0; MCAs = 0; No-patch = 0`). This is the dominant cnos cdd convention at current scale: nearly every recent cycle has an INDEX row, even for `protocol_gap_count == 0` cycles, because the row supports ε's per-cycle scan-without-omission discipline.\n\n### 3.3. Activation-side overlay\n\nThe per-repo cadence declaration (whether courtesy stubs are mandatory in a given project; the D\u002FC\u002FB\u002FA + `info` severity scale for findings; the sliding-window auto-spawn MCA trigger) is set by `cnos.cdd\u002Fskills\u002Fcdd\u002Factivation\u002FSKILL.md §22`. The activation skill overlays per-repo policy on top of the generic wire-format invariants this skill carries; the two are layered.\n\n---\n\n## 4. Aggregator location\n\nThe aggregator file lives at:\n\n```text\n.cdd\u002Fiterations\u002FINDEX.md\n```\n\nat the repo root. The file is **data**, not doctrine: its content rows accumulate cycle by cycle and are not moved by this migration. The doctrine *about* the file (the row format; the per-row update procedure; the eight column meanings) is what this skill carries.\n\nThe filename will eventually become consumer-specific. CDS's analogue is `\u003Cproject>\u002F.cds\u002Fiterations\u002FINDEX.md` per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\"`. CDR's analogue is the per-project coherence-log per `cnos.cdr\u002Fskills\u002Fcdr\u002Fepsilon\u002FSKILL.md §1` and `cnos.cdr\u002Fdocs\u002Fempirical-anchor-cph.md` row #14. The wire-format pattern (one persistent aggregator at a known per-protocol-package path; one row per cycle that produced an iteration artifact; eight columns naming cycle \u002F issue \u002F date \u002F findings \u002F patches \u002F MCAs \u002F no-patch \u002F path) is what this skill records; the per-protocol filename is consumer-side.\n\nFor the cnos repo at the current operating point, the file is at `.cdd\u002Fiterations\u002FINDEX.md`. The bootstrap row was added by cycle\u002F335 (per `cnos.cds\u002Fdocs\u002Fempirical-anchor-cdd.md` #335 row); every cycle since cnos#364 carries one row.\n\n---\n\n## 5. Finding-disposition discipline\n\nEach finding carries one of three dispositions; the vocabulary is **closed** (no other dispositions are valid):\n\n- **`patch-landed`** — the patch shipped in this cycle. The finding is closed by the same commit set that produced the cycle's release. The patch lands in a CDD skill file, a doc, a tool, or (rarely) a runtime surface. If the patch landed in a different repo, the `Cross-repo:` sub-field names the target-repo + PR; the cross-repo trace bundle attaches per §6.\n- **`next-MCA`** — the patch is deferred to a follow-on cycle. The cycle files an issue (the MCA), records the issue number under `Issue filed:`, and pins the `First AC:` the follow-on cycle ships against. This is the dominant disposition for findings that are not safe to ship inside the current cycle (cross-cycle redesigns; surfaces with > 1 dependent cycle).\n- **`no-patch`** — the finding is closed without a patch. This requires explicit justification per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\" → §\"Closure rule\"`: one of (a) all findings were application gaps with adequate existing spec (the skill was right; the agent didn't follow it; patch the operator, not the spec); (b) zero review findings this cycle (the finding is a γ-side observation, not a review finding); (c) environmental failure with no spec-level fix available (tooling constraint; cross-cutting infrastructure). The `Reason:` sub-field is **required**; silence is not an acceptable disposition.\n\nThe vocabulary is **classification-grade**: ε's pattern-detection across cycles requires that the three dispositions are mutually exclusive and exhaustive. Adding a fourth disposition (e.g., \"drop\") is a follow-on cycle; this skill carries the v0.1 vocabulary.\n\nThe role-local authority for the disposition discipline is `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` (CDD-side). The MCA-discipline shape (ship-now \u002F next-MCA \u002F no-patch) is inherited from `ROLES.md §4b.5`; the CDD-specific gap-class names (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F etc.) live in `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1`.\n\n---\n\n## 6. Cross-repo trace\n\nWhen a finding's `Disposition` is `patch-landed` with a `Cross-repo:` target — i.e. the patch shipped in a different repo than this cycle — γ creates a **cross-repo trace bundle** at the canonical path:\n\n```text\n.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F\n```\n\nper `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. The bundle composition depends on the case (per `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md §2` directional cases):\n\n- **Outbound iteration trace (case b)** — the bundle file set is `LINEAGE.md` with per-patch confirmation; one outbound destination patch.\n- **Bilateral iteration (case c)** — the bundle additionally carries `cdd-iteration.md` and one feedback patch per outbound destination patch.\n\n**Archival.** The source-side (cnos-side, for outbound) bundle MAY be archived once the counterpart-side mirror confirms receipt per `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md §\"Bundle archival rule\"`; target-side mirrors are preserved indefinitely. The asymmetric archival rule preserves the bundle's lineage on the target side past the source-side cleanup.\n\nThis skill names the trigger (a `patch-landed` finding with `Cross-repo` target); `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md` names the bundle's composition and archival rule. The two skills compose: the receipt-stream's per-finding shape exposes the trigger; cross-repo carries the bundle.\n\n---\n\n## 7. Empirical anchors\n\nEvery cycle since cnos#364 carries an INDEX.md row + a `cdd-iteration.md` (file or courtesy stub). Representative anchors:\n\n- **cycle\u002F335** — `.cdd\u002Fiterations\u002FINDEX.md` initialized; bootstrap for the receipt-stream artifact. Per `cnos.cds\u002Fdocs\u002Fempirical-anchor-cdd.md` #335: \"Initialized `.cdd\u002Fiterations\u002FINDEX.md`; bootstrap for the receipt-stream artifact\". The 8-column row format crystallized here.\n- **cycle\u002F401** — the courtesy empty-findings stub convention landed. Before cycle\u002F401, the every-cycle `cdd-iteration.md` rule produced files for `protocol_gap_count == 0` cycles too (the survivorship-bias ambiguity: \"is the missing file a clean cycle or a skipped close-out?\"). cycle\u002F401 resolved the ambiguity structurally — the receipt's `protocol_gap_count` field is the always-present record of *whether* an iteration file is required; the file is the conditional record of *what was found*. Empty-findings files written under the prior rule remain valid artifacts (backward compatibility); future cycles with `protocol_gap_count == 0` may write a courtesy stub or omit the file entirely.\n- **cycle\u002F369** — Phase 2 receipt schemas; first cycle to record `cdd-protocol-gap` findings under the typed receipt + iteration shape. 3 findings, 0 patches, 2 MCAs, 1 no-patch.\n- **cycle\u002F388** — Phase 2.5 schemas split; demonstrated the `cdd-protocol-gap` + `cdd-skill-gap` mixed-class triage in one cycle. 3 findings, 0 patches, 2 MCAs.\n- **cycle\u002F393** — δ-as-architect protocol patches; 4 patches landed on the iteration surface in one cycle (the `patch-landed` disposition exercised at scale). 0 findings new; 4 patches landed against prior MCAs.\n- **cycle\u002F410** — Sub 5 of cnos#403 (eight-section migration); closure with courtesy `cdd-iteration.md` stub (zero findings). Demonstrates the closure-stub option as the standard pattern at current operating point.\n- **The #406–#412 wave** — post-codification cycles that exercised the receipt-stream in steady-state. Every cycle in the wave produced a complete `cdd-iteration.md` (or courtesy stub) + an INDEX.md row; the receipt-stream wire-format is operationally stable.\n\nThe full row history is at `.cdd\u002Fiterations\u002FINDEX.md` — 22+ rows at the source pin, accumulating one per cycle. The empirical anchor index for CDS-class cycles is at `cnos.cds\u002Fdocs\u002Fempirical-anchor-cdd.md` (which cross-references the receipt-stream's per-cycle artifacts as the canonical receipt instances per CDS Field 3).\n\n---\n\n## 8. Related documents\n\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002FHANDOFF.md` — package contract; this skill is one of five sub-surfaces.\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002Fartifact-channel\u002FSKILL.md` — the per-cycle channel substrate. The `cdd-iteration.md` file lives on this channel as a γ-owned file (per artifact-channel §2.2); the channel governs the file path, write ownership, and freeze-on-merge rule; this skill governs the file's content shape and the cross-cycle aggregation.\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md` — the cross-repo bundle composition. When a `patch-landed` finding has a `Cross-repo` target, the bundle attaches per the cross-repo skill's case-(b) \u002F case-(c) bundle file set + asymmetric archival rule.\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002Fdispatch\u002FSKILL.md` — the dispatch wire format; the dispatch prompt initiates the cycle whose close-out feeds this receipt-stream.\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002Fmid-flight\u002FSKILL.md` — the rescue mechanism; orthogonal to receipt-stream (rescue happens during the cycle; receipt-stream consumes the cycle's close-out artifact).\n- `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` — the cdd-side runbook (now a pointer to this skill). post-release\u002FSKILL.md applies the rule at cycle close-out: γ writes `cdd-iteration.md` per the canonical shape in §1; γ appends the INDEX row per §2; γ runs the cross-repo bundle composition per §6 if applicable.\n- `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` — ε's CDD-side role-local authority on the gap-class instantiation (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F `cdd-tooling-gap` \u002F `cdd-metric-gap`). The `Class:` field in this skill's per-finding shape takes one of these four values for CDD-side findings; CDR's `Class:` values are different per `cnos.cdr\u002Fskills\u002Fcdr\u002Fepsilon\u002FSKILL.md §1`.\n- `cnos.cdd\u002Fskills\u002Fcdd\u002Factivation\u002FSKILL.md §22` — the per-repo cadence declaration (whether courtesy stubs are mandatory; D\u002FC\u002FB\u002FA + `info` severity scale; sliding-window auto-spawn MCA trigger). The activation skill overlays per-repo policy on top of the generic wire-format invariants this skill carries.\n- `cnos.cdd\u002Fskills\u002Fcdd\u002FCOHERENCE-CELL.md §\"ε as Protocol Evolution\" + §\"ε Artifact Rule\"` — the cell-doctrinal grounding for ε's role; the receipt-stream is the artifact surface ε reads.\n- `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\"` — CDS-class closure gate; F9 (\"Missing `cdd-iteration.md` when triggers fired\") names the gate that blocks closure when `protocol_gap_count > 0` but no iteration artifact exists. CDS.md cites this skill (post-#419) for the per-finding shape; the operational realization in `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` is a pointer to this skill.\n- `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Artifact contract\" → §\"Location matrix\"` — declares the `cdd-iteration.md` file's canonical path in the CDS-class artifact set; the file lives on the artifact-channel and its content shape is governed by this skill.\n- `schemas\u002Fcdd\u002Freceipt.cue` (`#Receipt`) — the typed receipt that carries `protocol_gap_count` and `protocol_gap_refs`. This skill consumes the receipt's `protocol_gap_count` as the cadence-rule input (§3.1).\n- `ROLES.md §4b` — the generic ε doctrine; the authoritative source for the watched-fields invariant, the MCA discipline, and the ε=δ collapse rule. The cadence rule (`required only when protocol_gap_count > 0`) is inherited from §4b.4.\n- [cnos#335](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F335) — INDEX.md aggregator bootstrap empirical anchor.\n- [cnos#364](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F364) — first cycle in the steady-state INDEX.md every-cycle period.\n- [cnos#401](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F401) — courtesy empty-findings stub convention empirical anchor.\n- [cnos#404](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F404) — parent tracker (handoff\u002Fcoordination extraction wave).\n- [cnos#419](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F419) — the codification cycle for this surface (Sub 5 of cnos#404).\n\n---\n\n## 9. Non-goals\n\n- This skill does NOT redesign the per-finding shape. The six top-level fields (`Source` \u002F `Class` \u002F `Trigger` \u002F `Description` \u002F `Root cause` \u002F `Disposition`) and the per-disposition sub-fields are preserved verbatim from the pre-migration canonical home (`cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b`). Future tightening is a follow-on cycle.\n- This skill does NOT redesign the INDEX.md row format. The eight pipe-separated columns (`Cycle | Issue | Date | Findings | Patches | MCAs | No-patch | Path`) are preserved verbatim. Future tightening (e.g., adding a sub-cycle suffix column, separating same-cycle from cross-repo patch counts) is a follow-on cycle.\n- This skill does NOT modify `.cdd\u002Fiterations\u002FINDEX.md` content. The file's existing rows stay where they are; only the standard close-out row for this cycle is added (per the artifact-channel cycle close-out rule and the post-release §5.6b pointer this skill now governs).\n- This skill does NOT own the role-local authoring procedure. Which session writes the artifact, the close-out gate ordering, the ε=δ collapse rule for the current operating point — those live in `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` (cdd-side runbook, now pointer) and `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md` (ε role-local).\n- This skill does NOT own the CDD-specific gap-class names (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F `cdd-tooling-gap` \u002F `cdd-metric-gap`). Those live in `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1`. The `Class:` slot in this skill's per-finding shape is protocol-agnostic; the values are consumer-specific.\n- This skill does NOT own the cross-repo bundle composition (LINEAGE.md schemas; STATUS state machine; feedback-patch format; archival rule). Those live in `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. This skill names the trigger (a `patch-landed` finding with `Cross-repo` target); cross-repo names the bundle.\n- This skill does NOT own the polling primitives or harness substrate. Those live in `cnos.cdd\u002Fskills\u002Fcdd\u002Fharness\u002FSKILL.md §5.4` and `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Coordination surfaces\" → §\"Polling primitives\"`. This skill is an artifact-surface for a cross-cycle stream; the read mechanism (how ε polls the aggregator across cycles) is harness-side.\n- This skill does NOT lift the per-finding shape or the INDEX row format into a typed schema (e.g. `schemas\u002Fhandoff\u002Fiteration-finding.cue` \u002F `schemas\u002Fhandoff\u002Fiteration-index.cue`). The Markdown invariants are the v0.1 canonical rendering; a typed schema is deferred per the extraction-map.md §6 note (Sub 3's Q2 ruling precedent — schema stays Markdown for v0.1). Re-evaluate if a downstream consumer (CCNF-O Track A; `cn cdd verify`; cross-repo bundle validators) needs a typed shape.\n\n---\n\n## 10. Kata\n\n### Scenario\n\nγ has just closed a cycle. β has merged the cycle branch to main; α and β close-outs are on main. γ has filed `gamma-closeout.md`. The cycle's receipt at `.cdd\u002Funreleased\u002F{N}\u002Freceipt.yaml` carries `protocol_gap_count: 2` with two refs naming `cdd-skill-gap` findings surfaced during review.\n\n### Expected reasoning\n\n1. **Cadence check (§3.1).** The receipt has `protocol_gap_count > 0` (specifically, 2). The per-cycle iteration artifact is **required**, not optional. γ MUST author `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` and MUST append one INDEX.md row.\n\n2. **Per-finding authoring (§1).** γ opens `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` and writes one F1 \u002F F2 section per finding. Each section carries the six top-level fields verbatim per the per-finding shape:\n   - `Source:` names the artifact + section (e.g. `β-review §3 R1`).\n   - `Class:` is `cdd-skill-gap` (per the receipt's refs).\n   - `Trigger:` names the CDS §\"Assessment\" trigger that fired (e.g. \"mechanical ratio > 20% with ≥ 10 findings\" if applicable).\n   - `Description:` one paragraph of cycle-local detail.\n   - `Root cause:` one paragraph naming the unmet invariant.\n   - `Disposition:` one of `patch-landed` \u002F `next-MCA` \u002F `no-patch`. γ picks based on whether the patch shipped this cycle, is deferred to a follow-on, or is closed with explicit no-patch reason.\n\n3. **Per-disposition sub-fields (§1).** For each finding:\n   - If `patch-landed`: γ records the commit SHA \u002F file path under `Patch:`, names the affected skill file\u002Fsection under `Affects:`, and (if cross-repo) names the target-repo + PR under `Cross-repo:`.\n   - If `next-MCA`: γ files the issue (e.g. `gh issue create`), records the issue number under `Issue filed:`, and pins the `First AC:`.\n   - If `no-patch`: γ records the `Reason:` per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\" → §\"Closure rule\"`.\n\n4. **Aggregator row (§2).** γ opens `.cdd\u002Fiterations\u002FINDEX.md` and appends one row:\n   ```\n   | N | #N | YYYY-MM-DD | 2 | P | A | Z | .cdd\u002Funreleased\u002FN\u002Fcdd-iteration.md |\n   ```\n   where P + A + Z = 2 (the consistency check per §2). γ commits both files in the same commit (typical pattern: the γ-closeout commit also carries the iteration artifact + INDEX row).\n\n5. **Cross-repo bundle (§6).** If any finding had `Disposition: patch-landed` with a `Cross-repo:` target, γ creates a bundle at `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F` per `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. The bundle's LINEAGE.md names the source-side patch + the destination-side PR.\n\n6. **Release-time move (artifact-channel §2.4.2).** Before γ requests the tag from δ, γ moves `.cdd\u002Funreleased\u002F{N}\u002F` → `.cdd\u002Freleases\u002F{X.Y.Z}\u002F{N}\u002F` (or `.cdd\u002Freleases\u002Fdocs\u002F{ISO-date}\u002F{N}\u002F` for docs-only releases). The `cdd-iteration.md` file rides the move; the INDEX.md row's `Path` column is updated to reflect the new path in a subsequent close-out commit if not already pinned at write time.\n\n### Common failures\n\n- γ writes `cdd-iteration.md` but forgets the INDEX row — ε's pattern-detection across cycles skips this cycle when scanning the aggregator. CDS gate F9 catches this.\n- γ writes the INDEX row but the per-finding shape diverges (e.g. uses `Status:` instead of `Disposition:`; uses a new class name not in the four-value vocabulary). ε's class-by-class scan across cycles breaks.\n- γ writes a `no-patch` disposition without a `Reason:` — closure rule is violated; the silence is not an acceptable disposition.\n- γ writes a courtesy stub (`protocol_gap_count == 0`) and labels it \"iteration complete\" with the no-findings result *despite* there being findings. The survivorship-bias ambiguity re-emerges; ε cannot distinguish clean cycles from skipped triage.\n- A `patch-landed` finding with a `Cross-repo:` target lands without the bundle at `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F`. The patch's lineage is lost when the source-side bundle archives.\n\n### Verification\n\n- `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` exists if `protocol_gap_count > 0`.\n- `.cdd\u002Fiterations\u002FINDEX.md` has one new row for cycle N with the eight columns populated.\n- For each finding, the six top-level fields are present + the per-disposition sub-fields are present.\n- `Findings = Patches + MCAs + No-patch` in the INDEX row (M = P + A + Z).\n- For each `patch-landed` + `Cross-repo` finding, `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F` exists with the bundle.\n\n### Reflection\n\nA second γ reading the cycle's record across cycles (via `.cdd\u002Fiterations\u002FINDEX.md` row-by-row) should be able to surface protocol-gap patterns no single cycle could surface — e.g., \"five cycles in a row had `cdd-skill-gap` findings against `review\u002FSKILL.md §3.13`; the skill is underspecified and needs a patch\". The receipt-stream is the cross-cycle learning signal; without it, ε would have to re-derive cycle context from gh logs and per-cycle assessment files for every triage. The artifact-channel carries the per-cycle record; the receipt-stream carries the cross-cycle pattern surface.\n\n---\n\n**End of skill.**\n","# Receipt-Stream — cross-cycle ε feed (per-cycle iteration artifact + cross-cycle aggregator)\n\n## Core principle\n\n**The receipt-stream is the protocol's own learning signal across cycles. Each cycle that surfaces a protocol gap (`protocol_gap_count > 0`) emits a per-cycle iteration artifact (`cdd-iteration.md`) with a fixed per-finding shape; γ then appends one row to the cross-cycle aggregator (`.cdd\u002Fiterations\u002FINDEX.md`). ε reads the aggregator to surface patterns across cycles; the per-cycle artifact carries the structured findings the aggregator points at. Cycles with `protocol_gap_count == 0` may write a courtesy empty-findings stub (per cycle\u002F401 convention) but are not required to.**\n\nThe per-cycle artifact is **role-local**: γ authors it as part of the cycle's close-out (with ε review where ε is a distinct actor; ε=δ collapsed in the current cnos cdd operating point per `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §2`). The cross-cycle aggregator is **persistent**: `.cdd\u002Fiterations\u002FINDEX.md` accumulates one row per cycle that produced an iteration artifact. The two together form the receipt-stream surface that ε observes — the per-cycle structured findings *plus* the cross-cycle row-by-row index that lets ε scan many cycles at once.\n\nThe failure mode is **receipt-stream drift** — γ writes the iteration artifact but forgets the aggregator row (ε cannot find the cycle when scanning); γ writes the aggregator row but the per-finding shape diverges from the canonical fields (ε's pattern-detection across cycles breaks); a cross-repo `patch-landed` finding lands without the bundle trace (the patch's lineage is lost when the source-side bundle archives); the courtesy stub gets misused as \"iteration complete\" when no actual triage happened (survivorship bias re-emerges). The protocol closes each failure mode by pinning the per-finding shape, the row format, the cadence rule, and the cross-repo bundle invariant explicitly.\n\nThis skill is the **canonical surface** for the receipt-stream wire-format invariants: the per-finding shape inside `cdd-iteration.md`; the INDEX.md row format; the cadence rule (required when `protocol_gap_count > 0`; courtesy stub when 0); the finding-disposition vocabulary (`patch-landed` \u002F `next-MCA` \u002F `no-patch`); the cross-repo trace bundle composition. Consumer protocols cite this skill for the wire-format; the role-local authoring procedure (which session writes, what review pass applies) lives in the consumer (`cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` is now a pointer; `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` is ε's role-local authority on classification).\n\n## Authority\n\n- This skill (in `cnos.handoff`) is the only canonical home for the receipt-stream wire-format invariants: the per-finding shape (`Source` \u002F `Class` \u002F `Trigger` \u002F `Description` \u002F `Root cause` \u002F `Disposition` + per-disposition sub-fields); the INDEX.md row format (eight pipe-separated columns: `Cycle | Issue | Date | Findings | Patches | MCAs | No-patch | Path`); the cadence rule; the finding-disposition vocabulary; the cross-repo trace bundle invariant. If another skill or doctrine surface carries the same wire-format claims, this skill governs.\n- The consumer protocol packages carry the role-local authoring procedure. `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` is a pointer to this skill for the wire-format and applies the rule at cycle close-out (γ writes the artifact per this skill's shape; γ appends the INDEX row). `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` is the role-local authority on the CDD-specific gap-class instantiation (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F `cdd-tooling-gap` \u002F `cdd-metric-gap`); the gap-class names are CDD-side. CDR has its own gap-class set per `cnos.cdr\u002Fskills\u002Fcdr\u002Fepsilon\u002FSKILL.md §1` (`cdr-data-gate-gap` \u002F `cdr-overclaim-gap` \u002F etc.); the per-finding shape and aggregator row format are protocol-agnostic.\n- The cross-repo trace bundle composes with `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. When a finding's disposition is `patch-landed` with a `Cross-repo` target, γ creates a bundle at `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F` per the cross-repo skill's case-(b) \u002F case-(c) bundle file set. This skill names the trigger; cross-repo names the bundle composition.\n\n## Scope\n\nIn scope:\n\n- The per-finding shape inside `cdd-iteration.md` (F1, F2, … with `Source` \u002F `Class` \u002F `Trigger` \u002F `Description` \u002F `Root cause` \u002F `Disposition` and per-disposition sub-fields: `Patch` + `Affects` + `Cross-repo` for `patch-landed`; `Issue filed` + `First AC` for `next-MCA`; `Reason` for `no-patch`).\n- The cross-cycle aggregator (`.cdd\u002Fiterations\u002FINDEX.md`) row format: eight pipe-separated columns naming the cycle \u002F issue \u002F date \u002F findings count \u002F patches count \u002F MCAs count \u002F no-patch count \u002F iteration-file path.\n- The cadence rule: per-cycle artifact required when `protocol_gap_count > 0`; courtesy empty-findings stub permitted (not required) when `protocol_gap_count == 0` (cycle\u002F401 convention).\n- The finding-disposition vocabulary: `patch-landed` | `next-MCA` | `no-patch` (no other dispositions are valid).\n- The aggregator location: `.cdd\u002Fiterations\u002FINDEX.md` at the repo root (the live, persistent aggregator; data, not doctrine — content stays put; doctrine about it lives here).\n- The cross-repo trace bundle invariant: when a finding's disposition is `patch-landed` with `Cross-repo` target, γ creates a bundle at the canonical path per `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`.\n- Empirical anchors: cycle\u002F335 (aggregator initialized); cycle\u002F401 (courtesy stub convention landed); every cycle since cnos#364 carries an INDEX row + a `cdd-iteration.md`.\n\nOut of scope:\n\n- The role-local authoring procedure (which session writes; the close-out gate ordering; the ε-vs-γ collapse rule). Lives in `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` (cdd-side runbook, now pointer to this skill) and `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` (ε's CDD-side role-local authority).\n- The CDD-specific gap-class names (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F `cdd-tooling-gap` \u002F `cdd-metric-gap`). Lives in `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1`. CDR has different gap classes; future c-d-X may have other gap classes. The per-finding `Class` field is consumer-specific in vocabulary; the wire-format `Class:` slot is protocol-agnostic.\n- The receipt schema itself (the typed `#Receipt` that carries `protocol_gap_count` and `protocol_gap_refs`). Lives in `schemas\u002Fcdd\u002Freceipt.cue`. This skill consumes the receipt's `protocol_gap_count` as the cadence-rule input; it does not define the receipt's shape.\n- The per-cycle artifact-channel (where the `cdd-iteration.md` file sits during the cycle; the release-time directory move). Lives in `cnos.handoff\u002Fskills\u002Fhandoff\u002Fartifact-channel\u002FSKILL.md`. The per-cycle iteration artifact is an artifact-channel-owned file; the receipt-stream owns its *content shape* and the cross-cycle aggregation; the channel owns the file path \u002F write ownership \u002F freeze-on-merge rules.\n- The cross-repo bundle composition (LINEAGE.md schemas per case; STATUS state machine; feedback-patch format; archival rule). Lives in `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. This skill names the *trigger* for a bundle (a `patch-landed` finding with `Cross-repo` target); cross-repo names the *bundle*.\n- The activation-side cadence declaration (per-repo `cdd-iteration.md` cadence; D\u002FC\u002FB\u002FA severity scale; auto-spawn MCA trigger). Lives in `cnos.cdd\u002Fskills\u002Fcdd\u002Factivation\u002FSKILL.md §22`. The activation skill declares per-repo cadence overlays; this skill carries the generic wire-format invariants.\n- Tooling that auto-verifies receipt-stream discipline (`cn cdd verify` cycle-iteration checks). Deferred; doctrine first, tooling later.\n\n---\n\n## 1. Per-finding shape (`cdd-iteration.md`)\n\nEach finding inside `cdd-iteration.md` carries the following fields, in this order. The shape is preserved verbatim from the pre-migration canonical home (`cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b`):\n\n```markdown\n### F1: \u003Ctitle>\n\n- **Source:** α-closeout \u002F β-review \u002F γ-triage \u002F PRA §3 \u002F PRA §4b — name the artifact and section\n- **Class:** `cdd-skill-gap` | `cdd-protocol-gap` | `cdd-tooling-gap` | `cdd-metric-gap`\n- **Trigger:** §9.1 trigger N | \"γ process-gap check\" | \"review pattern across cycles\"\n- **Description:** one paragraph\n- **Root cause:** one paragraph\n- **Disposition:** `patch-landed` | `next-MCA` | `no-patch`\n\nIf `patch-landed`:\n- **Patch:** `\u003Ccommit-sha>` or `\u003Cfile-path>`\n- **Affects:** `\u003Ccdd skill file or section>` (e.g. `cdd\u002Freview\u002FSKILL.md` §3.13)\n- **Cross-repo:** `\u003Ctarget-repo>` PR `#NN` if patch landed in a different repo than this cycle (otherwise omit)\n\nIf `next-MCA`:\n- **Issue filed:** `\u003Crepo>` `#NN`\n- **First AC:** ...\n\nIf `no-patch`:\n- **Reason:** required justification per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md` §\"Closure\" → §\"Closure rule\"\n```\n\n**Field meaning:**\n\n- **Source.** Which close-out artifact (α-closeout \u002F β-review \u002F γ-triage \u002F PRA §3 \u002F PRA §4b) surfaced this finding. Names the artifact + section; lets ε trace the finding back to its origin.\n- **Class.** The CDD-side gap class per `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` — `cdd-skill-gap` (procedural skill underspecified \u002F wrong); `cdd-protocol-gap` (CDD doctrine drifted from invariant); `cdd-tooling-gap` (tooling absent \u002F wrong \u002F unavailable); `cdd-metric-gap` (measurement missing \u002F wrong). CDR uses different classes per `cnos.cdr\u002Fskills\u002Fcdr\u002Fepsilon\u002FSKILL.md §1`; future c-d-X may use other classes.\n- **Trigger.** Which trigger fired — a `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Assessment\" → §\"Cycle iteration triggers\"` row (e.g. review rounds > 2; mechanical ratio > 20%; avoidable tooling\u002Fenvironmental failure; loaded skill failed to prevent a finding), or the γ process-gap check, or a multi-cycle pattern surfaced by ε's review-pattern-across-cycles read.\n- **Description.** One paragraph naming what happened, in concrete cycle-local terms.\n- **Root cause.** One paragraph naming why it happened — what protocol invariant was unmet, what skill was underspecified, what tool was missing.\n- **Disposition.** One of three values: `patch-landed` (the patch shipped in this cycle), `next-MCA` (issue filed for a follow-on cycle), `no-patch` (explicit no-patch with required reason). No other dispositions are valid.\n\n**Per-disposition sub-fields:**\n\n- **`patch-landed`** — `Patch:` names the commit SHA or file path; `Affects:` names the cdd skill file or section that received the patch; `Cross-repo:` names the target-repo PR if the patch landed in a different repo (otherwise omit).\n- **`next-MCA`** — `Issue filed:` names the repo + issue number; `First AC:` names the first acceptance criterion the follow-on cycle ships against.\n- **`no-patch`** — `Reason:` carries the required justification per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\" → §\"Closure rule\"` (one of: all findings were application gaps with adequate existing spec; zero review findings this cycle; environmental failure with no spec-level fix available).\n\nThe shape is **not redesigned by this skill**; the migration is wholesale. Future tightening (adding fields, changing field semantics) is a follow-on cycle; this skill carries the v0.1 shape.\n\n---\n\n## 2. Aggregator (`.cdd\u002Fiterations\u002FINDEX.md`)\n\nThe cross-cycle aggregator at `.cdd\u002Fiterations\u002FINDEX.md` carries one row per cycle that produced an iteration artifact. The row format is **eight pipe-separated columns**, preserved verbatim from the pre-migration canonical home:\n\n```markdown\n| Cycle | Issue | Date | Findings | Patches | MCAs | No-patch | Path |\n|-------|-------|------|----------|---------|------|----------|------|\n| {N}   | #N    | YYYY-MM-DD | M | P | A | Z | .cdd\u002Freleases\u002F{X.Y.Z}\u002F{N}\u002Fcdd-iteration.md |\n```\n\n**Column meanings:**\n\n| Column | Meaning |\n|---|---|\n| **Cycle** | The cycle identifier (typically the issue number; may include sub-cycle suffix like `344-b` for multi-phase docs cycles). |\n| **Issue** | The GitHub issue number (`#NNN`). Usually equals the cycle but may differ for follow-on cycles re-opening an earlier issue. |\n| **Date** | ISO date (`YYYY-MM-DD`) of cycle close. |\n| **Findings** | Count of findings inside the cycle's `cdd-iteration.md` (M). Zero for courtesy stubs (cycle\u002F401 convention). |\n| **Patches** | Count of findings with disposition `patch-landed` (P). Includes both same-cycle patches and cross-repo `patch-landed` shipments. |\n| **MCAs** | Count of findings with disposition `next-MCA` (A). Each represents one follow-on cycle scheduled. |\n| **No-patch** | Count of findings with disposition `no-patch` (Z). Each carries a recorded `Reason`. |\n| **Path** | Relative path to the cycle's `cdd-iteration.md` artifact. Uses `.cdd\u002Freleases\u002F{X.Y.Z}\u002F{N}\u002Fcdd-iteration.md` for version-tagged releases; uses `.cdd\u002Freleases\u002Fdocs\u002F{ISO-date}\u002F{N}\u002Fcdd-iteration.md` for docs-only releases; uses `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` for in-flight or unreleased cycles. |\n\n**Row update procedure:**\n\nAfter writing `cdd-iteration.md` (or the courtesy empty-findings stub), γ updates `.cdd\u002Fiterations\u002FINDEX.md` with one row appended at the bottom of the data table:\n\n1. Open `.cdd\u002Fiterations\u002FINDEX.md` on the cycle branch.\n2. Append one row matching the format above, with the cycle's actual values (`{N}` \u002F `#N` \u002F ISO date \u002F M \u002F P \u002F A \u002F Z \u002F path).\n3. The four count columns sum: `Findings = Patches + MCAs + No-patch` (M = P + A + Z). This is a derived consistency check; ε's pattern-detection relies on it.\n4. Commit on the cycle branch (same commit as `cdd-iteration.md` if both are written together).\n\nThe aggregator file is **data**, not doctrine. Its content rows are not moved by this migration; this skill names the *format* and the *update procedure*. The live file at `.cdd\u002Fiterations\u002FINDEX.md` is the authoritative aggregator for the cnos repo at the current scale.\n\n---\n\n## 3. Cadence rules\n\nThe per-cycle iteration artifact's cadence is **conditional on the cycle's receipt**:\n\n### 3.1. Required: `protocol_gap_count > 0`\n\nWhen the cycle's receipt has `protocol_gap_count > 0` — i.e. the close-out triage in `gamma-closeout.md` produced ≥ 1 finding tagged `cdd-skill-gap`, `cdd-protocol-gap`, `cdd-tooling-gap`, or `cdd-metric-gap` — the per-cycle iteration artifact is **required**. γ MUST author `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` with each finding structured per the per-finding shape in §1; γ MUST append one INDEX.md row per §2; γ closure gate blocks closure until both exist.\n\nThe receipt's `protocol_gap_count` field is **consistency-pinned** to `len(protocol_gap_refs)` by `schemas\u002Fcdd\u002Freceipt.cue`. The receipt is the always-present record of *whether* an iteration file is required; the file is the conditional record of *what was found*. This is the inherited rule from `ROLES.md §4b.4`.\n\n### 3.2. Permitted: courtesy empty-findings stub when `protocol_gap_count == 0`\n\nWhen the cycle's receipt has `protocol_gap_count == 0` — i.e. the cycle ran cleanly with no `cdd-*-gap` findings — the per-cycle iteration artifact is **optional**. The cycle's gamma-closeout names the no-gap result; no iteration file is required.\n\nHowever, γ MAY write a courtesy empty-findings stub at `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` for traceability. The stub records `protocol_gap_count: 0` explicitly, names the no-findings result, and (optionally) explains why no protocol gap surfaced. The stub variant is the convention landed in **cycle\u002F401** (the empirical anchor for the courtesy-stub rule). Backward compatibility: existing empty-findings `cdd-iteration.md` files written under the prior every-cycle rule remain valid artifacts — the rule is \"required when `> 0`\", not \"forbidden when `== 0`\".\n\nWhen a courtesy stub is written, γ MAY also append the INDEX.md row (with `Findings = 0; Patches = 0; MCAs = 0; No-patch = 0`). This is the dominant cnos cdd convention at current scale: nearly every recent cycle has an INDEX row, even for `protocol_gap_count == 0` cycles, because the row supports ε's per-cycle scan-without-omission discipline.\n\n### 3.3. Activation-side overlay\n\nThe per-repo cadence declaration (whether courtesy stubs are mandatory in a given project; the D\u002FC\u002FB\u002FA + `info` severity scale for findings; the sliding-window auto-spawn MCA trigger) is set by `cnos.cdd\u002Fskills\u002Fcdd\u002Factivation\u002FSKILL.md §22`. The activation skill overlays per-repo policy on top of the generic wire-format invariants this skill carries; the two are layered.\n\n---\n\n## 4. Aggregator location\n\nThe aggregator file lives at:\n\n```text\n.cdd\u002Fiterations\u002FINDEX.md\n```\n\nat the repo root. The file is **data**, not doctrine: its content rows accumulate cycle by cycle and are not moved by this migration. The doctrine *about* the file (the row format; the per-row update procedure; the eight column meanings) is what this skill carries.\n\nThe filename will eventually become consumer-specific. CDS's analogue is `\u003Cproject>\u002F.cds\u002Fiterations\u002FINDEX.md` per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\"`. CDR's analogue is the per-project coherence-log per `cnos.cdr\u002Fskills\u002Fcdr\u002Fepsilon\u002FSKILL.md §1` and `cnos.cdr\u002Fdocs\u002Fempirical-anchor-cph.md` row #14. The wire-format pattern (one persistent aggregator at a known per-protocol-package path; one row per cycle that produced an iteration artifact; eight columns naming cycle \u002F issue \u002F date \u002F findings \u002F patches \u002F MCAs \u002F no-patch \u002F path) is what this skill records; the per-protocol filename is consumer-side.\n\nFor the cnos repo at the current operating point, the file is at `.cdd\u002Fiterations\u002FINDEX.md`. The bootstrap row was added by cycle\u002F335 (per `cnos.cds\u002Fdocs\u002Fempirical-anchor-cdd.md` #335 row); every cycle since cnos#364 carries one row.\n\n---\n\n## 5. Finding-disposition discipline\n\nEach finding carries one of three dispositions; the vocabulary is **closed** (no other dispositions are valid):\n\n- **`patch-landed`** — the patch shipped in this cycle. The finding is closed by the same commit set that produced the cycle's release. The patch lands in a CDD skill file, a doc, a tool, or (rarely) a runtime surface. If the patch landed in a different repo, the `Cross-repo:` sub-field names the target-repo + PR; the cross-repo trace bundle attaches per §6.\n- **`next-MCA`** — the patch is deferred to a follow-on cycle. The cycle files an issue (the MCA), records the issue number under `Issue filed:`, and pins the `First AC:` the follow-on cycle ships against. This is the dominant disposition for findings that are not safe to ship inside the current cycle (cross-cycle redesigns; surfaces with > 1 dependent cycle).\n- **`no-patch`** — the finding is closed without a patch. This requires explicit justification per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\" → §\"Closure rule\"`: one of (a) all findings were application gaps with adequate existing spec (the skill was right; the agent didn't follow it; patch the operator, not the spec); (b) zero review findings this cycle (the finding is a γ-side observation, not a review finding); (c) environmental failure with no spec-level fix available (tooling constraint; cross-cutting infrastructure). The `Reason:` sub-field is **required**; silence is not an acceptable disposition.\n\nThe vocabulary is **classification-grade**: ε's pattern-detection across cycles requires that the three dispositions are mutually exclusive and exhaustive. Adding a fourth disposition (e.g., \"drop\") is a follow-on cycle; this skill carries the v0.1 vocabulary.\n\nThe role-local authority for the disposition discipline is `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` (CDD-side). The MCA-discipline shape (ship-now \u002F next-MCA \u002F no-patch) is inherited from `ROLES.md §4b.5`; the CDD-specific gap-class names (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F etc.) live in `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1`.\n\n---\n\n## 6. Cross-repo trace\n\nWhen a finding's `Disposition` is `patch-landed` with a `Cross-repo:` target — i.e. the patch shipped in a different repo than this cycle — γ creates a **cross-repo trace bundle** at the canonical path:\n\n```text\n.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F\n```\n\nper `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. The bundle composition depends on the case (per `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md §2` directional cases):\n\n- **Outbound iteration trace (case b)** — the bundle file set is `LINEAGE.md` with per-patch confirmation; one outbound destination patch.\n- **Bilateral iteration (case c)** — the bundle additionally carries `cdd-iteration.md` and one feedback patch per outbound destination patch.\n\n**Archival.** The source-side (cnos-side, for outbound) bundle MAY be archived once the counterpart-side mirror confirms receipt per `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md §\"Bundle archival rule\"`; target-side mirrors are preserved indefinitely. The asymmetric archival rule preserves the bundle's lineage on the target side past the source-side cleanup.\n\nThis skill names the trigger (a `patch-landed` finding with `Cross-repo` target); `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md` names the bundle's composition and archival rule. The two skills compose: the receipt-stream's per-finding shape exposes the trigger; cross-repo carries the bundle.\n\n---\n\n## 7. Empirical anchors\n\nEvery cycle since cnos#364 carries an INDEX.md row + a `cdd-iteration.md` (file or courtesy stub). Representative anchors:\n\n- **cycle\u002F335** — `.cdd\u002Fiterations\u002FINDEX.md` initialized; bootstrap for the receipt-stream artifact. Per `cnos.cds\u002Fdocs\u002Fempirical-anchor-cdd.md` #335: \"Initialized `.cdd\u002Fiterations\u002FINDEX.md`; bootstrap for the receipt-stream artifact\". The 8-column row format crystallized here.\n- **cycle\u002F401** — the courtesy empty-findings stub convention landed. Before cycle\u002F401, the every-cycle `cdd-iteration.md` rule produced files for `protocol_gap_count == 0` cycles too (the survivorship-bias ambiguity: \"is the missing file a clean cycle or a skipped close-out?\"). cycle\u002F401 resolved the ambiguity structurally — the receipt's `protocol_gap_count` field is the always-present record of *whether* an iteration file is required; the file is the conditional record of *what was found*. Empty-findings files written under the prior rule remain valid artifacts (backward compatibility); future cycles with `protocol_gap_count == 0` may write a courtesy stub or omit the file entirely.\n- **cycle\u002F369** — Phase 2 receipt schemas; first cycle to record `cdd-protocol-gap` findings under the typed receipt + iteration shape. 3 findings, 0 patches, 2 MCAs, 1 no-patch.\n- **cycle\u002F388** — Phase 2.5 schemas split; demonstrated the `cdd-protocol-gap` + `cdd-skill-gap` mixed-class triage in one cycle. 3 findings, 0 patches, 2 MCAs.\n- **cycle\u002F393** — δ-as-architect protocol patches; 4 patches landed on the iteration surface in one cycle (the `patch-landed` disposition exercised at scale). 0 findings new; 4 patches landed against prior MCAs.\n- **cycle\u002F410** — Sub 5 of cnos#403 (eight-section migration); closure with courtesy `cdd-iteration.md` stub (zero findings). Demonstrates the closure-stub option as the standard pattern at current operating point.\n- **The #406–#412 wave** — post-codification cycles that exercised the receipt-stream in steady-state. Every cycle in the wave produced a complete `cdd-iteration.md` (or courtesy stub) + an INDEX.md row; the receipt-stream wire-format is operationally stable.\n\nThe full row history is at `.cdd\u002Fiterations\u002FINDEX.md` — 22+ rows at the source pin, accumulating one per cycle. The empirical anchor index for CDS-class cycles is at `cnos.cds\u002Fdocs\u002Fempirical-anchor-cdd.md` (which cross-references the receipt-stream's per-cycle artifacts as the canonical receipt instances per CDS Field 3).\n\n---\n\n## 8. Related documents\n\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002FHANDOFF.md` — package contract; this skill is one of five sub-surfaces.\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002Fartifact-channel\u002FSKILL.md` — the per-cycle channel substrate. The `cdd-iteration.md` file lives on this channel as a γ-owned file (per artifact-channel §2.2); the channel governs the file path, write ownership, and freeze-on-merge rule; this skill governs the file's content shape and the cross-cycle aggregation.\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md` — the cross-repo bundle composition. When a `patch-landed` finding has a `Cross-repo` target, the bundle attaches per the cross-repo skill's case-(b) \u002F case-(c) bundle file set + asymmetric archival rule.\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002Fdispatch\u002FSKILL.md` — the dispatch wire format; the dispatch prompt initiates the cycle whose close-out feeds this receipt-stream.\n- `cnos.handoff\u002Fskills\u002Fhandoff\u002Fmid-flight\u002FSKILL.md` — the rescue mechanism; orthogonal to receipt-stream (rescue happens during the cycle; receipt-stream consumes the cycle's close-out artifact).\n- `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` — the cdd-side runbook (now a pointer to this skill). post-release\u002FSKILL.md applies the rule at cycle close-out: γ writes `cdd-iteration.md` per the canonical shape in §1; γ appends the INDEX row per §2; γ runs the cross-repo bundle composition per §6 if applicable.\n- `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1` — ε's CDD-side role-local authority on the gap-class instantiation (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F `cdd-tooling-gap` \u002F `cdd-metric-gap`). The `Class:` field in this skill's per-finding shape takes one of these four values for CDD-side findings; CDR's `Class:` values are different per `cnos.cdr\u002Fskills\u002Fcdr\u002Fepsilon\u002FSKILL.md §1`.\n- `cnos.cdd\u002Fskills\u002Fcdd\u002Factivation\u002FSKILL.md §22` — the per-repo cadence declaration (whether courtesy stubs are mandatory; D\u002FC\u002FB\u002FA + `info` severity scale; sliding-window auto-spawn MCA trigger). The activation skill overlays per-repo policy on top of the generic wire-format invariants this skill carries.\n- `cnos.cdd\u002Fskills\u002Fcdd\u002FCOHERENCE-CELL.md §\"ε as Protocol Evolution\" + §\"ε Artifact Rule\"` — the cell-doctrinal grounding for ε's role; the receipt-stream is the artifact surface ε reads.\n- `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\"` — CDS-class closure gate; F9 (\"Missing `cdd-iteration.md` when triggers fired\") names the gate that blocks closure when `protocol_gap_count > 0` but no iteration artifact exists. CDS.md cites this skill (post-#419) for the per-finding shape; the operational realization in `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` is a pointer to this skill.\n- `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Artifact contract\" → §\"Location matrix\"` — declares the `cdd-iteration.md` file's canonical path in the CDS-class artifact set; the file lives on the artifact-channel and its content shape is governed by this skill.\n- `schemas\u002Fcdd\u002Freceipt.cue` (`#Receipt`) — the typed receipt that carries `protocol_gap_count` and `protocol_gap_refs`. This skill consumes the receipt's `protocol_gap_count` as the cadence-rule input (§3.1).\n- `ROLES.md §4b` — the generic ε doctrine; the authoritative source for the watched-fields invariant, the MCA discipline, and the ε=δ collapse rule. The cadence rule (`required only when protocol_gap_count > 0`) is inherited from §4b.4.\n- [cnos#335](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F335) — INDEX.md aggregator bootstrap empirical anchor.\n- [cnos#364](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F364) — first cycle in the steady-state INDEX.md every-cycle period.\n- [cnos#401](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F401) — courtesy empty-findings stub convention empirical anchor.\n- [cnos#404](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F404) — parent tracker (handoff\u002Fcoordination extraction wave).\n- [cnos#419](https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fissues\u002F419) — the codification cycle for this surface (Sub 5 of cnos#404).\n\n---\n\n## 9. Non-goals\n\n- This skill does NOT redesign the per-finding shape. The six top-level fields (`Source` \u002F `Class` \u002F `Trigger` \u002F `Description` \u002F `Root cause` \u002F `Disposition`) and the per-disposition sub-fields are preserved verbatim from the pre-migration canonical home (`cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b`). Future tightening is a follow-on cycle.\n- This skill does NOT redesign the INDEX.md row format. The eight pipe-separated columns (`Cycle | Issue | Date | Findings | Patches | MCAs | No-patch | Path`) are preserved verbatim. Future tightening (e.g., adding a sub-cycle suffix column, separating same-cycle from cross-repo patch counts) is a follow-on cycle.\n- This skill does NOT modify `.cdd\u002Fiterations\u002FINDEX.md` content. The file's existing rows stay where they are; only the standard close-out row for this cycle is added (per the artifact-channel cycle close-out rule and the post-release §5.6b pointer this skill now governs).\n- This skill does NOT own the role-local authoring procedure. Which session writes the artifact, the close-out gate ordering, the ε=δ collapse rule for the current operating point — those live in `cnos.cdd\u002Fskills\u002Fcdd\u002Fpost-release\u002FSKILL.md §5.6b` (cdd-side runbook, now pointer) and `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md` (ε role-local).\n- This skill does NOT own the CDD-specific gap-class names (`cdd-skill-gap` \u002F `cdd-protocol-gap` \u002F `cdd-tooling-gap` \u002F `cdd-metric-gap`). Those live in `cnos.cdd\u002Fskills\u002Fcdd\u002Fepsilon\u002FSKILL.md §1`. The `Class:` slot in this skill's per-finding shape is protocol-agnostic; the values are consumer-specific.\n- This skill does NOT own the cross-repo bundle composition (LINEAGE.md schemas; STATUS state machine; feedback-patch format; archival rule). Those live in `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. This skill names the trigger (a `patch-landed` finding with `Cross-repo` target); cross-repo names the bundle.\n- This skill does NOT own the polling primitives or harness substrate. Those live in `cnos.cdd\u002Fskills\u002Fcdd\u002Fharness\u002FSKILL.md §5.4` and `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Coordination surfaces\" → §\"Polling primitives\"`. This skill is an artifact-surface for a cross-cycle stream; the read mechanism (how ε polls the aggregator across cycles) is harness-side.\n- This skill does NOT lift the per-finding shape or the INDEX row format into a typed schema (e.g. `schemas\u002Fhandoff\u002Fiteration-finding.cue` \u002F `schemas\u002Fhandoff\u002Fiteration-index.cue`). The Markdown invariants are the v0.1 canonical rendering; a typed schema is deferred per the extraction-map.md §6 note (Sub 3's Q2 ruling precedent — schema stays Markdown for v0.1). Re-evaluate if a downstream consumer (CCNF-O Track A; `cn cdd verify`; cross-repo bundle validators) needs a typed shape.\n\n---\n\n## 10. Kata\n\n### Scenario\n\nγ has just closed a cycle. β has merged the cycle branch to main; α and β close-outs are on main. γ has filed `gamma-closeout.md`. The cycle's receipt at `.cdd\u002Funreleased\u002F{N}\u002Freceipt.yaml` carries `protocol_gap_count: 2` with two refs naming `cdd-skill-gap` findings surfaced during review.\n\n### Expected reasoning\n\n1. **Cadence check (§3.1).** The receipt has `protocol_gap_count > 0` (specifically, 2). The per-cycle iteration artifact is **required**, not optional. γ MUST author `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` and MUST append one INDEX.md row.\n\n2. **Per-finding authoring (§1).** γ opens `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` and writes one F1 \u002F F2 section per finding. Each section carries the six top-level fields verbatim per the per-finding shape:\n   - `Source:` names the artifact + section (e.g. `β-review §3 R1`).\n   - `Class:` is `cdd-skill-gap` (per the receipt's refs).\n   - `Trigger:` names the CDS §\"Assessment\" trigger that fired (e.g. \"mechanical ratio > 20% with ≥ 10 findings\" if applicable).\n   - `Description:` one paragraph of cycle-local detail.\n   - `Root cause:` one paragraph naming the unmet invariant.\n   - `Disposition:` one of `patch-landed` \u002F `next-MCA` \u002F `no-patch`. γ picks based on whether the patch shipped this cycle, is deferred to a follow-on, or is closed with explicit no-patch reason.\n\n3. **Per-disposition sub-fields (§1).** For each finding:\n   - If `patch-landed`: γ records the commit SHA \u002F file path under `Patch:`, names the affected skill file\u002Fsection under `Affects:`, and (if cross-repo) names the target-repo + PR under `Cross-repo:`.\n   - If `next-MCA`: γ files the issue (e.g. `gh issue create`), records the issue number under `Issue filed:`, and pins the `First AC:`.\n   - If `no-patch`: γ records the `Reason:` per `cnos.cds\u002Fskills\u002Fcds\u002FCDS.md §\"Closure\" → §\"Closure rule\"`.\n\n4. **Aggregator row (§2).** γ opens `.cdd\u002Fiterations\u002FINDEX.md` and appends one row:\n   ```\n   | N | #N | YYYY-MM-DD | 2 | P | A | Z | .cdd\u002Funreleased\u002FN\u002Fcdd-iteration.md |\n   ```\n   where P + A + Z = 2 (the consistency check per §2). γ commits both files in the same commit (typical pattern: the γ-closeout commit also carries the iteration artifact + INDEX row).\n\n5. **Cross-repo bundle (§6).** If any finding had `Disposition: patch-landed` with a `Cross-repo:` target, γ creates a bundle at `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F` per `cnos.handoff\u002Fskills\u002Fhandoff\u002Fcross-repo\u002FSKILL.md`. The bundle's LINEAGE.md names the source-side patch + the destination-side PR.\n\n6. **Release-time move (artifact-channel §2.4.2).** Before γ requests the tag from δ, γ moves `.cdd\u002Funreleased\u002F{N}\u002F` → `.cdd\u002Freleases\u002F{X.Y.Z}\u002F{N}\u002F` (or `.cdd\u002Freleases\u002Fdocs\u002F{ISO-date}\u002F{N}\u002F` for docs-only releases). The `cdd-iteration.md` file rides the move; the INDEX.md row's `Path` column is updated to reflect the new path in a subsequent close-out commit if not already pinned at write time.\n\n### Common failures\n\n- γ writes `cdd-iteration.md` but forgets the INDEX row — ε's pattern-detection across cycles skips this cycle when scanning the aggregator. CDS gate F9 catches this.\n- γ writes the INDEX row but the per-finding shape diverges (e.g. uses `Status:` instead of `Disposition:`; uses a new class name not in the four-value vocabulary). ε's class-by-class scan across cycles breaks.\n- γ writes a `no-patch` disposition without a `Reason:` — closure rule is violated; the silence is not an acceptable disposition.\n- γ writes a courtesy stub (`protocol_gap_count == 0`) and labels it \"iteration complete\" with the no-findings result *despite* there being findings. The survivorship-bias ambiguity re-emerges; ε cannot distinguish clean cycles from skipped triage.\n- A `patch-landed` finding with a `Cross-repo:` target lands without the bundle at `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F`. The patch's lineage is lost when the source-side bundle archives.\n\n### Verification\n\n- `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` exists if `protocol_gap_count > 0`.\n- `.cdd\u002Fiterations\u002FINDEX.md` has one new row for cycle N with the eight columns populated.\n- For each finding, the six top-level fields are present + the per-disposition sub-fields are present.\n- `Findings = Patches + MCAs + No-patch` in the INDEX row (M = P + A + Z).\n- For each `patch-landed` + `Cross-repo` finding, `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F` exists with the bundle.\n\n### Reflection\n\nA second γ reading the cycle's record across cycles (via `.cdd\u002Fiterations\u002FINDEX.md` row-by-row) should be able to surface protocol-gap patterns no single cycle could surface — e.g., \"five cycles in a row had `cdd-skill-gap` findings against `review\u002FSKILL.md §3.13`; the skill is underspecified and needs a patch\". The receipt-stream is the cross-cycle learning signal; without it, ε would have to re-derive cycle context from gh logs and per-cycle assessment files for every triage. The artifact-channel carries the per-cycle record; the receipt-stream carries the cross-cycle pattern surface.\n\n---\n\n**End of skill.**\n",{"name":5,"calls":44,"scope":48,"inputs":49,"parent":29,"outputs":53,"requires":57,"triggers":60,"visibility":31,"description":7,"kata_surface":25,"artifact_class":68,"governing_question":69},[45,46,47],"HANDOFF.md","artifact-channel\u002FSKILL.md","cross-repo\u002FSKILL.md","task-local",[50,51,52],"closing cycle with γ-closeout filed","cycle's receipt with `protocol_gap_count` populated","α \u002F β \u002F γ close-out artifacts on main",[54,55,56],"per-cycle iteration artifact at `.cdd\u002Funreleased\u002F{N}\u002Fcdd-iteration.md` (or courtesy stub)","one new row in `.cdd\u002Fiterations\u002FINDEX.md`","cross-repo trace bundle at `.cdd\u002Fiterations\u002Fcross-repo\u002F{counterpart-repo}\u002F{slug}\u002F` when a finding lands a cross-repo patch",[58,59],"γ close-out is filed","cycle's receipt is final (`protocol_gap_count`, `protocol_gap_refs` populated)",[5,61,62,63,64,65,66,67],"cdd-iteration","INDEX.md","aggregator","protocol_gap_count","courtesy stub","per-finding shape","ε feed","skill","How does the protocol carry its own learning signal across cycles — through a per-cycle iteration artifact (with a fixed per-finding shape) and a cross-cycle aggregator (with a fixed row format) — so that ε can read the receipt stream and surface protocol-gap patterns no single cycle can surface?","main","fb527e6c4bfb75c71fa75d6471b3aa3da32106d4","src\u002Fpackages\u002Fcnos.handoff\u002Fskills\u002Fhandoff\u002Freceipt-stream",0,"https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos","https:\u002F\u002Fgithub.com\u002Fusurobor","Coherence engineer. Building git-CN.","2026-11-07 14:25:44",{"source":8,"skillName":5,"commands":79,"prompt":89,"zipAvailable":90},[80,83,86],{"tool":81,"command":82},"npx","npx skills add usurobor\u002Fcnos --skill receipt-stream",{"tool":84,"command":85},"bunx","bunx skills add usurobor\u002Fcnos --skill receipt-stream",{"tool":87,"command":88},"pnpm","pnpm dlx skills add usurobor\u002Fcnos --skill receipt-stream","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fblob\u002Fmain\u002Fsrc\u002Fpackages\u002Fcnos.handoff\u002Fskills\u002Fhandoff\u002Freceipt-stream\u002FSKILL.md",true,[],[93,108,123,151,167,185],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":39},"01M6CF8RWQPM0VXZG06XMR0FFX","issues\u002Ftriage","Issue triage doctrine pointer. Use when classifying a new issue, deciding dispatch eligibility, or deciding whether to close\u002Fsupersede\u002Fdefer.","https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fblob\u002Fmain\u002Fsrc\u002Fpackages\u002Fcnos.issues\u002Fskills\u002Ftriage\u002FSKILL.md",[],[100,101,102,103,104,35,105,31,26,106,107,21],"triage","issues","issues triage","issue triage","SET","decision","dispatch","issue",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":39},"01M6CF8PJ812DD4APZ3WE8X67B","issues\u002Ftaxonomy","Issue label taxonomy pointer. Use when classifying an issue's kind\u002Farea\u002Fpriority\u002Feffort\u002Fstatus\u002Fprotocol\u002Fdispatch labels, or when the board needs to interpret them.","https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fblob\u002Fmain\u002Fsrc\u002Fpackages\u002Fcnos.issues\u002Fskills\u002Ftaxonomy\u002FSKILL.md",[],[101,115,116,117,118,37,104,119,31,120,26,106,121,107,122],"taxonomy","issues taxonomy","github","status","open","board","github issue","issue labels",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":139,"publishedAt":39},"01M6CF8KBMZ4D0CDJQ3PF1YVTP","issues\u002Fmap","Issue-board (Issue Pivot) generation domain. Use when reasoning about `cn issues map`'s fetch, taxonomy-parse, effort-computation, and render pipeline, or about the board's JSON\u002FHTML output contract.","https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fblob\u002Fmain\u002Fsrc\u002Fpackages\u002Fcnos.issues\u002Fskills\u002Fmap\u002FSKILL.md",[129,134],{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":135,"categoryName":136,"taxonomyType":137,"taxonomyTypeDesc":138},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[101,140,117,141,142,143,104,144,115,119,35,145,146,120,147,148,149,150,26,107],"issues map","reasoning","data","pipeline","api","json","README","edit","interactive","fetch","generated",{"skillNo":152,"name":101,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"publishedAt":39},"01M6CF8CZQH7G7B7RZPANQWR4G","cnos.issues package entrypoint. Use when reasoning about issue taxonomy, the Issue Pivot \u002F issue-board (`cn issues map`), the read-only CDS issue-state evaluator (`cn issues fsm evaluate`), or the current command-dispatch disposition of issue tooling.","https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fblob\u002Fmain\u002Fsrc\u002Fpackages\u002Fcnos.issues\u002FSKILL.md",[],[101,117,157,158,159,38,160,161,162,115,119,35,105,163,146,164,26,165,106,166],"pr","current state","run","state","package","boundary","branch","command","only","cds",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":39},"01M6CF84VCBME6RK8V6HAVDM8Z","mid-flight","Mid-flight γ→in-flight-α rescue channel. Use when γ needs to change a load-bearing fact (pinned axis, scope, AC, blocker) after α has begun coding, when γ edits the cycle's GitHub issue body mid-cycle, or when a spec change lands on origin\u002Fmain while α\u002Fβ polling sessions are in-flight.","https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fblob\u002Fmain\u002Fsrc\u002Fpackages\u002Fcnos.handoff\u002Fskills\u002Fhandoff\u002Fmid-flight\u002FSKILL.md",[],[174,117,175,176,177,178,35,179,180,163,30,28,26,165,106,181,121,182,183,184],"mid flight","change","sessions","file","cache","pin","coordination","up","Legacy","gamma","artifact channel",{"skillNo":186,"name":106,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":194,"publishedAt":39},"01M6CF819GAMEVZN193MSK22DW","Dispatch-time wire-format contract between γ (orchestrator) and α\u002Fβ (workers). Use when γ authors a dispatch prompt for α or β, when δ enriches an under-specified prompt at routing time, or when α reads the implementation-contract block at intake.","https:\u002F\u002Fgithub.com\u002Fusurobor\u002Fcnos\u002Fblob\u002Fmain\u002Fsrc\u002Fpackages\u002Fcnos.handoff\u002Fskills\u002Fhandoff\u002Fdispatch\u002FSKILL.md",[190,193],{"categoryNo":191,"categoryName":192,"taxonomyType":132,"taxonomyTypeDesc":133},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":135,"categoryName":136,"taxonomyType":137,"taxonomyTypeDesc":138},[106,29,195,161,196,197,198,199,35,200,163,30,201,26,202,107,203,22,204,183],"intake","alpha","beta","operator","escalation","template","orchestrator","ready","contracts","delta"]