Skip to content

Archaic design doc: record the shipped state and where it diverged from the plan - #37

Merged
JamesKane merged 1 commit into
mainfrom
docs/archaic-design-status
Jul 30, 2026
Merged

Archaic design doc: record the shipped state and where it diverged from the plan#37
JamesKane merged 1 commit into
mainfrom
docs/archaic-design-status

Conversation

@JamesKane

Copy link
Copy Markdown
Owner

Post-ship audit of documents/design/ArchaicAncestry_Design.md. Documentation only — no code changes.

Staleness

The doc's header read "No code yet" for a feature that shipped in v0.1.0-alpha.14. Also fixed: M3 was headed "in progress" after M3.3 wired it end to end, §9's questions were under "Still open before Phase 1" with all three long closed, and §8's phases carried no status.

The part that actually mattered

Three things shipped differently from §10, and none was recorded at the point where the plan states the rule — so a reader following this document would have been misled about what the code does.

Plan says Reality
Ship Tier B behind a feature gate covering read and publish paths No such constant. Extent shipped ungated; only attribute_lineage is off
Validate at ~1.5–2% Neanderthal (§7) Calibrated against hmmix's measured EUR mean (90.9 Mb) instead — shipped result 91.5 Mb = 1.01×
Denisovan floor "must be exercised by a test" Test was never written

Each is annotated in place with a blockquote, so the rule and its reality sit together, plus a new Deviations from the plan section carrying the justification and the residual risk.

The honest read on each:

  • The gate is defensible — the fabrication risk it existed to contain was entirely in attribution, which is gated, and extent passed the bar via an external callset. But the plan still read as though the gate were there.
  • §7's figure isn't wrong, it's a different measurement. Three denominators are in play (whole genome / callable genome / hmmix's per-haplotype union) and they aren't interchangeable. §7 now says so in place, because quoting "1.5–2%" beside the shipped "5.04%" reads as a contradiction otherwise.
  • The missing test is a genuine open gap, not a deviation that resolved itself. Shipped behaviour is stronger than the spec — Denisovan is never surfaced at all — but nothing currently fails if a future change starts emitting denisovan_copies as a headline.

Residual risk now stated rather than implied: extent is fitted on one individual, so its error is uncharacterised for anyone with unusual ancestry or coverage.

Open follow-ups (new section)

  • Write the Denisovan-floor regression test
  • Validate extent across several individuals — the 1.01× agreement is a calibration check, not a validation
  • Lineage attribution needs the Skov-2020 haplotype approach; threshold tuning will not fix it
  • Asset staging policy was never decided — a live defect, not a doc bug (below)

The staging defect, recorded here and fixed separately

M1 said to check Asset 1's size against ON_DEMAND_PREFIXES in packaging/stage-assets.sh "before deciding". No decision was ever made, so PATTERNS lists no archaic_* while release mode fetches everything the manifest names except ancestry_haps_ — bundling all five archaic assets (105.3 MB). The two staging modes disagree, which is precisely what the comment above PATTERNS warns against.

Measured: alpha.14's installers are ~60 MB larger than alpha.13's (.dmg 136→199 MB, .exe 105→163 MB). Fixed in a follow-up PR.

🤖 Generated with Claude Code

…om the plan

The doc's header still read "No code yet" for a feature that shipped in
v0.1.0-alpha.14, M3 was headed "in progress" after M3.3 wired it end to end,
and §9's open questions were headed "Still open before Phase 1" with all three
long since closed. Corrected, and §8 now carries per-phase status.

The staleness was the easy half. Three things shipped DIFFERENTLY from §10 and
none was recorded where the plan states the rule, so a reader following the
document would have been misled about what the code does:

- M3 mandates a feature gate over Tier B covering the read AND publish paths.
  No such constant exists. Extent shipped ungated; only lineage attribution is
  gated. Defensible -- the fabrication risk the gate existed to contain was
  entirely in attribution -- but the plan still read as if the gate were there.

- §7's "~1.5-2% Neanderthal" is not the target the caller was calibrated
  against. Three denominators are in play (whole genome, callable genome,
  hmmix's per-haplotype union) and they are not interchangeable: the shipped
  claim is 91.5 Mb against hmmix's measured EUR mean of 90.9 Mb, which is
  1.01x. Quoting §7's figure next to the shipped 5.04% compares two different
  measurements, so §7 now says so in place.

- M3 requires a test asserting "none reliably detected" for the Denisovan
  floor. It was never written. Shipped behaviour is stronger (Denisovan is
  never surfaced at all), but nothing currently FAILS if a future change starts
  emitting denisovan_copies as a headline. That is an open gap, not a
  deviation that resolved itself, and it is recorded as one.

Adds a "Deviations from the plan" section carrying those three with their
justification and their residual risk -- extent is fitted on ONE individual,
so its error is uncharacterised for anyone with unusual ancestry or coverage.
Plus an open-follow-ups list: the missing test, multi-individual validation,
the Skov-2020 attribution upgrade, and the asset-staging decision.

That last one is a live defect rather than a doc bug. M1 said to check Asset
1's size against ON_DEMAND_PREFIXES "before deciding" and no decision was ever
made, so PATTERNS lists no archaic_* while release mode bundles all five
(105.3 MB) -- the two staging modes disagree, and alpha.14's installers are
~60 MB larger than alpha.13's. Recorded here; fixed separately.

Documentation only; no code changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@JamesKane
JamesKane merged commit b151360 into main Jul 30, 2026
3 checks passed
@JamesKane
JamesKane deleted the docs/archaic-design-status branch August 3, 2026 10:31
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