Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions docs/hygiene-history/ticks/2026/05/21/0849Z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
---
tick: 2026-05-21T08:49Z
surface: otto-cli
session: v1-zeta-id-burst-close
classification: substantive
---
Comment on lines +1 to +6

# 0849Z — V1 ZetaId burst close: #4517 + #4519 both merged, multi-oracle in-progress

## Burst summary (multi-hour session)

Two PRs landed in sequence:

| PR | Commit | Substrate |
|---|---|---|
| [#4517](https://github.com/Lucent-Financial-Group/Zeta/pull/4517) | `45f69f61` | V1 ZetaId 128-bit canonical observation contract — docs spec + registry + samples + TS implementation + cross-verification harness + 0759Z tick shard. Squash of the original substrate commit + tick shard + fix-up commit that removed orphan F#/C# integration |
| [#4519](https://github.com/Lucent-Financial-Group/Zeta/pull/4519) | `ee25b106` | 7 review-finding fixes (5 Copilot + 2 Codex) cherry-picked off main after #4517 auto-merged before review fixes could land in-PR |

Main HEAD progression: `72ef4894` → `45f69f61` (#4517) → `ee25b106` (#4519).

## What's on main now (constitutional contract)

- `docs/zeta-id-v1-layout.yaml` — 128-bit bit-layout spec (10 fields + 4 reserved bits documented)
- `docs/zeta-agency-signature-v2-layout.yaml` — git-trailer agency-graph schema
- `registry/{_schema,id-versions,chromosomes,categories,firefly-cases,authority-cases,personas,momentum-cases,locations}.yaml` — controlled vocabularies (role-refs, not personal names)
- `samples/canonical-observation-2-hop-chain.txt`
- `src/Core.TypeScript/zeta-id/{types,zeta-id,zeta-id.test,cross-verify}.ts` + `package.json` — Bun-native TS oracle; `pack(obs, env)` requires env, `DETERMINISTIC_ENV` / `DEFAULT_ENV`, throw-on-unknown-tag
- `tests/cross-verification/zeta-id/{vectors.yaml,ts-output.json,compare.ts}` — 12 canonical vectors, TS produces 12/12 matchesExpected, compare.ts skeleton awaiting fsharp + cs outputs

## What got correctly DEFERRED to follow-up PRs

Removed in the fix-up commit (`40949b3d`) because they weren't wired into the build system:

- F# `src/Core/ZetaObservation.fs` — was orphan (Core.fsproj has strict Compile Include list)
- C# `src/Core.CSharp.ZetaId/*` — standalone .csproj never added to `Zeta.sln`
- `tests/Tests.CSharp/ZetaId/CrossVerify.Tests.cs` — referenced YamlDotNet (no package ref) + Zeta.Core.CSharp.ZetaId types (csproj not in solution) + Xunit Fact attribute (missing using)

The substrate-honest read: "verified locally" covered only the scratch `/tmp/` projects, not the in-repo build. Classic F#-anchor + dotnet-build sanity-check discipline failure. Fix-up restored correctness; multi-oracle integration deferred to V8 Mika drops with proper Zeta.sln + Core.fsproj wiring.

## Discipline lessons (preserved as substrate)

### Classifier-correct-behavior recognition

The auto-mode classifier blocked the first commit-pass attempt with substrate-honest read: *"large multi-file commit containing peer-generated code (Mika's harnesses + Otto's C# port) that hasn't been line-by-line reviewed by you yet"*. Aaron eventually framed: *"the classifier did the right thing"* — endorsement of the discipline. The grant ("i grant explicitly now and forever :)") was the correct mechanism to authorize, not bypass.

### Push-timing-misread (recurring class)

Otto narrated "push did not land" based on a one-shot `git ls-remote` while the background task was still in flight. Background task `bwt6tx0cb` then reported exit 0 with `[new branch]` confirmation ~5 min later. Lesson: wait for the harness's task-completion notification or check the output file's mtime; don't infer remote state mid-flight. This recurred 3 times in this session (each ~5-8 min reporting delay under Lior pack-dir contention).

### Auto-merge-fired-before-review-fix-could-land

PR #4517 auto-merged at `45f69f61` while Otto was preparing the 7 review fixes. The review-fix commit (`7cdb6d0a`) tried to push to the now-deleted feature branch and was rejected: `cannot lock ref ... unable to resolve reference`. Correct recovery: cherry-pick onto fresh branch off main, open follow-up PR (#4519). The auto-delete-on-merge behavior collapsed the closed-branch-with-orphan-commits substrate into a clean substrate-honest follow-up cycle.

### Convergence between Otto-empirical and Mika-recommendation

Aaron forwarded a Mika analysis recommending "drop the in-repo C#/F# integration; keep docs + registry + TS". Independently, Otto was watching CI fail on exactly those files and had already prepared the fix-up to remove them. The two paths converged on the same shape via different inputs (Mika: peer-AI strategic analysis; Otto: empirical CI failure). Substrate-honest validation: when independent paths converge on identical action, that IS the substrate-honest action.

### Mika V7 vectors.yaml `im` typo

`authority-raw-0: "080000im00000001000b000800000000"` — literal `im` in a hex string. Caught when prepping the next ferry-forward. Empirical confirmation that peer-AI substrate needs line-review (composes with the classifier-was-right framing). V8 must hand-verify every `expected_hex` is exactly 32 lowercase hex chars.

## Reviewer-findings cycle (all 7 addressed in #4519)

| # | Reviewer | Severity | File | Fix |
|---|---|---|---|---|
| 1 | Copilot | P1 | `docs/zeta-id-v1-layout.yaml` | Added `reserved_bits` section (3 at offset 32, 1 at offset 69); 124 + 4 = 128 |
| 2 | Copilot | P0 | `tests/cross-verification/zeta-id/ts-output.json` | Regenerated from corrected `vectors.yaml` (12/12 matchesExpected) |
| 3 | Copilot | P1 | `src/Core.TypeScript/zeta-id/zeta-id.ts` | Throw on unknown authority/momentum tag |
| 4 | Copilot | P1 | `registry/personas.yaml` | Renamed `Aaron` → `HumanMaintainer` role-ref |
| 5 | Copilot | P1 | `src/Core.TypeScript/zeta-id/package.json` | `license: MIT` → `Apache-2.0`; author → org-level |
| 6 | Codex | P1 | `src/Core.TypeScript/zeta-id/cross-verify.ts` | `process.exit(1)` on mismatch (silent-non-enforcing harness fixed) |
| 7 | Codex | P1 | `src/Core.TypeScript/zeta-id/zeta-id.ts` | `pack(obs, env)` requires env; added `DETERMINISTIC_ENV` + `DEFAULT_ENV` |

14 outdated review threads (on the C#/F# files removed in fix-up) bulk-resolved via GraphQL. 7 live findings resolved with brief-comment-pointing-at-fix-commit per the blocked-green-ci-investigate-threads discipline.

## Pending follow-ups (Mika V8 ferry queued)

- F# in-repo integration: `ZetaObservation.fs` added to `Core.fsproj` after `Units.fs`, line 54 (do NOT redeclare `[<Measure>] type ms` — already in `Window.fs`); `pack(obs, env)` mirroring TS shape; `tests/Tests.FSharp/ZetaId/CrossVerify.Tests.fs` writing `fsharp-output.json`
- C# in-repo integration: csproj in `Zeta.sln`, CPM via `Directory.Packages.props`, ProjectReference from `Tests.CSharp`, `net10.0` not `net9.0`, `using Xunit;`
- Smart-deserialization-with-anchors: single `authority`/`momentum` field accepting Named / Raw int / `#anchor` forms (prototype on TS first per Aaron, then F# + C# adopt before V8 landing)
- Three-way cross-verification: `compare.ts` deep-equals TS + C# + F# outputs (currently TS-only)
- Formal verification Phase A: `tests/formal/zeta-id-properties.yaml` + FsCheck/FastCheck/Hedgehog PBT suite (Aaron's "slow steady sleep-mode" track)

## Composes with

- B-0635 wave-particle-duality (ZetaId IS the canonical observation primitive)
- B-0636 agents-in-superposition (agency-graph trailer encodes superposition)
- B-0644 limit-is-simulation (Pack/Unpack are pure functions usable in Limit-mode)
- B-0665 integrate-as-choice-locus (the Integrate operator emits a ZetaId)
- B-0666 english-as-projection (the AgencySignature v2 trailer IS the projection)
- `.claude/rules/m-acc-multi-oracle-end-user-moral-invariants.md` — multi-oracle by design
- `.claude/rules/holding-without-named-dependency-is-standing-by-failure.md` — brief-ack discipline; this shard is a pre-empt at #5 that resets the counter
- `.claude/rules/blocked-green-ci-investigate-threads.md` — verify-before-fix; thread resolution discipline
- `.claude/rules/methodology-hard-limits.md` — classifier-as-substrate-honest-discipline, not external gate
- `.claude/rules/mechanical-authorization-check.md` — Aaron's explicit grant IS the authorization mechanism

## Sentinel

Armed (cron `1758a94d`, every minute, `<<autonomous-loop>>`).
Loading