Maintainer Handbook¶
Maintaining bijux-phylogenetics means preserving one coherent contract across
runtime code, three distributions, command and schema surfaces, generated
artifacts, 43 Evidence Book bundles, documentation, and release metadata. A
change is complete only when its canonical owner, projections, and dependent
assurance records agree.
flowchart TD
change["Proposed change"]
classify["Classify contract and<br/>scientific impact"]
owner["Resolve canonical owner"]
implement["Implement and test<br/>owned behavior"]
derive["Regenerate governed<br/>derivatives"]
assure["Re-evaluate affected<br/>benchmarks and evidence"]
align["Align packages, interfaces,<br/>docs and release reports"]
complete{"Coherent and verified?"}
change --> classify --> owner --> implement --> derive --> assure --> align --> complete
Maintain The Promise A Reader Actually Sees¶
Repository mechanics are means, not the public product. For every change, translate the internal work into the external promise that must remain true:
| Internal change | Reader-visible promise to re-evaluate |
|---|---|
| numerical implementation or default | the documented estimand, result, diagnostics, examples, parity scope, and evidence freshness still agree |
| parser, schema, or manifest | an existing result can still be identified, interpreted, and consumed without silent loss |
| adapter or external-engine support | computation ownership, unavailable state, native outputs, and accepted handoff remain explicit |
| Evidence Book observation or verdict | every public scientific sentence stays inside the current claim and denominator |
| documentation navigation or rendering | readers can still reach the owning contract and distinguish source facts from projections |
Public scientific pages should contain the resulting method, evidence, and limitation—not the maintenance checklist used to keep them correct. This handbook owns that checklist so internal process language does not leak into a study explanation or product guide.
Maintained Invariants¶
| Invariant | Failure signal | Owning response |
|---|---|---|
| runtime, alias, and maintainer distributions retain distinct roles | alias gains scientific code or maintainer helpers leak into runtime | restore package boundary and clean-install proof |
| native and external computation remain attributable | adapter output is described as native | correct ownership at source, result, docs, and evidence surfaces |
| structured records own scientific values | a report contains a value absent from JSON or a ledger | add the machine owner before the projection |
| manifests expose identity, inventory, and partial state | successful files hide failed or missing components | repair producer/consumer contract and retained denominator |
| evidence verdicts remain claim-scoped and fresh | broad prose cites neighboring or stale bundles | resolve exact claim, dependency, and freshness owner |
| generated content remains generated | synchronized or indexed output is hand-edited | change the generator or canonical source and regenerate |
| local execution preserves repository hygiene | caches, sites, logs, or reports appear outside artifacts/ |
correct the execution surface and artifact governance |
Review Changes From The Reader Decision Backward¶
A maintainer change is complete when every public decision affected by the change resolves to one coherent repository state. Begin with the strongest decision a consumer could make from the changed surface, then walk backward to the canonical owner and forward through every projection.
flowchart RL
publication["Publication or claim<br/>decision"] --> evidence["Evidence or comparison<br/>record"]
evidence --> artifact["Structured artifact<br/>and manifest"]
artifact --> result["Typed result<br/>and diagnostics"]
result --> owner["Canonical runtime,<br/>schema, or policy owner"]
| Changed statement or surface | First question | Required closure |
|---|---|---|
| capability wording | which exported method and supported composition owns it? | implementation, installed surface, examples, limits, and tests agree |
| numerical or scientific statement | which observation and acceptance rule owns the value? | source inputs, execution, denominator, comparison, verdict, and freshness agree |
| artifact field or omission | which producer defines presence, status, unit, and identity? | producer, old/new consumers, schema, migration behavior, and reports agree |
| package or command promise | which built distribution exposes the behavior? | wheel/sdist inventory, clean install, invocation, exit/refusal semantics, and docs agree |
| release claim | which exact candidate and child reports were evaluated? | revision, versions, artifacts, evidence, limitations, and decision owner form one packet |
Editing the nearest prose is insufficient when the contradiction originates in code, schema, generated evidence, or release policy. Correct the earliest owner, regenerate derived records, and then review the public statement in its final rendered context.
Keep Status In Its Owning Record¶
| Record | Governed status | Maintenance rule |
|---|---|---|
| runtime or command | complete, partial, refused, failed, skipped as defined by that contract | preserve component inventory, diagnostics, and failure owner |
| live parity case | passed, failed, skipped |
retain selected denominator, raw reference output, and mismatch reason |
| native benchmark observation | native-advantage, native-bug, expected-assumption-difference, unsupported-case |
quote case and dimension; do not generalize aggregate status |
| Evidence Book bundle | matched, matched_with_tolerance, mismatch_explained, mismatch_unexplained, not_comparable |
change only through governed checks, observations, and adjudication |
| resolution work | open or blocked follow-through | name the missing execution, primary output, observation, or decision |
| release gate | ready or blocked by readiness policy | do not infer scientific equivalence from publication eligibility |
These namespaces are not interchangeable. An open comparison effort does not
create an “open” bundle verdict. A ready release can still publish explicit not_comparable boundaries.
A passed live parity case does not promote itself into Evidence Book evidence.
Change Classification¶
| Change | Canonical owner | Required dependent review |
|---|---|---|
| Python signature or typed result | runtime export and result contract | compatibility tests, API docs, examples, serialization consumers |
| CLI command, option, default, or exit behavior | registered parser and handler | CLI tests, workflow docs, automation examples |
| artifact schema or manifest | producer and versioned contract | consumer tests, compatibility policy, replay, evidence freshness |
| numerical method, model, tolerance, or default | scientific implementation | known answers, properties, benchmarks, parity, affected study claims |
| external adapter or parser | engine workflow boundary | controlled and real-engine lanes, provenance, incomplete-run recovery |
| package dependency, metadata, or alias | distribution configuration | package boundaries, wheel/sdist inventory, clean install, public metadata |
| Evidence Book input, claim, check, or output | exact bundle and registry | checksums, indexes, freshness, study docs, release language |
| documentation statement or example | owning runtime/evidence record | strict build, semantic truth test, cross-surface claim review |
| release/version policy | release governance | all candidate identities, artifacts, docs, and readiness packets |
If one change fits several rows, take the union of their dependent review.
Close The Change Dependency Graph¶
A change is not complete when only its nearest projection agrees. Record the dependency graph from canonical owner to every consumer whose meaning, freshness, compatibility, or release decision can change.
| Dependency edge | Closure evidence | Incomplete when |
|---|---|---|
| implementation → public interface | contract tests and curated export or command inventory | an internal path passes while the installed surface differs |
| interface → artifact producer | schema/result tests with complete, partial, refused, and warning states | only the happy-path payload was reviewed |
| artifact → consumer or report | round-trip, omission, unit, status, and lineage checks | presentation survives but structured semantics drift |
| numerical method → benchmark/parity | material-dependency and corpus review plus affected observations | old results remain current by date or filename alone |
| result/comparison → Evidence Book claim | immutable dependency, check, verdict, and freshness record | capability proximity substitutes for claim consumption |
| any public contract → package/docs/release | built-artifact proof, projections, limitation review, and readiness decision | one distribution or reader surface retains prior meaning |
An explicitly unaffected edge still needs a reason tied to semantics, not a claim that its files were outside the diff. The final handoff identifies every closed, unaffected, blocked, and unexecuted edge.
Leave A Closure Receipt¶
The durable unit of completion is a closure receipt, not a list of changed files. It identifies the owned contract and before/after meaning, classifies compatibility and scientific impact, enumerates every dependent edge, and links each verification outcome to the exact revision or artifact it checked. It also carries unresolved limitations and the publication decision they constrain.
A reviewer must be able to reconstruct why an edge was changed, regenerated, declared unaffected, or blocked. “No diff” is not evidence that a dependency was reviewed, and a successful command without its selected population and input identity is not a closed verification edge.
Scale Review By Semantic Risk¶
Diff size does not determine review depth. Use the strongest applicable risk:
| Semantic risk | Examples | Required review depth |
|---|---|---|
| local explanatory | wording that preserves contract meaning | strict docs, links, truth assertions, neighboring consistency |
| public invocation | import, command, option, default, example | contract tests, generated references, installed-artifact execution, compatibility |
| artifact compatibility | field, schema, status, unit, omission, manifest relationship | producer/consumer matrix, versioning decision, replay, migration behavior |
| scientific behavior | model, likelihood, optimizer, sampler, reconstruction, tolerance | numerical properties, known answers, diagnostics, benchmarks, parity, evidence freshness |
| claim or publication | verdict, evidence population, limitation, release statement | governed observations, indexes, contradiction audit, readiness packet and decision owner |
A one-line default or unit change may require every row beneath it. A large generated reference diff may require only local explanatory review when the canonical contract and semantics are unchanged.
Resolve Contradictions Before Completion¶
flowchart TD
conflict["Two surfaces disagree"]
classify["Classify behavior, artifact,<br/>evidence or publication conflict"]
owners["Resolve canonical owner<br/>and dependency direction"]
evidence["Inspect structured records<br/>and failure artifacts"]
correct["Correct earliest owning source"]
derive["Regenerate projections<br/>and dependent records"]
verify["Re-run narrow and<br/>composed gates"]
conflict --> classify --> owners --> evidence --> correct --> derive --> verify
Do not choose the more favorable surface, average conflicting values, or call the discrepancy a documentation issue before ownership is known. A limitation is an agreed bounded contract; a contradiction is unresolved state and blocks the affected claim or publication surface.
Resolve Canonical Ownership¶
Follow the disputed value or rule to the earliest runtime, schema, bundle, or governance record that defines it. Generated references, READMEs, handbook pages, metadata, benchmark summaries, and release reports are consumers of those owners. Correct the owner, regenerate governed projections, then verify the final reader decision. Never edit a later projection to mask an upstream numerical, provenance, compatibility, or status defect.
Change-To-Check Routing¶
| Changed surface | Minimum narrow check before composed gates |
|---|---|
| docs or examples | semantic documentation tests, codespell, strict MkDocs |
| public runtime or CLI | focused contract tests plus installed command proof |
| artifact producer/consumer | schema, round-trip, failure, path, checksum, and replay tests |
| external engine | engine_contract; selected engine_real where available |
| numerical method | known-answer/property tests plus affected benchmark/parity lane |
| Evidence Book | exact unit input/artifact checks, study build, full validation and freshness |
| package boundary | boundary audit, distribution build, clean-install smoke |
| release governance | report and check forms of every affected readiness surface |
The narrow check accelerates diagnosis; it does not remove downstream checks from the final verification set.
Continue With The Owning Handbook¶
| Maintenance question | Owning handbook | Leave with |
|---|---|---|
| Which source owns a public statement or generated reference? | Documentation system | canonical owner, affected projections, reader contract, documentation checks |
| Can a capability, comparison, or evidence statement be published? | Trust surfaces | one revision-coherent trust packet and bounded language |
| Where should a run write, what may be committed, and which release gate applies? | Repository operations | command receipt, governed/transient classification, validation and candidate identity |
Release Evidence¶
Retain commit, resolved version, lock, distribution filenames and hashes, metadata, clean-install outcomes, API hash, strict docs result, evidence and artifact-governance reports, optional-engine denominator, benchmark and parity observations, bounded limitations, readiness output, and decision owner.
“CI passed” is not a reconstructable release packet. Skipped optional engines, deselected slow tests, unsupported comparisons, and non-comparable evidence must remain visible.
Escalation Boundaries¶
Stop and treat the condition as a blocker when package identity, schema compatibility, artifact integrity, evidence provenance, or candidate identity cannot be established. Do not repair a failing verdict by weakening tolerance, removing a case, or changing prose. Do not patch generated shared standards in the downstream repository. Do not broaden a claim because an adjacent method passes.
A bounded limitation can remain when its owner, status, scope, and resolution path are explicit. A contradiction cannot be accepted as a limitation.