DriftWatch phase ledger

Status, evidence, commit and the hours the researcher reports, for every phase and gate. The phase-closeout skill updates this file at the end of each phase. Status values: NOT STARTED, IN PROGRESS, DONE, CUT. Gates are decided by the researcher from the gate card in plan §7; the evidence file decides, not mood.

Phases

#

Phase

Weeks (dates)

Planned h

Status

Evidence

Commit

Hours (actual)

Notes

1

Foundations and governance

1-2 (12-25 Oct 2026)

8

DONE

CI run 38028624827 (in the private development repository, not public) (Linux + Windows green, 258 tests, 45/45 guardrail scenarios each); guardrail review; ADR-0001; PROTOCOL

d634836

3

Done 10 Oct 2026, before week 1; prompt rev 1.2. See “Phase 1 closeout” below

2

Data ingestion and data cards

1-2 (12-25 Oct 2026)

10

DONE

inventory; notes, Q1-Q7, leakage review; LAMDA card; BODMAS card; ADR-0004 (ACCEPTED); CLAIMS D-01..D-14; data/manifest.json

14da248

2

Done 10 Oct 2026, before week 1. Cap 1.5 GB approved; LAMDA peak 0.87 GB (rebuild 0.93), BODMAS 0.56 GB. Guard allowlist widened (ADR-0001). Cache v2 after leakage review. See “Phase 2 closeout” below

3

Time slicer, C1-C3, leakage canary

3 (26 Oct-1 Nov 2026)

8

DONE

slicer review, 2 passes; mutation matrix 15/15; slicing run; window options; ADR-0005 (ACCEPTED); ADR-0004 addendum 1; CLAIMS W-01..W-07

9b8e958

3

Done 11 Oct 2026, before week 3. Canary tested on seeded drift, not the signal-free fixture; real-data canary left to Phase 4 by design. See “Phase 3 closeout” below

4

Models, AUT/A-AUT, E0 baselines

3-4 (26 Oct-8 Nov 2026)

10

DONE

G1 evidence; E0 report; tables; fit times; ADR-0006 (ACCEPTED 15 Oct 2026); CLAIMS E-01..E-12, M-01, M-02, B-01..B-05, T-01

57e2003

2 (reported as under 3)

Done 11 Oct 2026, before week 3. G1 criteria met on LAMDA; BODMAS AUT above 0.90 left as an open alarm; ADR-0006 awaits acceptance; guide sanity band [verify]. See “Phase 4 closeout” below

5

Delay and budget simulator, E1

5-8 (9 Nov-6 Dec 2026)

32

DONE

G2 evidence; ADR-0007 (PROPOSED); E1 figure; E1 tables; label influence; chapters 2, 5, 6; CLAIMS S-01..S-06, E-13..E-21

a5c8604

3 to 6 (reported)

Done 13 Oct 2026, before week 5. G2 criteria met except: ADR-0007 not accepted (researcher), second leakage-review pass did not complete (usage limit). Open: which comparator carries RQ1; parallel runs do not fit the 1.5 GiB cap. See “Phase 5 closeout” below

6

Tier 1 grid (E2) and statistics

9-11 (7-27 Dec 2026)

24

DONE

prereg-v1 tag c26aa5f (15 Oct 2026, before any E2 result); ADR-0008 (ACCEPTED); stats review; GRID.md; ch03; grid ledger results/e2/<dataset>/ledger.jsonl

e015804 (final evidence); fca8a10 (code), c26aa5f (registered)

10 (reported by the researcher on 20 Oct 2026 for Phases 6 to 8 together; no per-phase split)

E2 complete (54 of 54 cells), tables, figures, CLAIMS E-22 to E-39 and ch07 written, two stats passes. Closed 20 Oct 2026 with Phases 7 and 8 (hours reported together). Open items for the researcher are listed under “Phases 6 to 8: state”

7

Tier 1 write-up and reproduction

13-14 (4-17 Jan 2027)

18

DONE

driftwatch reproduce table1 (smoke passes; clean-clone full run MATCH, 31 min, CLAIMS E-24); claims audit script; related-work addendum; ch01, ch04 (first draft), ch08 (partial)

e015804 (on phase-08-conformal-e3, which contains phase 7)

included in the 10 h reported for Phase 6

README, ch01 to ch08 drafts, claims audit (PASS), clean-clone reproduction and G3 evidence exist. G3 decided PASS by the researcher on 20 Oct 2026. Closed with Phases 6 and 8

8

Conformal layer and selection (E3)

15-17 (18 Jan-7 Feb 2027)

23

DONE

conformal modules, selectors, runner_e3, E3 grid spec and tables built and tested on synthetic streams; addendum v2 draft; ADR-0009 (PROPOSED)

e015804

included in the 10 h reported for Phase 6

prereg-v2 tagged f38858e (15 Oct 2026, before any E3 result); ADR-0009 ACCEPTED (option A). BODMAS E3 complete (28 of 28 cells, 0 failed, CLAIMS E-25); LAMDA E3 seeds 0 to 4 complete (16 of 16 cells); seeds 5 to 9 (12 cells) not run. Tables, figure, CLAIMS E-40 to E-47, ch07 section 7.5, a stats review and a leakage review exist; open: the trap-arm confound and the hold-out cut (review). Closed with Phases 6 and 7; open: the trap-arm caveat and the hold-out deviation are kept, not fixed

9

Drift monitors and scoring (E4)

18-19 (8-21 Feb 2027)

18

DONE

addendum v3 (tag prereg-v3 on 1d302ea, 20 Oct 2026 17:52 IST, before any E4 result); ADR-0010 (ACCEPTED); leakage review; stats review; G4 evidence; tables; figure; synthetic checks; E3 cross-check; ch06 section 6.12, ch07 section 7.6; CLAIMS P-17, P-18, E-48 to E-65; tests 910 passed (fast), ruff clean, guardrails 45/45, claims audit PASS

ff0d455 (E4 results at 1d302ea)

10-18 (range reported by the researcher, 21 Oct 2026)

E4: 76 of 76 cells, none failed; seeds 0-9 decided before any result. No monitor beat periodic(3) (M-P); timing was equivalent where testable (M-C). The monitors alarmed in most slots. Two monitor designs (p-uniformity, MMD) were fixed on synthetic no-drift checks before the tag. The Holm floor of 0.0625 was not written into the addendum and is stated after the results (P-18). Branch stacked on PR #4; the worktree E:/DriftWatch-e4 is at prereg-v3 (remove with git worktree remove).

10

Tier 3: cross-platform (E5), EMBER2024 (E6)

20-21 (22 Feb-7 Mar 2027); now run 21-28 Oct 2026

0 (10 opt.)

DONE (MODE B, scoped)

Tier 3 decision; coverage (93.9% overall; constraints, queue, conformal and monitors 92% to 100% per module); results audit; tests/test_configs_parse.py, tests/test_validation_branches.py, tests/test_fixture_regenerates.py, tests/test_audit_results.py; fast suite 987 passed in 78 s, whole suite 1,128 passed, ruff clean, guardrails 45/45, claims audit PASS

dd3d1ae

4-6 (range reported by the researcher, 22 Oct 2026)

Go checklist failed on the deadline (due by 10 Dec 2026); E5 and E6 not run (future work), so the three Mode A artifacts (addendum v4, configs/e5_cross_platform.yaml, reports/tables/e5_cross_platform.csv) were not produced. Found and fixed: the slicer mutant public_order_stratified survived because an earlier speed-up marked its killer test module slow (the harness skips slow tests); the module is fast again and a test guards the harness suites. No script, config or function was deleted: every script has a test or a cited role, every config parses. The CI job timeout is 25 min (the slow suite takes 8 to 13 min) and the uv cache is on; neither is verified until CI runs. README updated for E4 and the deferred tiers

11

Paper and capstone completion

21-24 (1-28 Mar 2027); now to 10 Dec 2026

24

DONE (compressed: report draft; rewrite pending)

report chapters 0 to 9 (about 20,900 words; length against the guide’s budget in ch00, CLAIMS T-02); bibliography checker, 34 of 34 entries resolved live against Crossref or arXiv; simulated hostile review with responses; licence and ethics audit; claims audit PASS (110 numbered paragraphs, 106 with a resolving id, 4 marked [verify], 0 uncovered); clean-clone check at ed6be75 (CLAIMS E-67: 1,004 fast tests, guardrails 45 of 45, full Table 1 MATCH on 8 rows); fast suite 1,004 passed in 60 s, ruff clean, guardrails 45/45

0bd9992

8 to 12 h (researcher, 22 Oct 2026)

Compressed for the 10 Dec 2026 deadline (report plus code repository). HANDOFF items paper/main.tex and docs/submission_checklist.md are not produced: the 8-page paper and the venue checklist move to after the deadline (decided 22 Oct 2026). Decisions taken by the researcher on 22 Oct 2026 and applied: report retitled (“Malware Detector Lifetime Under Delayed Labels: Small Effects and Null Monitors in a Pre-Registered Time-Aware Study on Android and Windows PE Data”); exploratory lifetime reading added as ch07 section 7.7 (CLAIMS E-68, unregistered); chapter 4.5 cut to one paragraph; stored predictions hashed in docs/predictions_manifest.csv and archived privately outside the repository (CLAIMS E-69); BODMAS licence kept as “used as published”; docs/source removed from the index and git-ignored (history not rewritten); class-matched baseline not run (future work). Still open for the researcher: rewrite and defend the chapters; the faculty template, page limits and AI-disclosure wording (needed by about 5 Nov); the [researcher: …] and [verify] markers (BODMAS labelling, Li et al. against plan Table G.1, LAMDA timestamp field); weeks 1 and 2 hours; pushing and merging the PRs in order (PR #4, phase-09, phase-10, phase-11) and the prereg-v3 tag. Nothing pushed, tagged or published.

12

Release, deployment, maintenance

21-24 (1-28 Mar 2027); run 26-28 Oct 2026

12

IN PROGRESS (built and tested; nothing published)

Phase 12 checks (CLAIMS E-70 to E-72); ADR-0011 (ACCEPTED); RELEASING; MAINTENANCE; licence and ethics audit (updated 27 Oct 2026); architecture section with diagrams and captures; first maintenance run (reports/maintenance/2026-10-first-run.md on branch maint/2026-10-first-run, its own PR #7; not a site page, so no link); fast suite 1,056 passed, slow suite 142 passed, ruff clean, guardrails 45/45, claims audit PASS, strict docs build and link check pass, driftwatch reproduce table1 on a fresh BODMAS download MATCH (8 rows, max difference 0.000000)

de2b64b

1 to 3 h (range reported by the researcher, 28 Oct 2026)

Built: release workflow (Trusted Publishing, TestPyPI rehearsal path, wheel smoke on Linux and Windows, draft GitHub Release so the Zenodo DOI is a separate decision), clean-room workflow, driftwatch smoke from an installed wheel, Sphinx site with strict build, link check and versioned deploy, maintenance playbook with the arxiv-audit skill and scheduled workflow, issue forms, CHANGELOG, CITATION.cff and .zenodo.json (both validate), filtered-history script (rehearsed), behaviour-preserving cleanup (CLAIMS E-71). Done on 28 Oct 2026 with the researcher’s go (CLAIMS E-76 to E-79): PRs #5, #6 and #7 merged in the private repository; the public repository Yathindra25KB/driftwatch-lifetime created from the filtered history (main and the three prereg tags only, branch protection and the testpypi and pypi environments set, Pages enabled); the release workflow rehearsed on the rc branch (build and the wheel smoke on Linux and Windows passed, the upload was refused only because no publisher is registered); the monthly arXiv workflow and the docs deploy ran on GitHub. Not done, each needs the researcher: registering the Trusted Publishers on TestPyPI and PyPI (account login, two-factor), the TestPyPI upload and clean-room run that follow, the signed tag and PyPI upload (the Private :: Do Not Upload classifier is still in place on main), publishing the draft release (Zenodo DOI), captures of PyPI and Zenodo. Deviations: the docs-tool ADR is ADR-0011, not ADR-0008 as the prompt names it (ADR-0008 exists; numbers are never reused), so the HANDOFF check lists ADR-0008-docs-tool.md as missing; paper/main.tex does not exist (paper deferred after the capstone deadline); paper/REFERENCES_TODO.md kept (nine open citation items); cleanup of results/ deletes only the three uncited run folders, because ledger rows E-13, E-14, E-20, E-21 and S-06 cite the others.

Gates

Gate

Decide on

Pass criteria (plan §7, summarised)

Status

Evidence

Commit

Notes

G1

Sun 8 Nov 2026 (end wk 4)

Time-aware AUT(F1) below random-split F1 by the PREREG band on at least one dataset; real-data canary moves AUT toward random; constraint, AUT and canary tests green; no fit over 60 s or a shrink plan; reports/G1.md PASS

DECIDED PASS by the researcher on 15 Oct 2026 (ADR-0006 accepted the same day; the BODMAS AUT alarm and the comparator dependence of criterion 1 are recorded in chapter 8, not hidden)

reports/G1.md: criteria met on LAMDA (gap 0.14 to 0.15, canary PASS, tests green, fits under 9 s, reruns identical); BODMAS alarm open

57e2003

Researcher decides. Fail: fix the slicer; no simulator

G2

Sun 6 Dec 2026 (end wk 8)

Simulator end to end on at least one dataset; test_queue_delay and spy test pass; regression fixture holds; E1 figure regenerates; pool ADR accepted; reports/G2.md PASS

DECIDED PASS by the researcher on 15 Oct 2026 (stated in the Phase 6 planning session; ADR-0007 accepted the same day; the second leakage-review pass was then completed, see the Phase 6 stats and leakage notes)

reports/G2.md

Open decision A resolved (per-slot comparator, ADR-0008); open decision B: sequential grid, cap unchanged

Tier 1 results

Sun 27 Dec 2026 (end wk 11)

E2 complete; prereg-v1 predates results; tables and figures regenerate with no fits; stats-reviewer findings resolved

NOT DECIDED

Fail: use buffer week 12, no Tier 2 work in it

G3

Sun 17 Jan 2027 (end wk 14)

Tier 1 results and core chapters exist; reproduce table1 matches on a clean machine; claims audit clean; reports/G3.md PASS

DECIDED PASS by the researcher on 20 Oct 2026, accepting that criterion 2 (core chapters exist) is met by drafts that are under the guide’s page targets and that the chapters are the researcher’s to rewrite and defend

reports/G3.md

Fail: cancel Tier 2 and Tier 3, finish the report

G4

Sun 21 Feb 2027 (end wk 19)

E3 and E4 complete or honestly reported; prereg-v2/v3 predate results; reports/G4.md written

DECIDED PASS by the researcher on 21 Oct 2026

reports/G4.md

ff0d455

Decided early (calendar week 2). E3 56/56, E4 76/76 cells; both tags predate their results

Tier 3 go/no-go

Mon 22 Feb 2027 (wk 20)

G4 passed; cumulative hours at or under plan (151 h at end of wk 19); average at least 9 h/week over the last four weeks; capstone deadline not before end of wk 24

CHECKLIST FAILS on the deadline item (researcher’s numbers, 21 Oct 2026: G4 PASS; hours within plan; at least 9 h per week; deadline earlier than 28 Mar 2027)

reports/G4.md

ff0d455

Fail: Phase 10 in polish mode (MODE B), per the Phase 10 prompt; recorded in reports/G5-tier3-decision.md when Phase 10 starts

Release

Sun 28 Mar 2027 (end wk 24)

Paper at 8 pages or fewer, check_bib.py clean; chapters 1-9 complete; TestPyPI rehearsal passed; docs strict build clean; licence and ethics audit clean; researcher said go for PyPI and DOI

NOT DECIDED

Fail: smaller release; never rush irreversible steps

Hour check

Every week

Average at least 5 h/week over the last four weeks

OK

Weekly hours log

Fail: single dataset; two-dataset comparison becomes future work

Weekly hours log

The researcher fills this in weekly (about 20 minutes, plan §5.1 step 9). Compare cumulative hours with plan Table 4.1. Planning assumption: about 8.5 h per working week (confirmed by the researcher on 10 Oct 2026).

Week

Dates

Hours

Cumulative

4-week average

Notes

0

10-11 Oct 2026 (before week 1)

10

10

Phase 1 (3 h), Phase 2 (2 h), Phase 3 (3 h) and Phase 4 (2 h, reported as under 3), researcher-reported

1

12 Oct - 18 Oct 2026

5 to 9

Researcher-reported as a range on 22 Oct 2026, not an exact figure; cumulative and 4-week average left blank until exact hours are given

2

19 Oct - 25 Oct 2026

5 to 9

Same: range reported on 22 Oct 2026 (week 2 not yet over)

3

26 Oct - 01 Nov 2026

4

02 Nov - 08 Nov 2026

G1

5

09 Nov - 15 Nov 2026

6

16 Nov - 22 Nov 2026

7

23 Nov - 29 Nov 2026

8

30 Nov - 06 Dec 2026

G2

9

07 Dec - 13 Dec 2026

10

14 Dec - 20 Dec 2026

11

21 Dec - 27 Dec 2026

Tier 1 results

12

28 Dec - 03 Jan 2027

Buffer

13

04 Jan - 10 Jan 2027

14

11 Jan - 17 Jan 2027

G3

15

18 Jan - 24 Jan 2027

16

25 Jan - 31 Jan 2027

17

01 Feb - 07 Feb 2027

18

08 Feb - 14 Feb 2027

19

15 Feb - 21 Feb 2027

G4

20

22 Feb - 28 Feb 2027

Buffer; Tier 3 go/no-go

21

01 Mar - 07 Mar 2027

22

08 Mar - 14 Mar 2027

23

15 Mar - 21 Mar 2027

24

22 Mar - 28 Mar 2027

Release

Revision 1.2: memory overrides (8 GB laptop, 7.2 GB usable)

The Phase 1 prompt (rev 1.2, 10 Oct 2026) states the real hardware and says it wins over any source document that assumes more memory. Places that assume more:

Source

Location

Assumption

Status under rev 1.2

Implementation plan

p. 1, “Scope you chose” box

“Hardware 16 GB RAM laptop”; verdict condition “LAMDA cached inside 16 GB in Phase 2”

Superseded: 8 GB (7.2 GB usable)

Implementation plan

p. 9, Table 4.5

“LAMDA, dense float32 … 18.4 GB, Impossible on 16 GB”; “LAMDA, dense int8 … 4.60 GB, Possible but wasteful”; “keep peak memory under 6 GB”

Dense int8 (4.6 GB) is no longer safely possible; the 6 GB cap is replaced by a cap the researcher approves in Phase 2

Implementation plan

p. 9, verdict table

“Memory (16 GB) PASS if LAMDA is streamed”

To re-test in Phase 2 against the approved cap

Implementation plan

p. 10, condition 3

“LAMDA is cached inside 16 GB in Phase 2”

Superseded by the Phase 2 cap

Implementation plan

p. 16, Phase 2 description

LAMDA memory hazard sized against a 16 GB machine

Superseded

Implementation plan

p. 17, Phase 2 prompt and acceptance

“Peak memory must stay under 6 GB … because I have a 16 GB laptop”; “Measured peak memory … is below 6 GB”

Prompt text replaced in docs/prompts/phase-02.md (see below); acceptance uses the approved cap

Implementation plan

p. 18, Phase 2 fallback

“LAMDA cannot be cached inside 16 GB”

Read as “inside the approved cap”

Implementation plan

p. 43, answered questions and Q3

“Hardware 16 GB RAM laptop”; Q3 default “8 threads, 16 GB RAM, 50 GB free [estimate]”

Measured 10 Oct 2026: Ryzen 7 6800H, 8 cores / 16 threads, 7.25 GB RAM visible, E: 121 GB free, C: 5.4 GB free

DriftWatch_Phase_Prompts.md

line 97 (Phase 2, deliverable 2)

“Peak memory must stay under 6 GB … 16 GB laptop”

Replaced in docs/prompts/phase-02.md

Build guide

(none found)

The guide states dataset sizes only, no laptop RAM

n/a

Prompt edits

Date

File

Edit

Authority

10 Oct 2026

docs/prompts/phase-01.md

Verbatim rev 1.2 prompt; supersedes the Phase 1 text inside docs/source/DriftWatch_Phase_Prompts.md (byte-compared with the pasted prompt)

Phase 1 prompt rev 1.2

10 Oct 2026

docs/prompts/phase-02.md

Replaced “Peak memory must stay under 6 GB (record the measured peak) because I have a 16 GB laptop.” with “I have an 8 GB laptop (7.2 GB usable). Before building, measure free memory and propose a peak-memory cap for me to approve, then record the measured peak against it.”

Phase 1 prompt rev 1.2, deliverable 5

10 Oct 2026

docs/prompts/phase-03.md … phase-12.md

Split unchanged from docs/source/DriftWatch_Phase_Prompts.md (each byte-compared with its source block)

Phase 1 prompt rev 1.2

VISTAS capstone rules

Answer given 10 Oct 2026: all unknown. The plan defaults stay in force until verified: deadline not before end of week 24; Markdown sources converted to DOCX/PDF; AI assistance disclosed; no demo.

Rule

Status

Capstone deadline

Early December 2026, by 10 Dec 2026 (researcher, 21 Oct 2026; exact date to confirm). Hand-in: the report and the code repository. Earlier than Sun 28 Mar 2027, so Tier 3 is removed and Phases 11-12 are compressed (see the Phase 10 to 12 rows)

Report template (Word or LaTeX)

unknown, to verify

Page rules

unknown, to verify

AI-assistance disclosure policy

unknown, to verify (see docs/ETHICS.md)

Demo expected

unknown, to verify

Phase 1 decisions (10 Oct 2026)

OS Windows-native (Git Bash + PowerShell tools); repository github.com/Yathindra25KB/Driftwatch- (private until G3, public by Phase 12); licence MIT (ADR-0002); PyPI distribution driftwatch-lifetime, import driftwatch (ADR-0003); one long session; branch protection with required CI on main once pushed; about 8.5 h per week.

Deviations from source documents

Item

Deviation

Reason

cli

Module src/driftwatch/cli.py, not a cli/ package

Phases 7 and 12 name src/driftwatch/cli.py (PROTOCOL D11)

Plan Appendix B

MultiEdit dropped; PowerShell covered; hook paths anchored on $CLAUDE_PROJECT_DIR; no Bash deny rules

Current Claude Code docs (ADR-0001)

Phase 1 plan: restart after step E

No restart needed

Hooks went live through the settings file watcher (verified live, ADR-0001)

Phase 1 plan: GitHub repo creation

Existing private repo Driftwatch- (created 6 Oct 2026) used as origin

Researcher supplied it

Guard download allowlist

json.schemastore.org added

Validating settings against the docs-linked schema (a schema-rejected settings file disables the guardrails)

phase-closeout skill

Authored with skill-creator guidance; its LLM eval/viewer loop was not run

Deterministic helper scripts are unit-tested; the prompt runs the checklist by hand in Phase 1

Relief levers used

None.

Phase 1 closeout (10 Oct 2026)

Checklist run by hand, as the prompt requires for the phase that creates the skill.

Check

Result

Clean clone of phase-01-foundations at 180368d: uv sync --frozen && uv run pytest -q && uv run ruff check . && uv run ruff format --check .

258 passed; All checks passed!; 60 files already formatted

uv run python scripts/check_guardrails.py (local, Windows)

45/45 scenarios passed; latency median: guard 189 ms, reviewer guard 176 ms, formatter 346 ms, re-injection 181 ms, Stop gate 803 ms (runs the tests: justified)

CI run 38028624827 on 0d2b8ca

lint-test (ubuntu) success: 258 passed, 45/45; windows-smoke success: 258 passed, 45/45. d634836 only loosens scenario 44 to stop expecting Phase 1 to be IN PROGRESS (local: 258 passed, 45/45); CI reruns on the ledger push

Live checks in Claude Code

Guard blocked real Bash and PowerShell force pushes and an unlisted download; permissions denied a docs/source/ write and a .env read; formatter, scoped rules and skill discovery observed; /memory lists CLAUDE.md and the rules, and approval prompts appeared for guardrail edits (researcher check)

.claude/settings.json vs https://json.schemastore.org/claude-code-settings.json

ok – validation done

CITATION.cff (cffconvert --validate) and .github/workflows/ci.yml (check-jsonschema vendor.github-workflows)

valid; valid

HANDOFF check (check_handoff.py 1)

35 items, all exist

Adversarial review

21 findings: 20 fixed with regression tests (6cdb589), 1 accepted fail-closed (review); residual risks in ADR-0001

ADRs

ADR-0001 ACCEPTED (researcher), ADR-0002 ACCEPTED (MIT), ADR-0003 ACCEPTED (driftwatch-lifetime)

GitHub

main and phase-01-foundations pushed to the private repo; main protected (required check lint-test, strict; PR required with 0 approvals; enforced for admins; no force pushes or deletions)

Low-priority items

report/ch01_introduction.md skeleton; paper/references.bib with 13 identifier-verified entries; unverified items in paper/REFERENCES_TODO.md

Phase 1 config hashes

File

SHA-256

uv.lock

ef115bb63578ddd01a6826c68eb6a52d275cdfe05084e59faa63ac8b8b705d22

(no configs/*.yaml yet)

Phase 2 prerequisites

  • Disk: E: has 121 GB free (allow about 30 GB for raw files and caches [estimate]). C: has only 5.4 GB free and holds the uv cache and the uv-managed Pythons. Moving UV_CACHE_DIR and UV_PYTHON_INSTALL_DIR to E: before Phase 2 is recommended (researcher’s machine setting).

  • Start the LAMDA download early in week 1. huggingface.co and the BODMAS host must be added to the guard’s download allowlist by a Phase 2 CHANGE_REQUEST.

  • RAM: 7.25 GB visible, about 0.6 GB free at the 10 Oct check. Phase 2 measures free memory and proposes a peak-memory cap for approval.

Phase 2 closeout (10 Oct 2026)

Check

Result

uv run pytest -q; ruff check .; ruff format --check .

322 passed; All checks passed!; 82 files already formatted

uv run python scripts/check_guardrails.py

45/45 scenarios passed

uv run driftwatch data verify (data/ and the clean-rebuild root data/rebuild_check/)

OK, 0 problems on both; 1,088 cache files byte-identical between them (cache v2)

Builds under the approved 1.5 GB cap

LAMDA 1,008,381 rows, 120 monthly units, peak 0.87 GB (rebuild 0.93), 93.1 s, 119.7 MB; BODMAS 134,435 rows, 424 weekly units, peak 0.56 GB, 23.4 s, 1,231.2 MB

HANDOFF check (check_handoff.py 2)

8 items, all exist

Leakage review (leakage-reviewer subagent)

13 findings (2 high, 4 medium, 7 low). 11 were fixed with tests in bba2692 (cache v2). 2 are carried to the Phase 3, 4 and 8 ADRs (slot-boundary hold-outs; past-only duplicate sensitivity) and recorded in ADR-0004

ADRs

ADR-0004 ACCEPTED by the researcher (LAMDA month; BODMAS 2 weeks from 2019-08-26; M = 50, strict gaps; placeholder-dated benign rows excluded). ADR-0001 change request (download allowlist) approved

Sources

LAMDA HF commit ad9614bdd5556767f97ced2fce797c2f06408ebf; BODMAS Google Drive file IDs in data/manifest.json. The BODMAS download worked without a quota error

Deviations and notes:

  • LAMDA timestamps come from the root metadata.csv (added, AndroZoo’s collection date), which the README does not describe. year_month matches it for every row.

  • The BODMAS dataset licence is not stated by its authors (the code is BSD-2-Clause): open question Q5.

  • Cache v1 (the first build) is archived in the manifest. Its files under data/cache/*/v1/ and the rebuild root data/rebuild_check/ can be deleted by the researcher; the guard blocks recursive deletes outside temp folders.

  • The Phase 2 prompt’s CHANGE_REQUEST was “none”. The allowlist change was approved at plan time as the CHANGE_REQUEST noted in “Phase 2 prerequisites”.

Phase 2 config hashes

File

SHA-256

uv.lock

1c7380afb87669761538e9cc8fec08f100a1b94d5e5bf719ca9b61b26745afd0

(no configs/*.yaml yet)

Phase 3 closeout (11 Oct 2026)

Check

Result

uv run pytest -q; ruff check .; ruff format --check .

481 passed; All checks passed!; 112 files already formatted

uv run python scripts/check_guardrails.py

45/45 scenarios passed

HANDOFF check (check_handoff.py 03)

7 items, all exist

Constraints

C1, C2, C3 raise ConstraintViolation subclasses (never warnings); tests implement the guide’s definitions literally; property tests run against an independent integer-arithmetic oracle

Mutation checks

15 of 15 deliberate breakages killed by the real suites, baseline 120 tests green (matrix, CLAIMS W-07)

Canary

Planted drift: AUT 0.76-0.79 (true timestamps) to 0.96-0.98 (shuffled), random-split F1 0.96-0.98, 4 seeds. No drift: NO_GAP. Leak caught by C2/C1, and by the canary when both are disabled. Limit pinned: leaking 1 of 10 evaluation slots is not seen by the canary alone

Full-dataset slicing

LAMDA 47 windows / 564 evaluation slots, 28.6 s, peak 0.40 GB; BODMAS 2 windows / 24 evaluation slots, 2.9 s, peak 0.69 GB; 0 densified; no C1-C3 violation (CLAIMS W-04)

Leakage review (leakage-reviewer subagent)

Pass 1: 14 findings (0 blocker, 3 major, 11 minor); pass 2: 9 findings (1 major latent, 7 minor, 1 informational). No C1-C3 violation in either pass. All fixed except two carried to Phase 5 (Window object reaches held-back labels; per-row seen-before mask for E0) and one documented as accident-proofing

ADRs

ADR-0005 ACCEPTED by the researcher (LAMDA nT 4, nE 12, stride 3; BODMAS nT 3, nE 6, stride 2; M = 50; cap and flag; sensitivity ratio 5%). ADR-0004 addendum 1 amends item 7 (selectors get only EvalSlot.public())

Deviations and notes:

  • The committed synthetic fixture has features independent of labels, so the canary movement is tested on seeded in-memory timelines with planted drift (driftwatch.data.synthetic). The fixture caches and a built drifting BODMAS-format cache prove the script end to end.

  • The real-data canary was deliberately not run: windows must not be chosen after seeing real AUT. Phase 4 runs scripts/leakage_canary.py with the ADR-0005 windows (gate G1).

  • C3 follows the researcher’s “cap and flag” choice: slots already below the target ratio keep all rows and are flagged. 31 of the 62 LAMDA headline months are below 10% malware; the ADR states the prevalence spread as a threat to validity.

  • Carried to Phase 5: selectors, policies and monitors take only OpaqueSlot and TrainWindow, never Window or EvalSlot; the spy test lands with the first selector; the E0 duplicate mask is built from the simulator’s real training pool.

  • Branch phase-03-time-slicer is stacked on the unmerged phase-02-data-ingestion and phase-01-foundations; nothing has been pushed.

Phase 3 config hashes

File

SHA-256

uv.lock

1c7380afb87669761538e9cc8fec08f100a1b94d5e5bf719ca9b61b26745afd0

(no configs/*.yaml yet; window specs carry their own digest in every slicing manifest)

Phase 4 closeout (11 Oct 2026)

Check

Result

uv run pytest -q; ruff check .; ruff format --check .

669 passed; All checks passed!; 133 files already formatted

uv run python scripts/check_guardrails.py

45/45 scenarios passed

HANDOFF check (check_handoff.py 04)

10 items, all exist

E0 evidence runs (clean commit cd72d83, --require-clean, five seeds)

BODMAS 180 window rows, 3,185,890 predictions, 965.7 s, peak 1.40 GiB; LAMDA 420 window rows, 23,210,920 predictions, 2,200.3 s, peak 0.90 GiB (E-01)

Reproducibility

Seed 0 of every variant rerun on the same commit: 16 of 16 cell prediction hashes equal, 120 of 120 window rows equal incl. comparator columns (E-11)

Fit time

Slowest fit 8.6 s (LightGBM default, BODMAS); configured models 1.2 to 3.5 s; the 60 s limit holds, no shrink needed (B-05)

Leakage review (leakage-reviewer subagent)

No temporal leak. 1 major (comparator class prior confounded with time) and 7 minor findings: fixed with tests in 92018af, except the recovery-time caveat, which is documented in ADR-0006. 4 informational: the bench docstring and LightGBM seed-sensitivity are fixed; the window_id join note is in the table builder; sealed labels inside the runner are by convention only, so Phase 5 must give selectors only OpaqueSlot and add the spy test

Stats review (stats-reviewer subagent)

5 major, 5 minor, 1 informational: iid bootstrap replaced by moving-block bootstrap, unsupported “gap understated” sentence removed, comparator caveats added, training-prior range and slot denominators corrected, LAMDA reproducibility run and E-rows written before the report was committed. Applied in 2010858, 2e1702a, 57e2003

Gate G1

Evidence in reports/G1.md: criteria met on LAMDA; BODMAS AUT above 0.90 left open. Not decided by Claude

ADRs

ADR-0006 PROPOSED (values frozen 11 Oct 2026 under the researcher’s delegation, before any E0 result); acceptance is the researcher’s

Deviations and notes:

  • Runner location. driftwatch.sim.{config,results,runner}, not new top-level modules: tests/test_smoke.py pins the package map to guide section 8. driftwatch run <config.yaml> is in cli.py.

  • First E0 run discarded unread. Started at commit 5893df7, stopped after the leakage review found the comparator confound and missing comparator counts; replaced by the run of the amended code (ADR-0006, process note). Its partial output results/e0/00420e5e86baa4ea/ is not used and can be deleted by the researcher (the guard blocks recursive deletes outside temp folders).

  • LR max_iter 300 to 1000 after a convergence-only probe on a training window (no scores printed): LAMDA converges at 325 iterations.

  • Memory. Dense LR keeps float32 and the random-split step frees its pooled copy; the BODMAS full run peaked at 1.40 GiB, 7% under the 1.5 GiB cap. Phase 5 pools will be larger: re-measure before adding labels to the training pool.

  • Comparator. Headline comparator is prior-matched on training class counts but not per slot (global malware cap), so RQ1’s attribution to leakage in the random split is not tested by E0.

  • Not done. The guide’s sanity band ([verify]: PDF not decodable here, values not supplied); a per-slot-matched comparator; any investigation of the BODMAS alarm.

  • Branch. phase-04-models-e0 is cut from origin/main after the Phase 3 PR merged; nothing has been pushed.

Phase 4 config hashes

File

SHA-256

configs/e0_bodmas.yaml

36bc82c2a4c11421cc926dcb5781961ca42cfac63ea407df0f1eefbf565ca0d5

configs/e0_lamda.yaml

114dd2337c82dea1fadfdad7c180396dbb4912c833526aeefbe1fdac456954d2

uv.lock

2c5a7dfa5000f370ed1b4c1bba4c86c689a18a5bcce570be8b996fddddbca00e

Run config hashes (code version, config and lock file): BODMAS 608f15e1a6628732eb71e3e2fc1bac3ede1c704f874649b320fd1f9abc9b7957, LAMDA 613c0f98e507a8ad9d2ea70d340da5107aeb3820c773d46083d4ba167395341f.

Phase 5 closeout (13 Oct 2026)

Check

Result

uv run pytest -q; ruff check .; ruff format --check .

815 passed, 1 deselected, 84 s; All checks passed!; 160 files already formatted

uv run python scripts/check_guardrails.py

45/45 scenarios passed

HANDOFF check (check_handoff.py 5)

14 items, all exist

Queue, spy, regression, determinism, resume

S-01..S-06: d in {0,1,2,3} with property tests; spy at component and runner level; fixture ordering; three deliberate breakages caught; a BODMAS arm killed at 3 of 18 units resumed to the identical predictions hash

Evidence runs (clean commit 2bd12d6, --require-clean)

Label influence: LAMDA and BODMAS, never / 0.5% / 5%, 3 seeds; E1: both datasets, five seeds, per-slot matched comparator (E-13..E-19). Longest refit 9.9 s

Memory

BODMAS E1 peak 1.47 GiB (98.2% of the 1.5 GiB cap); two BODMAS arms in two threads crossed the cap (E-20)

Leakage review (leakage-reviewer subagent)

Pass 1: no temporal leak; 2 major (latent cache-key hazard, ADR-0007 not yet written), 5 minor, 6 informational. Fixed with tests in 0117287 and later, except three carried (feature-vector hashes through queue and pool; calibration share not yet consumed; code_version ignores untracked files). Pass 2 did not complete (API usage limit); rerun on b3ff456..HEAD

Stats review (stats-reviewer subagent)

1 blocker (comparator choice moves the RQ1 verdict), 5 major, 4 minor, 2 informational: achieved-ratio, decomposition and spread columns added, class split and per-arm denominators added, “modest” wording removed, run log and CLAIMS rows written

Gate G2

Evidence in reports/G2.md. Not decided by Claude

ADRs

ADR-0007 PROPOSED; new-label weight 1 and no truncation are the researcher’s choices (11 Oct 2026), the other rules await acceptance

Deviations and notes:

  • Branch. phase-05-simulator-e1 is cut from phase-04-models-e0 (Phase 4 is not merged); nothing has been pushed.

  • E0 path moved onto the sealed door. The E0 loop now scores through SealedSlot; E0 predictions are unchanged (E-16 reproduces the A-AUT of E-02 and E-03 to four decimals, and E0’s window-level gap is reproduced from the E1 window table).

  • Config schema. selector, delay, budget_pct, pool and policy: periodic are open; nonconf, monitors and monitor-triggered retraining stay refused. Weight other than 1 and any truncation are refused by ADR-0007. E0 configs hash as before.

  • Store. Per-unit checkpoints with --resume (needs a clean tree); predictions carry series, policy, selector, delay, budget_pct.

  • Parallelism. run_many and --workers exist and are tested; at the approved cap they cannot be used on BODMAS (G2, Open decision B).

  • Failed and superseded runs. Three BODMAS diagnostic runs at 716608f failed on the memory cap; three at fa614c3 were superseded after leakage-review code changes and give an identical table; listed in ADR-0007 and E-21. Directories under results/li/ and results/resume_check/ can be deleted by the researcher.

  • Chapters. Drafts of chapters 2, 5 and 6; sources retrieved 13 Oct 2026; descriptions from search summaries are marked [verify]; new references are listed in the chapters, not added to paper/references.bib.

  • Not done. Uncertainty and credibility selectors, conformal layer, monitors (Phases 8 and 9); a stratified within-slot comparator; a noise-floor arm for the label-influence diagnostic; a seen-before mask from the real pool.

  • Environment. C: was at 100% during the closeout and 291 tests errored once on temporary files; a rerun on the same tree passed. Free space on C: before the next long run.

Phase 5 config hashes

File

SHA-256

configs/e0_bodmas.yaml

36bc82c2a4c11421cc926dcb5781961ca42cfac63ea407df0f1eefbf565ca0d5

configs/e0_lamda.yaml

114dd2337c82dea1fadfdad7c180396dbb4912c833526aeefbe1fdac456954d2

configs/e1_bodmas.yaml

a1677b3162b1f3070bfedd52621f0837131ea1183855cd86a3c403644d72bce5

configs/e1_lamda.yaml

f55e605dd645c625b0e62caacf675f8d142bb030ab214520a2de8ddf6015476d

configs/li_bodmas_b0.5.yaml

ca077fd06a0332232da946ff41915183f7d4a99f77308c5a9f33caf1da6def20

configs/li_bodmas_b5.yaml

79e2a06f22082633d6324ec09bfee8dcd8c7e05ebee2331ff2eacf2761c0b24f

configs/li_bodmas_never.yaml

12592db8311419b049284352ffcceae0731368e24460e732e1d6a09c6c74da36

configs/li_lamda_b0.5.yaml

f1e2ce49c04fb1ee8b106e50d5eb92c8befb283f19d0e787a18957fce69749db

configs/li_lamda_b5.yaml

cae058f1d6eddcd619b88b8923f8f65f67a14f0bcf30f79f34816674e5b6d2ef

configs/li_lamda_never.yaml

3b94e93bb5b95eafdf07b033d6270d1bfb92a3088d37017ffc0cbf7e7945dc44

uv.lock

2c5a7dfa5000f370ed1b4c1bba4c86c689a18a5bcce570be8b996fddddbca00e

Run config hashes (code version, config and lock file; commit 2bd12d6): E1 BODMAS 45ea4054625ca8253d5d27f51a40f36c5057348c20ac5c15b4c5c1070a25b122, E1 LAMDA df138cc96fa9162219b70318b7179da382baf257d3e253a4b536b3b15de44e42; label influence BODMAS never ed348555adec05b60a97e5066b3ea149fd8ae44a42e3915d2c7df91509cf1636, 0.5% 8076e24d690b20ad… (see CLAIMS E-13, E-14 for the 16-digit run directories).

Phases 6 to 8: state at 16 Oct 2026

Hours reported by the researcher on 20 Oct 2026: 10 h for Phases 6 to 8 together (no per-phase split; the budgets were 24, 18 and 23 h). Report title chosen by the researcher: “How Long Does a Malware Detector Last? Label Delay, Analyst Budget and Conformal Monitoring in One Time-Aware Protocol”; if the work becomes a paper: “Detector Lifetime Under Delayed Labels: A Pre-Registered Time-Aware Study on Android and Windows PE Malware”. The phases were closed on 20 Oct 2026 after the LAMDA seeds 5 to 9 entered the E3 tables (commit e015804).

Item

State

Branches

phase-06-grid-e2 (from phase-05), phase-07-tier1-writeup (merges phase-06), phase-08-conformal-e3 (from phase-07; carries all the work, head 6e16222 plus this entry). Pushed to origin with the researcher’s go; no pull requests; tags prereg-v1 and prereg-v2 are local only (not authorised to push)

Registered

tag prereg-v1 on c26aa5f (15 Oct 2026, before any E2 result); tag prereg-v2 on f38858e (before any E3 result); ADR-0006, ADR-0007, ADR-0008, ADR-0009 ACCEPTED; G1 PASS and G2 PASS recorded as the researcher’s decisions

E2 grid

54 of 54 cells complete (27 per dataset), 0 failed, code version c26aa5f; tables reports/tables/e2_*.csv, figures reports/figures/e2_*.png, regenerate byte for byte (CLAIMS E-26 to E-39); cell config hashes in reports/tables/e2_ledger.csv

E3 grid

BODMAS 28 of 28 complete and LAMDA 28 of 28 complete (Main cells seeds 0 to 9; the LAMDA seeds 5 to 9 cells were added on 20 Oct 2026); none failed; code version f38858e; tables reports/tables/e3_*.csv, figure reports/figures/e3_selection.png (CLAIMS E-40 to E-47); cell config hashes in reports/tables/e3_ledger.csv

Gate evidence

reports/G3.md written; the decision is the researcher’s

Claims audit

PASS (reports/claims_audit.md)

Tests

839 fast tests pass in about 43 s; the E3 slow modules pass (13 tests); ruff clean; guardrails 45 of 45

Reviews

stats: E2 two passes (review) and E3 one pass (review), major findings applied; leakage: E2 second pass (ADR-0008) and E3 (review): no leak; trap-arm confound and hold-out cut recorded and open

Clean-clone reproduction

driftwatch reproduce table1 MATCH on a clean clone, 31 min (CLAIMS E-24)

Open items for the researcher (updated 20 Oct 2026)

  1. Gate G3 (see reports/G3.md), and whether the chapter drafts count as “core chapters exist”.

  2. Hours for Phases 6, 7 and 8.

  3. The E3 trap arm (confounded with not retraining) and the hold-out cut that deviates from ADR-0004 item 8: rerun under an addendum, or keep the recorded caveats.

  4. LAMDA E3 seeds 5 to 9: done on 20 Oct 2026 (decided by the researcher).

  5. Whether to push the tags and open pull requests.

  6. The [verify] markers in chapters 2, 4 and 5 (including “Li et al., NDSS 2025”).

Housekeeping not yet done

phase-06 and phase-07 are contained in phase-08 (no merge needed); the worktree E:\DriftWatch-grid is removed and E:\DriftWatch-e3 (code version f38858e) can be removed once no further E3 run is planned; E:\tmp-clean-clone can be deleted by the researcher. Tags prereg-v1 and prereg-v2 are pushed; one pull request for phase-08-conformal-e3 is the next step.

Phases 6 to 8 config hashes

Hashes of the config files and the lock at the closeout (commit e015804). The per-cell run config hashes (config, code version and lock) are in reports/tables/e2_ledger.csv and reports/tables/e3_ledger.csv.

File

SHA-256

configs/e0_bodmas.yaml

36bc82c2a4c11421cc926dcb5781961ca42cfac63ea407df0f1eefbf565ca0d5

configs/e0_lamda.yaml

114dd2337c82dea1fadfdad7c180396dbb4912c833526aeefbe1fdac456954d2

configs/e1_bodmas.yaml

a1677b3162b1f3070bfedd52621f0837131ea1183855cd86a3c403644d72bce5

configs/e1_lamda.yaml

f55e605dd645c625b0e62caacf675f8d142bb030ab214520a2de8ddf6015476d

configs/e2_bodmas.yaml

efabb09e34fce610ec11b51c1369f0b6bb486eb22922286822df67a5aefa74ff

configs/e2_lamda.yaml

b57b5b08270ed170c22d4b266cb9627840517ec4d89f34d7ee55247c9fcc8f77

configs/e3_bodmas.yaml

06a640b53b40059979dcac714cf70a76b94bfa5e47b9d243bad8935f09d02189

configs/e3_lamda.yaml

4f0181081e658b660a6e0dd7048344bab1139c63af4ad8efb0c6f72d43e439d2

configs/li_bodmas_b0.5.yaml

ca077fd06a0332232da946ff41915183f7d4a99f77308c5a9f33caf1da6def20

configs/li_bodmas_b5.yaml

79e2a06f22082633d6324ec09bfee8dcd8c7e05ebee2331ff2eacf2761c0b24f

configs/li_bodmas_never.yaml

12592db8311419b049284352ffcceae0731368e24460e732e1d6a09c6c74da36

configs/li_lamda_b0.5.yaml

f1e2ce49c04fb1ee8b106e50d5eb92c8befb283f19d0e787a18957fce69749db

configs/li_lamda_b5.yaml

cae058f1d6eddcd619b88b8923f8f65f67a14f0bcf30f79f34816674e5b6d2ef

configs/li_lamda_never.yaml

3b94e93bb5b95eafdf07b033d6270d1bfb92a3088d37017ffc0cbf7e7945dc44

uv.lock

2c5a7dfa5000f370ed1b4c1bba4c86c689a18a5bcce570be8b996fddddbca00e

Phase 9 config hashes

File

SHA-256

configs/e0_bodmas.yaml

36bc82c2a4c11421cc926dcb5781961ca42cfac63ea407df0f1eefbf565ca0d5

configs/e0_lamda.yaml

114dd2337c82dea1fadfdad7c180396dbb4912c833526aeefbe1fdac456954d2

configs/e1_bodmas.yaml

a1677b3162b1f3070bfedd52621f0837131ea1183855cd86a3c403644d72bce5

configs/e1_lamda.yaml

f55e605dd645c625b0e62caacf675f8d142bb030ab214520a2de8ddf6015476d

configs/e2_bodmas.yaml

efabb09e34fce610ec11b51c1369f0b6bb486eb22922286822df67a5aefa74ff

configs/e2_lamda.yaml

b57b5b08270ed170c22d4b266cb9627840517ec4d89f34d7ee55247c9fcc8f77

configs/e3_bodmas.yaml

06a640b53b40059979dcac714cf70a76b94bfa5e47b9d243bad8935f09d02189

configs/e3_lamda.yaml

4f0181081e658b660a6e0dd7048344bab1139c63af4ad8efb0c6f72d43e439d2

configs/e4_bodmas.yaml

ce502a98352ff9630bfa7e6a3f461de51433409567f3fe5ef5c7cf561366e733

configs/e4_lamda.yaml

e2e856bb3c160a969389d13d63d3f6c497ef5b3e46da610bffd31ac12ff35b0e

configs/li_bodmas_b0.5.yaml

ca077fd06a0332232da946ff41915183f7d4a99f77308c5a9f33caf1da6def20

configs/li_bodmas_b5.yaml

79e2a06f22082633d6324ec09bfee8dcd8c7e05ebee2331ff2eacf2761c0b24f

configs/li_bodmas_never.yaml

12592db8311419b049284352ffcceae0731368e24460e732e1d6a09c6c74da36

configs/li_lamda_b0.5.yaml

f1e2ce49c04fb1ee8b106e50d5eb92c8befb283f19d0e787a18957fce69749db

configs/li_lamda_b5.yaml

cae058f1d6eddcd619b88b8923f8f65f67a14f0bcf30f79f34816674e5b6d2ef

configs/li_lamda_never.yaml

3b94e93bb5b95eafdf07b033d6270d1bfb92a3088d37017ffc0cbf7e7945dc44

uv.lock

2c5a7dfa5000f370ed1b4c1bba4c86c689a18a5bcce570be8b996fddddbca00e

Phase 10 config hashes

No config file changed in Phase 10; the hashes are those of the Phase 9 table above (E4 configs as registered at prereg-v3).

Phase 11 config hashes

No config file changed in Phase 11 (git log phase-10-polish..HEAD for configs and uv.lock is empty); the hashes are those of the Phase 9 table above, and uv.lock is 2c5a7dfa5000f370ed1b4c1bba4c86c689a18a5bcce570be8b996fddddbca00e.

Phase 12 config hashes

No config file changed in Phase 12 (config_hashes.py gives the Phase 9 hash for every file under configs/). uv.lock changed: it now carries version 0.1.0 of the project and the docs dependency group (Sphinx, MyST, Furo and their dependencies; sphinx-copybutton was added and then removed); no runtime or development pin moved. Committed lock on phase-12-release: 5a94849d17b7ae4626dc3bafa97a3d6329525ec2cae65e304a8f58e944e20919 (84 locked packages besides the project). The stored results of E0 to E4 carry the earlier lock hash in their run records and are unaffected; a new run would carry the new one. The maintenance branch maint/2026-10-first-run upgrades the lock further (see reports/maintenance/2026-10-first-run.md) and is a separate pull request.