Skip to content

docs(adr): accept ADR-0031 — canonical song identity (schema v10) - #164

Merged
PhysShell merged 1 commit into
mainfrom
claude/accept-adr-0031
Jul 28, 2026
Merged

docs(adr): accept ADR-0031 — canonical song identity (schema v10)#164
PhysShell merged 1 commit into
mainfrom
claude/accept-adr-0031

Conversation

@PhysShell

@PhysShell PhysShell commented Jul 28, 2026

Copy link
Copy Markdown
Owner

What

Flip ADR-0031 (canonical song identity, schema v10) from Proposed → Accepted, per governance review. Docs-only, status line only.

Diff is exactly two lines:

  • docs/adr/0031-canonical-song-identity.mdStatus: ProposedAccepted
  • docs/adr/README.md — the ADR-0031 row status

No semantic edits ride along: under ADR-0009 an Accepted ADR is immutable and is superseded by a new one, not edited. Not appended to decisions.log.md (reserved for ADRs).

Why now

The decision is fully specified — identity hierarchy (song_id=Work, sha256=source manifestation, EnsembleRef=span, ChunkId=chunk), curator authority with no automatic/similarity backfill, cover/arrangement/edition semantics, corpus-wide fail-closed song-holdout, per-sha256 consistency + bidirectional manifest invariants, and explicit exclusions (no scoring, no cover detection, no silent unknown identities). No unresolved architectural question remains.

What this gates

Acceptance unblocks PR D (implementation-only): schema v10 + SongId newtype + SourceRef.song_id: Option<SongId> + pre-v10 round-trip characterization + corpus-wide HoldoutTargetSong preflight + per-sha256 consistency + optional songs-manifest bidirectional validation + typed refusals.

Explicitly out of scope here and in PR D: song_id curation/backfill, production corpus cutover, track_index recovery, title-based grouping, generation/scoring changes.

🤖 Generated with Claude Code

https://claude.ai/code/session_012T7SRMiXmZe5v1imtrKMPi

Summary by CodeRabbit

  • Documentation
    • Updated ADR 0031’s status from Proposed to Accepted in the decision record and ADR index.

Status: Proposed → Accepted, per governance review. No semantic edits —
under the repository's ADR rules (ADR-0009) an Accepted ADR is immutable;
supersede it with a new one rather than editing.

The decision specifies the identity hierarchy (song_id = Work, sha256 =
source manifestation, EnsembleRef = span, ChunkId = chunk), curator
authority with no automatic/similarity-derived backfill, cover/arrangement/
edition semantics, corpus-wide fail-closed song-holdout coverage, per-sha256
consistency + bidirectional manifest invariants, and explicit exclusions
(no scoring authority, no cover detection, no silent unknown identities).

This gates PR D (v10 song_id implementation). Not appended to
decisions.log.md, which reserves architectural decisions for ADRs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012T7SRMiXmZe5v1imtrKMPi
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a04794a1-f0d1-4af8-9b7f-ca5b08fb8792

📥 Commits

Reviewing files that changed from the base of the PR and between cc31125 and 5ce4c58.

📒 Files selected for processing (2)
  • docs/adr/0031-canonical-song-identity.md
  • docs/adr/README.md

📝 Walkthrough

Walkthrough

ADR-0031 status is changed from Proposed to Accepted in both the ADR document and the ADR index.

Changes

ADR-0031 status update

Layer / File(s) Summary
Update ADR-0031 status
docs/adr/0031-canonical-song-identity.md, docs/adr/README.md
Changes ADR-0031’s status from Proposed to Accepted in its metadata and index entry.

Estimated code review effort: 1 (Trivial) | ~2 minutes

Possibly related PRs

Suggested reviewers: claude

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: accepting ADR-0031 for canonical song identity.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/accept-adr-0031

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@PhysShell
PhysShell merged commit c4e2f04 into main Jul 28, 2026
15 checks passed
@PhysShell
PhysShell deleted the claude/accept-adr-0031 branch July 28, 2026 19:50
PhysShell added a commit that referenced this pull request Jul 29, 2026
Tests only, ahead of any implementation (per AGENTS.md per-commit TDD and
the corpus_schema.rs "fail to compile until implemented" precedent). This
commit does not compile until the v10 types land in the GREEN commit.

Drives schema v10 (ADR-0031, Accepted #164):
- schema-version assertion bumped to 10;
- SourceRef.song_id round-trip + both pre-v10 lossless characterizations
  (SPEC hard rule 5);
- CorpusManifest.songs as Option (absent None vs present-empty Some({}) are
  distinct — a songs_manifest round-trip plus a regression asserting an
  explicitly-empty manifest still demands every labelled source);
- six song_holdout_preflight cases: accept-clean, refuse uncurated /
  unidentified (no sha256) / file-split-across-songs, and both manifest
  bidirectional checks.

The cockpit web-test manifest assertion is updated to schema v10 here so it
fails against the still-v9 producer, and passes once GREEN bumps it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012T7SRMiXmZe5v1imtrKMPi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant