0d6d5b1324
The drift review found the run handle keying on the blueprint's *content* id, which hashes `doc` fields and every other C23 debug symbol. C29's Id treatment forbids a description influencing an identity, and the repository already carried the right projection unused. The digest now substitutes `blueprint_identity_json`'s debug-symbol-blind projection (#171) for `topology_hash` in the hashed value. `manifest.topology_hash` itself is untouched, so #343's reference semantics and the committed record-line fingerprint both stand. That projection blanks more than descriptions — the render name and node, role, output, tap and gang names — while param openness stays identity-bearing. This is correct rather than incidental: names are non-load-bearing debug symbols (C8/C23), so blueprints differing only in them compute bit-identically and one address is the right answer. The reach is now stated in C22 and in the digest's own doc, together with the one observable consequence: two structurally identical blueprints whose declared tap names differ share a directory while writing differently named tap files, since the write path never prunes (#352). Two code twins the cycle left stale are corrected. `name_gate`'s doc comment still carried the C23 clause this cycle superseded and moved to its sidecar, and the authoring guide claimed a same-identity re-run replaces the directory's contents — it does not, for the same non-pruning reason. Bench is report-only and all five fingerprints are unchanged. `campaign_sweep` reports a peak-RSS NOTICE (+12.8%); the campaign leg is untouched by this cycle and its fingerprint is stable, so nothing is ratified against it here. Routed rather than fixed: #353 — naming authority for one flat namespace is spelled in three crates and the single-run leg has no claim path — filed into the recorded-stream-store milestone, where the container consolidates anyway; a data-identity seam recorded on #320 (a run's identity carries the window, never the data's content, so a corrected archive is a silent overwrite until that store supplies a recording identity); and a second instance of the non-pruning class on #352. The cycle's spec and plan are removed — git-ignored working files, read by the drift review before deletion. refs #311