## Post-Release Assessment — 3.63.0

> Cycle **#301** (CUE-based SKILL.md frontmatter validation in coherence CI — I5). Merged at `b483f36` (β authority per σ's `4a0f678` clarified mid-cycle); release commit `6300081` by β under leaked identity `beta-merge-test@cdd.cnos` (worktree-config inheritance from a non-destructive merge-test worktree; β surfaced as O8 for γ disposition); cycle dir moved per `release/SKILL.md` §2.5a from `.cdd/unreleased/301/` to `.cdd/releases/3.63.0/301/`. β authored close-out (`beta-closeout.md`) at release time and a Pass-2 addendum (`2b4d05a`) post-release surfacing O8/O9/O10 for γ. α authored close-out (`alpha-closeout.md` at `6485a15`) with 10 observations + 5 friction items. **No separate `3.63.0` git tag exists on origin** — the cycle's release was consolidated into the later `v3.64.0` tag (`1d157c7`, β-authored, legacy `v`-prefix shape). All inputs assembled at PRA write time: α close-out, β close-out + Pass-2 addendum, beta-review.md (R1 + R2 + R2 Pass-2), self-coherence.md (R1 + R2 fix-round). γ writes this PRA after β's release commit + close-out per the new sigma `396d998` lifecycle order: β merge → α/β close-outs → γ PRA + triage → δ release-boundary preflight → γ closure → δ tag/deploy.

### 1. Coherence Measurement

- **Baseline:** 3.62.0 — α A-, β A-, γ A-, **level L6** (diff L7; cycle cap L6 by one §9.1 trigger fire — review rounds = 3 — root-caused to a β-side review-base re-fetch gap).
- **This release:** 3.63.0 — α A-, β A-, γ A-, **level L6** (diff L6; cycle cap L6 by two §9.1 trigger fires — loaded-skill miss + avoidable tooling/environment failure — both root-caused to canonical-skill / spec-snapshot drift across release boundaries plus the recurrent δ-env reachability gap).
- **β's provisional CHANGELOG row** (release commit `6300081`): `C_Σ A-, α A-, β A-, γ A-, L6 (cycle cap: L6)`. **γ accepts as-is.** β's release-time scoring is consistent with γ's independent reading; no scoring revision needed. The CHANGELOG row stays at the values β authored.
- **Delta from 3.62.0:**
  - **α** held A-. The cycle's diff was substantial in line count (60 files / +2,612 / −58, dominated by 43 SKILL.md hard-gate frontmatter backfills + the 6 substantive surfaces — schema, script, exceptions JSON, fixtures, CI job, README). α's discipline was high: pre-implementation frontmatter delimiter survey across all 56 SKILL.md before assuming a delimiter-only-line extractor would work; 4-language polyglot re-audit (YAML, CUE, Bash, JSON, Markdown) post-patch; peer enumeration covered Class A (schema-bearing surfaces) + Class B (CI-job peers) explicitly; all 9 ACs evidenced with cross-references to source-of-truth lines; pre-review gate rows 1–10 all evidenced with concrete commit/path citations. Three R1 findings (F1 C-judgment, F2 + F3 A-mechanical) closed in two commits (`171188e` fixes + `55642db` appendix); R2 zero findings; β R2 Pass-2 zero findings against fresh main. Mechanical ratio 67% (2/3) but N=3 well below the §9.1 ten-finding floor — the ratio is noise. F3's recursive-SHA convention was structurally fixed (renamed to "implementation SHA" + a "SHA convention" paragraph documenting that branch HEAD is carried by the polling protocol). The minus reflects three real gaps: F1 (peer-enum miss on body prose in the same file α touched — frontmatter and body are peers within one file), F2 (intra-doc numeric drift across three sites — generated-data value drafted before the script generated it), and the post-merge close-out's O10 false-alarm pattern (α observed a system-reminder showing 28 SKILL.md regressed in cnos.core/cnos.eng; γ verified this against `origin/main` HEAD `1d157c7` and found ZERO regressions — every cnos.core / cnos.eng SKILL.md carries the hard-gate fields). The false-alarm itself is not a defect — α correctly surfaced it factually for γ-triage per the close-out voice rule — but it indicates a session-state-visibility gap (α's harness view diverged from origin/main; α did not re-fetch and check before flagging). Holding A- is "no diff-content drift reached merge + clean structural convention fix on F3"; a strict A would require either a finding-free R1 or a rich self-coherence that pre-empted F1/F2.
  - **β** held A-. β's review process was rigorous: R1 named 3 findings at correct severity (F1 C-judgment scope-narrowed to the touched file with explicit deferral of pre-existing wider rename debt; F2 + F3 A-mechanical with grep-validatable evidence). R2 was clean (0 findings; all three R1 findings verified fixed at the named SHAs). β ran the cycle's own validator locally on the merge tree as a non-destructive merge test before executing the actual merge — the pattern is not yet named in `release/SKILL.md` but is structurally what the spec wants (validate the post-merge state, not just the cycle branch). β's R2 Pass-2 re-evaluation against fresh main was triggered by the new `beta/SKILL.md` Role Rule 1 from cycle #287 (3.62.0) requiring re-fetch before computing the review-diff base; β had not done this for R1/R2 because the rule landed mid-cycle on main and was not auto-loaded into β's session. β re-discovered the rule, applied it correctly in Pass-2, and surfaced the gap as O1+O2 in the close-out for γ-triage. The drop from A would be triggered by stale-snapshot drift, but β recovered fully on Pass-2 (auto-merge clean against `9d6a0fa`; validator green on merge tree; F1–F3 stable under fresh base — content-level, immune to base advance). β's release-flow execution was clean (VERSION/cn.json/cn.package.json triple-stamp; cycle dir move; release commit + RELEASE.md authored end-to-end; β close-out + Pass-2 addendum surfaced three explicit findings for γ — O8 identity drift, O9 tag-push deferral, O10 branch-deletion deferral). The minus is the loaded-skill-snapshot gap (β session loaded `beta/SKILL.md` from `a8e67b7`-base; cycle #287's Role Rule 1 shipped on main mid-cycle to `9d6a0fa`; β did not re-load) — this is the §9.1 loaded-skill-miss trigger; γ patches as immediate output in §6 below.
  - **γ** held A-. The dispatch was high-quality: 2 pre-dispatch correctness-fix issue-body comments (operator-authored, reflecting γ-axis issue-quality discipline) tightened AC4 (JSON exception shape with `reason` + `spec_ref`) / AC6 (`calls` resolution base = package skill root) / AC1 (field stratification: hard-gate / spec-required-exception-backed / optional-defaulted / reserved). γ's own dispatch comment named work-shape `substantial`, dependency note (soft sequencing on #289, no hard blockers), and the explicit Tier 3 skill list. No mid-cycle scope drift; no γ-clarification needed during the cycle's flow (R1 → R2 → R2 Pass-2 ran clean without γ artifact-fact transfer). γ correctly refused the harness pre-provisioned per-role γ branch (`claude/gamma-skill-implementation-Xw8Vu`) and committed all γ artifacts via the cycle / main surface per `CDD.md` §Tracking auth-precondition rule. **One γ-side gap surfaced post-release**: γ initially proposed an option (b) where γ would execute β's deferred merge — this is not in the spec's allowed γ-direct-action list (`gamma/SKILL.md` §2.6 names tag push / CI verification / issue close, not merge). σ's `4a0f678` patch landed within minutes of γ's proposal, clarifying that merge is β's authority, not δ's, and not γ's. γ acknowledged the error openly and withdrew option (b). The error did not damage the cycle: γ caught it before any action was taken; β did the merge correctly under its own authority; sigma's patch is the corrective. **Second γ-side gap, structural**: γ did not surface the v3.62.0 spec change (`beta/SKILL.md` Role Rule 1) to β when 3.62.0 shipped on main mid-cycle, leaving β to discover the new rule via its own re-fetch (the β-side trigger for the R2 Pass-2 re-evaluation). This is the same γ-axis structural gap β surfaced in 3.62.0's PRA — γ did not push spec changes to in-flight β sessions. Two cycles in a row hit the canonical-skill-snapshot drift family on the γ-axis. Holding A- is "no regression from baseline; merge-authority confusion caught and self-corrected; spec-push gap recurs but root-causes to a known mechanical class (canonical-skill snapshot at session-start does not auto-update)"; an A would require both no merge-authority confusion AND a γ-side surface that pushes spec changes to in-flight sessions, which is not achieved.
  - **Level — L6 cycle cap (diff L6).** The diff is L6: it adds a machine-checkable contract for SKILL.md frontmatter and enforces it at CI time. Pre-#301 the LANGUAGE-SPEC §10 named ten well-formedness constraints with no machine check; 30+ of 56 SKILL.md were missing fields the spec called required. Post-#301 the I5 CI gate fails on hard-gate omission, enum violation, broken `calls` target, and unexcepted spec-required-but-exception-backed gaps. The contract is the single source of truth for shape; the script owns the orthogonal mechanism layer; the exception list is the visible degraded path; the README is the operator-facing summary; the fixtures are the regression suite. Each surface has one reason to change. **Not L7**: the gate catches drift at CI push time rather than eliminating its source — frontmatter drift can still happen pre-CI, the validator surfaces it on the next push but does not eliminate the friction class entirely. α's own reading agrees: L6 (β's reading agrees: L6). Cycle execution was L6: two §9.1 triggers fired (loaded-skill miss for β's stale `beta/SKILL.md` snapshot; avoidable tooling/environment failure for the recurrent δ-env reachability gap), both root-caused to canonical-skill-snapshot drift across release boundaries — a structural family that γ now patches as immediate output in §6 below. No diff-level cross-surface drift reached review (F1/F2/F3 were content-level, not cross-surface). Cycle cap = L6 — no D-level finding, no scope drift, no diff-level mechanical errors that the I5 gate this cycle ships would have caught.
- **Coherence contract closed?** Structurally yes. The cycle's diff implements a machine-checkable contract for SKILL.md frontmatter; the cycle's own validator passes against the production tree (56/56) and against the merge tree (verified by β before merge). The I5 CI gate is wired into `.github/workflows/build.yml` with pinned `cue-lang/setup-cue@v1.0.1` + CUE `v0.13.2`; `notify.needs` aggregation includes `skill-frontmatter-check`; `--self-test` covers the four minimum negative cases (missing-hard-gate / bad-enum-scope / broken-calls / missing-required-no-exception) with `.expect` sidecars. The exception ledger is enumerable and shrinkable (43 entries, each with `reason` + `spec_ref`). 46 SKILL.md frontmatter backfills landed in scope (43 hard-gate adds, 2 YAML strict-quoting normalisations, 1 stale cross-package `calls` removal). Cross-reference consistency held in α R2 (F1 prose-rename in scope; F2 numeric drift; F3 SHA convention) and in β R2 Pass-2 (auto-merge clean against fresh main; validator green on merge tree). The cycle is its own integration test: the CI gate added by this cycle would catch the class of frontmatter drift α + β surfaced in close-out (every cnos.core / cnos.eng SKILL.md γ-verified at PRA write time has hard-gate fields, refuting α's O10 false alarm).

### 2. Encoding Lag

| Issue | Title | Type | Design | Impl | Lag |
|-------|-------|------|--------|------|-----|
| ~~#301~~ | infra(ci): CUE-based skill frontmatter validation in coherence CI | feature (P2) | converged | **shipped this release** | — |
| ~~#307~~ | skill(cdd/issue): move issue katas to cnos.cdd.kata package | small-change | converged | **shipped (consolidated into v3.64.0)** | — |
| #286 | Encapsulate α and β behind γ — γ as autonomous in-cycle coordinator | process | converged | not started | growing |
| #285 | CTB-ize cnos.core + cnos.cdd: agent-module model + composition operators | design | in progress | not started | growing |
| #284 | SOUL as agent type: express SOUL as type constraint, not module | design | in progress | not started | growing |
| #281 | Redo writer-package design after SOUL.md migrates to skill form | design | converged | not started | growing |
| #280 | Decide cdd-shape triad-internal comms formally adopts git-only as default | design | in progress | not started | growing |
| #277 | Rewrite SOUL.md to skill form with UIE-V agent loop | docs/process (P1) | converged | not started | growing |
| #275 | CTB Language Spec v0.2 | design | converged | not started | growing |
| #273 | Rebase-collision integrity guard | process (P1) | converged | not started | growing |
| #256 | B4: CI as triadic surface | feature | converged | not started | growing |
| #255 | CDD 1.0 master | tracking | converged | in progress | low |
| #245 | B5: cdd-kata 1.0 | feature | converged | stubs only | growing |
| #244 | kata 1.0 master | tracking | converged | in progress | low |
| #242 | B3: `.cdd/` Phase 1+2 layout | design | converged | not started | low |
| #241 | B6b: DID — triadic identity | design | converged | not started | growing |
| #240 | B6b: CDD triadic protocol | design | converged | partial | low |
| #218 | B8b: cnos.transport.git | design | converged | not started | growing |
| #216 | B7: package-provided commands Phase 4 | feature | converged | not started | growing |
| #193 | Orchestrator runtime | feature | converged | not started | growing |
| #192 | Runtime kernel rewrite | feature | converged | Phase 4 complete | low |

(Older items #190 / #189 / #186 / #181 / #175 / #170 / #168 / #156 / #154 / #153 / #149 / #101 / #100 / #87 remain open and stale; not promoted to the active lag table. New design issues filed during 3.61.x — #292/#293/#294/#295/#296 — remain pending separate triage as flagged in 3.62.0 PRA.)

**Growing-lag count:** 9 (3.62.0 PRA had 9; #301 closed but no new growing-lag items added — #307 was a small-change cycle that shipped without expanding lag). Net direction: flat. The freeze continues to hold the long-stale items steady.

**MCI/MCA balance:** **Freeze continues** — 9 growing-lag items, well over the 3-issue threshold per `post-release/SKILL.md` Step 4.

**Selection note for next cycle:** #286 (Encapsulate α and β behind γ — autonomous in-cycle coordination) remains the natural successor in the derivation chain (#283 → #287 → #286) and was γ's recommended next MCA in the 3.62.0 PRA. Its hard precondition (`cn dispatch` infrastructure cycle) is unchanged and unmoved this release. **γ's recommendation (next cycle):** the 3.63.0 cycle's two §9.1 triggers (loaded-skill miss + δ-env recurrence) both root-cause to *canonical-skill-snapshot drift across release boundaries* — the same family as 3.62.0's β-side stale-`origin/main` gap. The structural fix is a cross-session spec-staleness gate (β + γ re-load canonical CDD/role skills if `origin/main` HEAD has advanced since session start, OR a γ-side surface that pushes spec changes to in-flight β/α sessions). γ patches one half of this as immediate output (§6) by adding a session-start-vs-current-main staleness check to `beta/SKILL.md` and `gamma/SKILL.md`; the other half (γ-as-spec-pusher) is recorded as MCI for next cycle. Alternatively, the small `cn dispatch` infrastructure cycle (operator-side harness, β-axis) is a smaller candidate that would unblock #286.

### 3. Process Learning

**What went wrong.** Three classes of friction surfaced this cycle, two of them recurring from prior cycles:

1. **Canonical-skill snapshot drift across release boundaries** (recurring; same family as 3.62.0's β-axis weakness). β's session loaded `beta/SKILL.md` from the session-start snapshot at base `a8e67b7`. Cycle #287's `beta/SKILL.md` Role Rule 1 (re-fetch `origin/main` synchronously before computing the review-diff base for each pass) shipped on main mid-cycle to `9d6a0fa`, was not auto-loaded into β's session, and β did not re-load. β R1 + R2 reviews therefore ran against a stale `origin/main = a8e67b7`. β re-discovered the rule independently between R2 and the merge, ran a Pass-2 re-evaluation against fresh main `9d6a0fa`, and confirmed APPROVAL stands. β surfaced the gap as O1+O2 in close-out for γ-triage. **Same root family on the γ-axis**: γ's session loaded `gamma/SKILL.md` from session-start snapshot. σ's `4a0f678` ("merge is β authority, not δ") shipped on main mid-cycle and was not auto-loaded; γ proposed an option (b) where γ would execute β's deferred merge — not in the spec's allowed γ-direct-action list. γ caught the error openly, withdrew the proposal, and acknowledged σ's patch as the corrective. Both the β-side and γ-side gaps trace to the same mechanical class: *canonical role-skills are loaded once at session start; spec changes that ship to main during an in-flight cycle do not auto-propagate.* Two cycles in a row (3.62.0 + 3.63.0) hit this family on different surfaces.

2. **β-side worktree-config inheritance leaking to shared repo config — identity drift on `b483f36` + `6300081`** (new; close-out O8). β created two throwaway worktrees under `/tmp/cnos-merge*/wt` for non-destructive merge tests (a discipline pattern β already explicitly endorses). Each worktree configured `git config user.name beta-merge-test` / `user.email beta-merge-test@cdd.cnos`. **On this harness, `git config user.name X` without an explicit scope flag in a worktree wrote to the shared repository config in `/home/user/cnos/.git/config`, not to the worktree-local config.** The next `git commit` in `/home/user/cnos` used the leaked identity. β did not re-assert the canonical identity before the merge (β's pre-merge gate has no identity-truth row, even though α's pre-review gate now has one per the 3.62.0 PRA's MCA). Result: the merge commit `b483f36` and the release commit `6300081` are both authored as `beta-merge-test <beta-merge-test@cdd.cnos>` instead of `beta <beta@cdd.cnos>`. The work is correct; only the author/committer metadata is wrong, and only on those two commits. β's later release-cycle close-out commits (`2b4d05a`) and the v3.64.0 release commit (`1d157c7`) are correctly authored as `beta` after β re-asserted identity. **γ disposition (recorded here, executed in §6 below):** the audit-trail anomaly is bounded to the two named commits and is git-observable via `git log --format='%an' main`; β's Pass-2 close-out is the explicit β-side record. γ's disposition is **leave-as-is** — force-pushing main to amend two commit metadatas would (a) require operator authorization, (b) risk rebase-collision damage on any in-flight reviewer's local main, and (c) destroy more audit trail than it would clean (the leaked identity *is* itself the surfaced finding; the close-out + this PRA are the durable record). The skill patch *prevents recurrence* (β pre-merge gate adds an identity-truth row matching α's), which is the more useful intervention than retroactive metadata cleanup.

3. **δ-environment reachability gap recurs** (third cycle in a row — 3.61.0, 3.62.0, 3.63.0). β's session cannot reach `api.github.com` (HTTP 403 on check-runs, workflow-runs, and tag-push endpoints) and cannot push remote branch deletions. Tag push, release CI verification, and branch cleanup all defer to δ via the `release/SKILL.md` §β step 8 deferral path. The recurrence is not a per-cycle defect but a stable harness constraint that the spec already accommodates — but β is repeatedly surfacing it as if it were new in each close-out. The spec's accommodation language could be cleaner; the operator has a stable `δ-equivalent surface` (this session, with a different harness reachability profile, can do these actions) that is not formally named.

**What went right.**

1. **The cycle's own validator is its integration test.** β ran `./tools/validate-skill-frontmatter.sh` on the merge tree before merge as a non-destructive merge test (cited in β R2 verdict). Pattern: validate the post-merge state, not just the cycle branch. Worth naming in `release/SKILL.md` so β doesn't have to invent it each cycle.
2. **F3's structural fix.** α's R2 fix didn't just patch the three "head SHA" sites — α renamed the convention to "implementation SHA" and added a "SHA convention" paragraph documenting that branch HEAD is carried by the polling protocol, not by the inline value. The recursive-self-stale class is *eliminated* for any future α self-coherence, not just for #301.
3. **α's pre-implementation discipline.** Frontmatter delimiter survey across all 56 SKILL.md before assuming a delimiter-only-line extractor would work; 4-language polyglot re-audit (YAML, CUE, Bash, JSON, Markdown) post-patch; Class A + Class B peer enumeration walked explicitly. The two YAML strict-quoting normalisations (`cdd/design/SKILL.md`, `cdd/gamma/SKILL.md`) were latent ambiguities that PyYAML accepted but CUE rejected — α surfaced the class explicitly as O5 ("strict parser surfaces latent YAML ambiguity") rather than silently fixing.
4. **Issue-quality gate caught the contradictions before dispatch.** The operator's two pre-dispatch correctness-fix comments on the issue tightened AC4 / AC6 / AC1 stratification so α had a coherent contract to implement. Post-merge, α's own O4 ("non-goal vs hard-gate-AC strict gate — a forced reading") shows the contract was still not fully reconciled — α had to author a narrow reading without surfacing it back to γ. The pre-dispatch fixes were necessary but not sufficient; γ's issue-quality gate has a structural gap on contradiction-resolution-not-stated-back.

**Skill patches landed in this commit (CDD step 13a):**

1. **`beta/SKILL.md` § pre-merge gate row** — *identity-truth row*, parallel to α's pre-review gate row 11 (added in 3.62.0 PRA's immediate output). Verifies `git config user.email` matches `{role}@cdd.{project}` (i.e., `beta@cdd.cnos`) before any merge or release commit. Catches the worktree-config inheritance class (#301 O8) and the session-start identity drift class (#287 R1 F3) symmetrically across α and β.
2. **`beta/SKILL.md` + `gamma/SKILL.md` § session-start canonical-skill staleness check** — at intake (after `git fetch --verbose origin main`), if `origin/main` HEAD has advanced beyond the session-start snapshot of canonical CDD/role skills, **re-load** those files synchronously before proceeding. Catches the loaded-skill-snapshot drift class symmetrically (#301 β-axis loaded-skill miss, #301 γ-axis merge-authority confusion, #287 / 3.62.0 β-side stale-`origin/main` family).
3. **`release/SKILL.md` § non-destructive merge-test pattern** — name β's `./tools/validate-skill-frontmatter.sh` on merge tree pattern as a documented step (not a discipline β reinvents per cycle). Pattern: build the merge tree in a throwaway worktree, run the cycle's own validator on it, confirm green before executing the merge on main. Surfaces conflicts, regression on the contract being shipped, and any drift between cycle branch and current main.

(Patches land in the same commit as this PRA per `post-release/SKILL.md` §3 step 13a "the patch must land in the same commit as the assessment, synced across all affected surfaces.")

**Active skill re-evaluation (per review finding):**

| Finding | Loaded skill | Underspecified or application gap? | Disposition |
|---|---|---|---|
| F1 (release/SKILL.md prose `writing` → `write`) | `cdd/alpha/SKILL.md` §2.3 (intra-doc grep rule) | Application gap — rule covers prose surfaces in the same file; α's peer-enum treated frontmatter as the only surface | Note (α O1 frames the lesson; no skill patch needed) |
| F2 (numeric drift "45 → 43") | `cdd/alpha/SKILL.md` §2.3 (intra-doc repetition rule) | Application gap — rule already in place; α drafted before applying it | Note (α O2 names the lesson) |
| F3 (recursive head-SHA convention) | `cdd/alpha/SKILL.md` §pre-review-gate or readiness-signal section | Underspecified — no skill says "an artifact that names this commit by SHA inline is recursively self-stale" | **Skill patch candidate, deferred to next cycle**: `alpha/SKILL.md` should document the two stable conventions (implementation-SHA or omit-SHA-let-polling-carry-HEAD); not patched in this PRA because the §6.3 immediate outputs are already stretched across two role skills + release skill. Filed as MCA candidate. |
| §9.1 trigger 1 (loaded-skill miss for β stale `beta/SKILL.md`) | `cdd/beta/SKILL.md` § skill-load section | Underspecified — no rule on re-load when main advances mid-cycle | **Patched** (immediate output #2 above) |
| §9.1 trigger 2 (avoidable tooling/env failure — δ env reachability) | `cdd/release/SKILL.md` + `cdd/operator/SKILL.md` (deferral path) | Already covered — the spec accommodates δ-deferral; the recurrence is not a defect | No patch (the gap is that the recurrence keeps showing up in close-outs as if novel — γ documents the recurrence pattern in this PRA so future close-outs can short-cut to "deferred per spec, no §3 entry") |
| O8 (worktree-config inheritance leak to shared repo config) | `cdd/beta/SKILL.md` § pre-merge gate | Underspecified — no identity-truth gate before merge | **Patched** (immediate output #1 above) |

**CDD improvement disposition:** patches landed in this commit (#1 + #2 + #3 above). One patch deferred to next cycle (F3 convention rule for α). No "no patch needed" justification — every fired §9.1 trigger has an explicit disposition and the recurring families have structural fixes.

### 4. Review Quality

- **Cycles this release:** 1 (#301).
- **Review rounds:** 2 numbered + 1 Pass-2 re-evaluation (R1 RC + 3 findings; R2 APPROVED 0 findings; R2 Pass-2 re-evaluation against fresh `origin/main = 9d6a0fa` after #287's Role Rule 1 was discovered — APPROVAL stands, 0 new findings). **Within target** (≤2 for code cycles; the Pass-2 was a re-application of a newly-discovered spec rule, not a third review iteration; β's own scoring per-pass is R1 → R2 → APPROVED, with Pass-2 as a confirmatory re-application).
- **Superseded cycles:** 0 (target: 0).
- **Finding breakdown:** 3 total — F1 judgment, F2 mechanical, F3 mechanical. **Mechanical ratio: 67%** (2/3). **Below the 10-finding threshold** for filing a process issue; ratio noted but no filing required per `post-release/SKILL.md` §5.5.
- **Action:** none filed. The two mechanical findings (F2 numeric drift, F3 SHA recursion) both root-cause to "drafted before the value was generated/stable," which is already covered by α's intra-doc repetition rule and post-patch re-audit — application gaps, not missing rules. F1's body-prose peer-enum miss is also an application gap (the intra-doc grep rule applies within a file). No new pre-flight check needed.

### 4a. CDD Self-Coherence

- **CDD α (artifact integrity): 4/4** — all required artifacts present (`self-coherence.md` with gap, mode, AC mapping, CDD Trace through step 7a; pre-review gate rows 1–10 evidenced; α + β close-outs both authored; β review record carries R1 + R2 + R2 Pass-2; cycle dir moved to `.cdd/releases/3.63.0/301/` per §2.5a). 9 ACs evidenced with cross-references. No bootstrap required (this cycle is a process/CI cycle, not a frozen-snapshot release of a doc bundle).
- **CDD β (surface agreement): 3/4** — canonical `CDD.md`, executable role skills, cycle-dir artifacts, CHANGELOG row, and this assessment all agree on the cycle's diff-content + scoring. **One disagreement surfaced**: the v3.64.0 git tag uses the legacy `v`-prefix shape (`CDD.md` §5.3a names bare X.Y.Z as canonical and `v`-prefixed as warn-only), and there is no separate `3.63.0` git tag — cycle #301's release was consolidated into the later v3.64.0 release boundary. The CHANGELOG keeps a discrete `3.63.0` row; the VERSION file went `3.62.0 → 3.63.0` (cycle #301's release commit `6300081`) → `3.64.0` (consolidated release commit `1d157c7`). Tag-shape and tag-vs-CHANGELOG mismatch are δ-side release-boundary findings (γ records them for δ preflight; γ does not act on tag policy without operator authorization since tag-shape policy may be intentionally evolving).
- **CDD γ (cycle economics): 3/4** — review rounds within target (2 numbered); superseded cycles 0; mechanical ratio noted; immediate outputs being executed in this commit; deferred outputs committed. **The minus**: γ's two own gaps (merge-authority confusion + spec-staleness-not-pushed-to-β) cost a small economics tax — the merge-authority confusion was caught and corrected before action so it didn't damage the cycle, but the structural "γ should push spec changes to in-flight β/α sessions" gap is real and recurring (3.62.0 + 3.63.0).
- **Weakest axis: β (3/4) and γ (3/4) tied** — both surface agreement (β-axis tag/release-boundary mismatch) and cycle economics (γ-axis spec-staleness-not-pushed) at 3/4.
- **Action:** patch skills (immediate outputs #1 + #2 + #3 in §3 above). No documentation patches required beyond the role-skill files.

### 4b. Cycle Iteration

**Two §9.1 triggers fired this cycle.** Per `post-release/SKILL.md` §5.6a, this section is mandatory.

**Trigger 1: Loaded-skill miss.**
- **Trigger fact:** β's session-loaded `beta/SKILL.md` (snapshot at session start) lacked the cycle #287 Role Rule 1 (re-fetch `origin/main` synchronously before computing the review-diff base). The rule shipped on main mid-cycle as part of v3.62.0; β did not re-load. β R1 + R2 ran against stale `origin/main = a8e67b7`. β re-discovered the rule independently between R2 and the merge and ran a Pass-2 re-evaluation against fresh `9d6a0fa`. Pass-2 confirmed APPROVAL stands (no new findings; F1–F3 stable under fresh base because they are content-level).
- **Symmetric γ-axis instance:** γ's session-loaded `gamma/SKILL.md` lacked σ's `4a0f678` clarification ("merge is β authority, not δ"). γ proposed an option (b) that allowed γ to execute β's deferred merge — not in the spec's allowed γ-direct-action list. γ caught the error before any action; sigma's patch is the corrective.
- **Root cause:** canonical CDD/role skills are loaded once at session start; spec changes that ship to main during an in-flight cycle do not auto-propagate. The mechanical class is "snapshot-at-session-start drift across release boundary."
- **Disposition: patch landed now.** Immediate output #2 in §3 above adds a session-start canonical-skill staleness check to `beta/SKILL.md` and `gamma/SKILL.md`.
- **Evidence:** the skill-patch commit (this commit; see §6.3 below for SHA after push).

**Trigger 2: Avoidable tooling / environmental failure.**
- **Trigger fact:** β's environment cannot reach `api.github.com` (HTTP 403 on check-runs, workflow-runs, and tag-push endpoints) and cannot push remote branch deletions. Tag push, release CI verification, and branch cleanup all defer to δ via the `release/SKILL.md` §β step 8 deferral path. Recurs from 3.61.0 / 3.62.0 (third cycle in a row).
- **Subsidiary surface (α-side, F-α-2):** CUE was not pre-installed on α's dev environment. α fetched `v0.13.2` from upstream and staged it under `/usr/local/bin/cue`. Friction is small (one-time, ~30s) but logged because future α work in this surface area depends on the same setup.
- **Root cause:** the agent harness's network reachability profile does not match the work the role is asked to do. δ-equivalent tag push and remote branch deletion live on a different harness (the operator's session). The accommodation is real and named in the spec; the recurrence in close-outs is not a defect, it is the spec working as designed.
- **Disposition: no patch with explicit reason.** The spec already accommodates this via the §β-step-8 deferral path. The recurring close-out friction is "β surfaces it as if it were new each cycle"; γ documents the recurrence pattern in this PRA's §3 so future close-outs can short-cut to "deferred per spec, no §3 entry." No spec-level patch is warranted because the spec is correct; the operational note is sufficient.
- **Evidence:** §3 paragraph 3 (β-environment recurrence pattern).

**Independent γ process-gap check (`post-release/SKILL.md` §5.6a step 13).** Even with two triggers fired, γ asks: did this cycle reveal a process gap the triggers don't cover? Yes — one:

- **γ-as-spec-pusher gap (γ-axis structural).** γ does not have a surface that pushes spec changes to in-flight β/α sessions when canonical CDD/role skills update on main. β + γ both load skills at session start; subsequent main updates are silent from the loaded skill's perspective. The §9.1 loaded-skill-miss trigger catches this on the *β/γ-side reactive* path (the role detects its own skill is stale via the new staleness check). The *γ-side proactive* path (γ pushes "spec X.Y just changed; please re-load") is not in the spec.
- **Disposition: next MCA, not patched in this PRA.** A γ-side spec-push surface is a new γ skill section + a new dispatch-time obligation, which is bigger than a one-line gate. Better to ship the reactive patch now (immediate output #2) and let one cycle's worth of evidence accumulate before designing the proactive patch.
- **Evidence:** noted in §7 Next Move below as MCI.

### 5. Production Verification

**Scenario:** A new `SKILL.md` is added (or an existing one is edited) under `src/packages/**` with a frontmatter shape that violates the schema — e.g. missing the `governing_question` hard-gate field, or an invalid `scope` enum value, or a static `calls:` target that doesn't resolve to an existing file under the package skill root.

**Before this release:** No CI job parsed SKILL.md frontmatter. The malformed/incomplete frontmatter would land on main with no signal. 30+ of 56 SKILL.md were already missing fields the spec called required, and accumulated silently across cycles.

**After this release:** The `skill-frontmatter-check` (I5) job runs on every push and pull request. It (a) executes `--self-test` (verifies the validator itself is wired correctly via 3 positive + 4 negative fixtures), and (b) runs the full validator over every SKILL.md under `src/packages/**`. Hard-gate field omissions (`name`/`description`/`governing_question`/`triggers`/`scope`) fail with `cue vet`'s `incomplete value` diagnostic. Enum violations fail with `conflicting values`. Broken `calls` targets fail with `calls-target-exists`. Unexcepted spec-required-but-exception-backed fields fail with `required-or-excepted`. The exception ledger at `schemas/skill-exceptions.json` allows pre-existing legacy gaps to remain in scope (43 entries, each with `reason` + `spec_ref`); the ledger is intended to shrink, with the procedure documented in `schemas/README.md`.

**How to verify:**

1. Concrete positive case (γ-verified at PRA write time):
   ```
   $ ./tools/validate-skill-frontmatter.sh
   ✓ 56 SKILL.md validated; no findings.
   ```
   The production tree on `origin/main` HEAD `4700587` (post-#308 merge) passes the validator. Every cnos.core / cnos.eng / cnos.cdd SKILL.md that was claimed regressed in α's O10 false-alarm carries its hard-gate fields.
2. Concrete negative case (via the cycle's own fixtures):
   ```
   $ ./tools/validate-skill-frontmatter.sh --self-test
   3 positive, 4 negative — all pass.
   ```
3. CI surface: GitHub Actions run on every push to `claude/*` and `cycle/*` branches and on every PR to main shows the `skill-frontmatter-check` job under "Build" workflow, with its `success`/`failure` aggregated into the `notify` job's I5 row.
4. Issue-time projection: a new contributor authoring a new `SKILL.md` will see the I5 job fail in their PR if they omit a hard-gate field — the diagnostic names the file, the field, the rule, and the suggested fix per the validator's `path :: field :: rule :: reason :: fix` shape.

**Result: PASS (γ-verified at PRA write time on `origin/main` HEAD `4700587`).** The γ-side validator run reports `✓ 56 SKILL.md validated; no findings`. The CI gate is wired and pinned (`cue-lang/setup-cue@v1.0.1`, CUE `v0.13.2`). The exception ledger holds the legacy debt enumerable and shrinkable. The class of frontmatter drift α + β surfaced in close-out (specifically α's O10 false alarm) is exactly what this gate now catches — and the gate confirms there is no actual drift on the production tree.

### 6. CDD Closeout

| Step | Artifact | Skills loaded | Decision |
|------|----------|---------------|----------|
| 11 Observe | runtime/CI surface; `origin/main` HEAD `4700587`; tag `v3.64.0` (consolidated) | post-release | runtime tree validates against the cycle's own contract; γ ran `./tools/validate-skill-frontmatter.sh` (56/56 green) at PRA write time |
| 12 Assess | `docs/gamma/cdd/3.63.0/POST-RELEASE-ASSESSMENT.md` (this file) | post-release | assessment completed; provisional CHANGELOG row accepted as-is (γ does not revise β's release-time scoring); two §9.1 triggers fired with explicit dispositions |
| 12a Skill patch | `cdd/beta/SKILL.md` (identity-truth row + canonical-skill staleness check); `cdd/gamma/SKILL.md` (canonical-skill staleness check); `cdd/release/SKILL.md` (non-destructive merge-test pattern) | post-release, cdd | patches synced across the role-skill surfaces; one F3-related skill patch (α convention rule) deferred to next cycle |
| 13 Close | `.cdd/releases/3.63.0/301/gamma-closeout.md`; closure declaration commit; merged remote branch sweep | post-release | cycle closed; deferred outputs committed (γ-side spec-push surface as MCI for next cycle); δ release-boundary preflight is the next handoff per σ `396d998` lifecycle order |

### 6a. Invariants Check

The cnos repo does not maintain a single canonical `INVARIANTS.md`; the architectural constraints live distributed across `docs/alpha/DESIGN-CONSTRAINTS.md` (where present), `docs/alpha/ctb/LANGUAGE-SPEC.md` §2 / §10 / §11 (CTB v0.1 skill-module shape), and `CDD.md` §1.4 / §5.3 / §5.3a (lifecycle, artifact contract, location matrix). For this cycle, the invariants touched are:

| Constraint | Touched? | Status |
|---|---|---|
| `CDD.md` §5.3a Artifact Location Matrix (PRA path = `docs/{tier}/{bundle}/{X.Y.Z}/POST-RELEASE-ASSESSMENT.md`; cycle dir post-release = `.cdd/releases/{X.Y.Z}/{N}/`) | yes | preserved (PRA at `docs/gamma/cdd/3.63.0/POST-RELEASE-ASSESSMENT.md`; cycle dir at `.cdd/releases/3.63.0/301/`) |
| `CDD.md` §5.3a tag policy (bare X.Y.Z canonical; `v`-prefix legacy/warn-only) | yes | **violated by `v3.64.0` shape** (δ-side release-boundary finding; recorded for δ preflight) |
| `LANGUAGE-SPEC.md` §2.1 / §10 / §11 (skill-module frontmatter shape) | yes | tightened — now machine-checkable via I5 CI gate |
| `CDD.md` §Tracking dyad-on-one-branch model (β + γ commit to α's cycle branch; refuse harness pre-provisioned per-role branches) | yes | preserved (β refused `claude/implement-beta-skill-loading-BfBkH`; γ refused `claude/gamma-skill-implementation-Xw8Vu`; γ artifacts pushed directly to main this PRA per the post-release pattern of cycle #287) |
| `gamma/SKILL.md` §2.6 γ-direct-action list (tag push, release CI verification, issue close — **not** merge) | yes | preserved (γ withdrew the merge-authority confusion before any action; σ's `4a0f678` patch is the corrective; β did the merge under its own authority) |
| `CDD.md` §1.4 sigma `396d998` lifecycle order (β merge → α/β close-outs → γ PRA → δ preflight → γ closure → δ tag/deploy) | yes | preserved with one deviation: β released as part of the merge-into-main flow (β authored release commit `6300081` immediately after merge, before γ wrote the PRA), which matches the *old* lifecycle order. The new order's "γ writes PRA *before* δ tag/release/deploy" is honored by this PRA preceding the v3.64.0 tag's release-CI verification (still pending δ). γ records the cross-spec-version timing as a transitional artifact: cycle #301 was in flight when σ's `396d998` patch landed, so β operated under the old order and γ is operating under the new order. |
| `CDD.md` §5.4 CDD Trace (one row per completed lifecycle step in the primary branch artifact) | yes | preserved (α's `self-coherence.md` carries the trace through step 7a; β's `beta-review.md` carries through step 8–9; this PRA carries through 11–13) |

### 7. Next Move

**Next MCA:** **`cn dispatch` infrastructure cycle (γ recommendation, unfiled)** OR **#286 (Encapsulate α and β behind γ)** if `cn dispatch` is folded into the operator/δ skill set as a manual procedure — same recommendation as 3.62.0 PRA §7, unchanged because no progress was made on the `cn dispatch` precondition this release. Alternatively, **#273 (Rebase-collision integrity guard)** is a smaller candidate that directly addresses the polling-source-vs-truth-source friction family that produced 3.62.0's R1 false positives and 3.63.0's loaded-skill miss.

**Owner:** γ to file the `cn dispatch` issue (or operator decides to skip and pick #286 / #273 / other from the freeze set).

**Branch:** pending issue creation; γ creates `cycle/{N}` from `origin/main` per `CDD.md` §1.4 step 3a once the issue exists.

**First AC:** for `cn dispatch`: a CLI command that takes an issue number and a role (α or β) and spawns the appropriate session with the canonical dispatch prompt, including the `Branch: cycle/{N}` line and the Tier 3 skill list.

**MCI frozen until shipped?** **Yes, freeze continues** — 9 growing-lag items, well over the 3-issue threshold per `post-release/SKILL.md` Step 4. The freeze has held for the past three releases (3.61.0 → 3.62.0 → 3.63.0); no new growing-lag items were added this cycle, but no growing-lag items shipped either (cycle #301 was a feature/process MCA, not a stale-set item). Freeze remains in effect.

**Rationale:** the `cn dispatch` precondition is the smallest unblocker for #286, which is the natural derivation-chain successor to #287 / #283. Without it, γ cannot autonomously dispatch α/β sessions; the harness layer is the limiting factor on cycle throughput. Three release cycles in a row have ended with the same selection note. Either ship `cn dispatch` or fold it into δ's manual procedure formally — the spec already implicitly assumes the operator dispatches sessions, so naming that as δ's responsibility is a small spec patch.

**Closure evidence (CDD §10):**

- **Immediate outputs executed (this commit):**
  - PRA at `docs/gamma/cdd/3.63.0/POST-RELEASE-ASSESSMENT.md` (this file)
  - γ-closeout at `.cdd/releases/3.63.0/301/gamma-closeout.md`
  - Skill patch: `cdd/beta/SKILL.md` § identity-truth row in pre-merge gate (immediate output #1 in §3)
  - Skill patch: `cdd/beta/SKILL.md` + `cdd/gamma/SKILL.md` § session-start canonical-skill staleness check (immediate output #2 in §3)
  - Skill patch: `cdd/release/SKILL.md` § non-destructive merge-test pattern (immediate output #3 in §3)
  - Branch sweep: γ deletes `claude/cnos-alpha-tier3-skills-MuE2P` (cycle branch, merged) and `claude/implement-beta-skill-loading-BfBkH` (β-side pre-provisioned, refused at intake) per `gamma/SKILL.md` Phase 5 step 15 (γ may execute directly when δ is unavailable for branch sweep)
  - Closure declaration commit: empty commit `Cycle #301 closed. Next: cn dispatch infrastructure cycle (γ recommendation)`

- **Deferred outputs (committed as next-cycle work):**
  - **F3 convention rule for α** (`alpha/SKILL.md` § readiness-signal section) — document the two stable conventions for naming a commit SHA in an artifact: name an earlier commit (implementation SHA) or omit the SHA and let polling carry HEAD. Filed as MCA candidate; not patched in this PRA because §6.3 immediate outputs are already stretched across two role skills + release skill. **Owner: next γ session. First AC:** `alpha/SKILL.md` includes a "self-stale SHA convention" subsection with the two stable patterns and an explicit ❌/✅ example.
  - **γ-as-spec-pusher gap** (independent §13 process gap from §4b) — γ does not have a surface that pushes spec changes to in-flight β/α sessions when canonical CDD/role skills update on main. **Owner: next γ session. First AC:** `gamma/SKILL.md` § Phase 1 dispatch step gains a "spec-staleness propagation" subsection naming when γ should push spec-change notifications to in-flight sessions.
  - **`cn dispatch` infrastructure** (γ recommendation, unfiled) — see "Next MCA" above. **Owner: operator (or γ files the issue). First AC:** CLI takes issue number + role and spawns the session with the canonical dispatch prompt.
  - **v3.64.0 / 3.63.0 release-boundary findings** (δ-side preflight items recorded for δ awareness): (a) tag `v3.64.0` uses legacy `v`-prefix shape per `CDD.md` §5.3a (warn-only); (b) no separate `3.63.0` git tag exists despite `3.63.0` having a discrete CHANGELOG row + VERSION-file value; (c) tag `v3.64.0` annotation does not name cycle #301's content despite the tag's history reaching `6300081`. **Owner: δ (operator). First AC:** δ either accepts the consolidated v3.64.0 boundary as the canonical release (with `v`-prefix shape adopted as new convention requiring a CDD §5.3a patch) OR pushes a retroactive bare `3.63.0` tag at `6300081` and a bare `3.64.0` tag at `1d157c7`.
  - **O8 disposition (force-push amend declined)** — γ disposition is **leave-as-is** per §3 paragraph 2 reasoning. The audit-trail anomaly is bounded to two commits (`b483f36` + `6300081`) authored as `beta-merge-test`. β's Pass-2 close-out is the explicit β-side record. The skill patch (immediate output #1) prevents recurrence; retroactive force-push would destroy more audit trail than it would clean. **No owner; closed at this PRA.**

- **Immediate fixes (executed in this session):** all of "immediate outputs executed" above land in the same commit as this PRA per `post-release/SKILL.md` §3 step 13a.

### 8. Hub Memory

**Daily reflection:** **deferred / not applicable.** This γ session does not have access to a `cn-{agent}/` agent hub repository — the harness provides the cnos repo only. The hub memory write surface is named in `post-release/SKILL.md` §7 + `gamma/SKILL.md` Phase 5 step 14 but operates on a separate external repo. γ records the deferral here so the operator can either (a) write the daily reflection from a session that has hub access, (b) accept that this cycle's narrative lives entirely in the PRA + γ-closeout + CHANGELOG row, or (c) extend the harness so γ-as-agent has hub access in this kind of session.

**Adhoc thread(s) updated:** **deferred / not applicable** for the same reason. The adhoc thread that this release advances is the "canonical-skill-snapshot drift across release boundary" thread (3.61.0 → 3.62.0 → 3.63.0, three cycles of recurring β/γ-axis spec-staleness gaps). γ's PRA §3 + §4b documents the cumulative pattern; the immediate-output skill patches are the structural fix; the deferred γ-as-spec-pusher gap is the next layer. Without hub access, γ cannot write the thread update; the PRA itself is the durable narrative for now.

**Operator note:** the missing hub memory is a γ-side cycle-economics gap (PRA §4a γ-axis 3/4 contributing factor). The fix is one of: (a) extend the agent harness so γ sessions have hub access, (b) reassign hub-memory writes to a different role/agent that has access, or (c) accept hub-memory as deferred for agent-only γ sessions and require operator-or-other-agent follow-through. γ does not pick — operator authorizes.


