Repository navigation
Research audit handoffs of 2026-09-20 to 2026-09-25 have no record here: catalogue, what #31 repairs, what remains #35
Description
Found by the review of 2026-09-25.
The finding
Since 2026-09-20 the research process has been running bounded static audits of this repository at master a8726f5, about one per hour, and recording each with a verdict and a named regression boundary. Between 2026-09-20 and today it produced roughly fifty of them, some forty with the verdict REPAIR REQUIRED. By its own rules it records them on Drive (the handoff document ANSWERS_TO_IMPLEMENTER and the owner's mirror folder) and does not open issues for members of a family it considers already tracked, which for most of them is #12. The result is that the repository had no record of them: no issue names them, the roadmap's standing obligation ("research finding: adopt it, or record why not, before continuing queued work") could not fire, and PR #31 claimed to adopt every delivered judgement while about forty findings sat next to it unread.
This issue is the catalogue, so the obligation can be worked from here. PR #31 repairs the first group; the rest are open.
Repaired in #31
| Unit | Repair |
|---|---|
PV-AUDIT-GITHUB-REPO-PAYLOAD-001, -COMMITS-, -CR-, -ISSUES-, -BRANCH-, -RELEASE-, -CI-PAYLOAD-001 |
every consumed field of a successful payload is typed evidence; a malformed row is ERROR / UNEXPECTED_PAYLOAD for that inventory alone; a probe reproduced 26 escaping shapes before, none after |
PV-AUDIT-REGISTER-STATE-001 (narrowing PV-AUDIT-REGISTER-SHAPE-001's state field) |
a register state outside the vocabulary is INVALID_REGISTER, never an open item |
PV-AUDIT-GITHUB-RETRY-HEADER-001 |
an unreadable wait hint is no hint; bounded backoff, then the answer's own classification |
PV-AUDIT-GITHUB-REDIRECT-AUTH-001 |
redirects are followed only to the configured API origin; the bearer token never leaves it |
PV-AUDIT-GITHUB-CACHE-INTEGRITY-001 |
devostasis.http-cache.v2 with a body digest per entry; a bad entry is a miss and one refetch |
PV-AUDIT-CANONICAL-NONFINITE-001, -DECIMAL-001, -UNICODE-001, PV-AUDIT-CANONICAL-JSON-PARSER-001 |
one strict decoder behind every canonical read |
PV-AUDIT-HISTORYSTORE-001 |
an unreadable index elsewhere fails the identity lookup instead of passing for absence |
PV-AUDIT-FLEET-INDEX-001, PV-AUDIT-FLEET-COVERAGE-001 |
an unreadable index, an unfollowable tail or a present but unreadable demand member stops the fleet surfaces |
PV-AUDIT-HISTORYSTORE-ATOMIC-PUBLICATION-001 |
atomic index replacement, index before copy, a stale copy is recovered rather than a gap |
PV-AUDIT-STORE-PATH-001 |
a locator derives a store path only as a name triple strictly beneath projects/; the configuration admits only names |
PV-AUDIT-STORE-BUNDLE-PATH-BINDING-001, PV-AUDIT-STORE-PROJECT-BINDING-001 |
a wrapper whose bundle_id or project_key disagrees with its manifest is refused before any write; the index tail is bound to its canonical path and to this project's identity |
PV-AUDIT-PROJECT-LOCATOR-ALIAS-001 |
case variants are one configured project; two locators the provider resolves to one repository are observed once per run |
PV-AUDIT-CONFIG-SHAPE-001 (the two concrete mismatches) |
activity.enabled must be a boolean, store an object |
Open, with the boundary each names
Timestamp and chronology family (runs 382 to 395). The researcher's cross-run conclusion is that timestamp authority is fragmented across parser, formatter, adapter, normalization and classifier, and that one strict instant-admission layer should replace independent checks. That is the right shape for the repair and it is not a one-evening change, so it is its own PR:
| Unit | Finding |
|---|---|
PV-AUDIT-TIMESTAMP-TIMEZONE-001 |
a timezone-naive timestamp is silently read as UTC; it must fail closed (TIME-TZ-01..08) |
PV-AUDIT-TIMESTAMP-GRAMMAR-001 |
parse_ts and exact_epoch_seconds do not share one lexical language (TIME-GRAMMAR-01..08) |
PV-AUDIT-TIMESTAMP-LEAPSECOND-001 |
v1 narrows to seconds 00..59; :60 fails closed; schema and runtime must agree (TIME-LEAP-01..08) |
PV-AUDIT-TIMESTAMP-NAIVE-DATETIME-001 |
formatting helpers accept naive datetime objects and depend on the host zone |
PV-AUDIT-TIMESTAMP-FRACTIONAL-ORDER-001 |
fractional seconds are truncated before ordering and window checks (FRACTIONAL-TIME-01..08) |
PV-AUDIT-MERGE-DURATION-ORDER-001 |
an inverted created_at -> merged_at is clamped to zero and can lower the Flow median (MERGE-ORDER-01..08) |
PV-AUDIT-OPEN-AGE-ORDER-001 |
a future-created open change request becomes age 0 (OPEN-AGE-ORDER-01..08) |
PV-AUDIT-COMMIT-WINDOW-UPPER-BOUND-001 |
commits after observed_at inflate Pulse; no committed_at <= observed_at guard (COMMIT-WINDOW-01..08) |
PV-AUDIT-FORGE-WINDOW-UPPER-BOUND-001 |
the same for merges, updates, issue and debt events (FORGE-WINDOW-01..08) |
PV-AUDIT-STALE-UPDATE-ORDER-001 |
updated_at < created_at inflates stale counts (STALE-UPDATE-ORDER-01..08) |
PV-AUDIT-BRANCH-HEAD-FUTURE-001 |
a branch head after observed_at is exact non-stale evidence (BRANCH-TIME-01..08) |
PV-AUDIT-OPEN-SNAPSHOT-ORDER-001 |
state=OPEN is trusted without created_at <= observed_at; can dilute Clutter and contaminate Debt (OPEN-SNAPSHOT-01..08) |
PV-AUDIT-CR-MERGE-STATE-CONSISTENCY-001 |
OPEN plus merged_at counts as both open and merged (CR-MERGE-STATE-01..08) |
PV-AUDIT-DEBT-LIFECYCLE-ORDER-001 |
a closed debt item whose closed_at is after observed_at or before opened_at leaves the open count (DEBT-LIFECYCLE-01..08) |
Verifier and lineage family (runs 337 to 348). These ask verification to dispatch on the exact stored lineage before interpreting a member, and to validate each member structurally under that lineage: PV-AUDIT-BUNDLE-LINEAGE-001, PV-AUDIT-MANIFEST-SHAPE-001, PV-AUDIT-MANIFEST-PREIMAGE-BINDING-001 (the renderer_version replay-skip bypass is concrete), PV-AUDIT-OBSERVATION-LINEAGE-001 (saved observations are not dispatched on schema / observation_contract_version), PV-AUDIT-VECTOR-LINEAGE-001, PV-AUDIT-SNAPSHOT-LINEAGE-001 (Vital order and uniqueness not enforced), PV-AUDIT-DEMAND-LINEAGE-001, PV-AUDIT-OBSERVATIONS-MEMBER-LINEAGE-001, PV-AUDIT-SEMANTIC-CONFIG-BINDING-001, PV-AUDIT-RECEIPT-DIGEST-BINDING-001, PV-AUDIT-SNAPSHOT-MANIFEST-BINDING-001, PV-AUDIT-GAUGE-SNAPSHOT-BINDING-001. Several overlap #12 finding 4, which 0.1.9 repaired in part (the metadata binding); the lineage dispatch itself is the accepted compatibility policy's job (PV-COMPAT-002, see the Phase B/C issue), so this family is best done together with that adoption rather than piecemeal.
Store and transport, remaining: PV-AUDIT-HISTORYSTORE-CONCURRENCY-001 (no same-project writer serialization; concurrent commits can race on latest.staging), PV-AUDIT-HISTORYSTORE-RENAME-RECOVERY-001 (relocation happens before the new bundle, copy and index are complete; a failure mid-way leaves a moved directory), PV-AUDIT-GITHUB-PAGINATION-LINK-001 (an exact-cap full final page is reported PARTIAL although the absence of rel="next" proves completeness; GH-PAGINATION-LINK-01..06), PV-AUDIT-RENDER-OBSERVABILITY-TRUTHFULNESS-001 (the observability section of the report), PV-AUDIT-REGISTER-SHAPE-001 beyond the state field (target-id pattern, duplicate members in register JSON, full schema validation), PV-AUDIT-CONFIG-SHAPE-001 beyond the two concrete mismatches (complete schema validation before defaults).
Produced today (runs 397 to 403), read only through their one-line handoffs, so each needs reading in full against the new head before it is worked: PV-AUDIT-GITHUB-RESPONSE-SIZE-001 (the transport must bound raw response bytes from the stream before parsing, on 2xx and error paths alike, and surface overflow as ERROR / RESPONSE_TOO_LARGE; GH-RESPONSE-SIZE-01..08), PV-AUDIT-CLI-PROVIDER-ENDPOINT-001 (ENDPOINT-BINDING-01..08), PV-AUDIT-GITHUB-CACHE-CONTEXT-001 (cache entries must be namespaced by the normalized API base and representation context before configurable endpoints exist; GH-CACHE-CONTEXT-01..08), PV-AUDIT-GITHUB-BASE-TLS-001 (fail-closed validation of a configured provider base before transport dispatch; GH-BASE-TLS-01..08), PV-AUDIT-GITHUB-CHECK-SUITES-PAYLOAD-001 and PV-AUDIT-GITHUB-PAGINATED-ROW-SHAPE-001 (the check-suite and per-row shapes #31 now validates; to be checked case by case against GH-CHECK-SUITES-PAYLOAD-01..08), and PV-AUDIT-TARGET-MARKER-SYNTAX-001 (the Target: marker must be parsed as a standalone configured syntax, not as text embedded in a larger token such as SubTarget: B1; LINK-MARKER-01..08; it also assumes the state-neutral linkage of the Direction repair tracked in #33).
Verified non-findings, for the record: PV-AUDIT-STORE-IMMUTABLE-COLLISION-001, PV-AUDIT-GITHUB-PAGINATION-STOP-001, PV-AUDIT-CANONICAL-NUMBERS-001, PV-AUDIT-REPORT-RENDER-BINDING-001.
Two process observations
- The research side's deduplication rule ("same family as Review of 0.1.7: Integrity accuracy, bundle verification, and history reliability #12, no new issue") makes Review of 0.1.7: Integrity accuracy, bundle verification, and history reliability #12 the nominal home of some thirty findings that nobody reading Review of 0.1.7: Integrity accuracy, bundle verification, and history reliability #12 can see. The obligation in the roadmap is only workable if every REPAIR REQUIRED unit has a line somewhere in this repository. Proposal: this issue is that place until each family has its own PR, and the implementation side (not the researcher) keeps it current when it reads the handoff document; a session that starts here reads
ANSWERS_TO_IMPLEMENTERfirst, as the memory of this project already says it should. - The owner's Drive mirror has one copy error: the document titled
PV-AUDIT-FORGE-WINDOW-UPPER-BOUND-001holds the text ofPV-AUDIT-CANONICAL-DECIMAL-001. The research status report for runs 385 to 396 already notes "an accidentally copied 03 - Work document remains non-authoritative"; the mirror copy should be replaced from the canonical one before anyone implementsFORGE-WINDOW-01..08from it.
Activity
Reconcile the roadmap with what the research process delivered
drevendev commentedon Sep 30, 2026
Catalogue update from the review of 2026-09-30 (#48): what the research process handed off since this issue was written (runs 404 to 410), read in full from the handoff document and the registry, and two units of the payload family that #31 had only started.
PV-AUDIT-RECEIPT-OBS-CONSISTENCY-001(run 404)RCPT-OBS-01..08PV-REV-PR-037(run 405)PV-REV-PR-029-003(run 406)/actions/workflowspayload repair on #29PV-REV-PR-031-003(run 408)clutter.bands.v1promoted any freshPARTIALcount to a floor without subset proof;CLU-PARTIAL-TRUST-01..08PV-REV-PR-036(run 409)PV-RELEASE-020-001(run 410)PV-AUDIT-GITHUB-REGISTER-PAYLOAD-001(run 368)contentraisedTypeError, a missingsizedefaulted to 0 and passed the byte bound, base64 was permissivesize; #49 repairs the rest (required size, string content, strict base64, decoded-length bound, depth)PV-AUDIT-GITHUB-MILESTONE-PAYLOAD-001(run 369)statereads as open, missing counts become 0, a pull request's embedded milestone of the wrong type becomes a target idThe re-review of
PV-AUDIT-MANIFEST-PREIMAGE-BINDING-001that andy-zen-dev posted on #31 on 2026-09-26 (therenderer_versiondeletion bypass named in the verifier family above) is repaired on #31, and #49 extends it to the exact preimage field set of each lineage and to every member the preimage hashes.Also open from the same review, in the spirit of this catalogue (no value is coerced, defaulted or skipped): the issue and pull-request
stateread asOPENwhen null or missing,pull_request: {}or0keeps a row as an issue, missingdraftandprotectedbecomefalse, and an enumeration the budget refused on its first page isPARTIALwith an empty list (and derives aPARTIAL"SUPPORTED" planning capability) where observations.md says an inventory never started isUNKNOWN.The rest of this catalogue stands as written: the timestamp and chronology family, the remaining verifier and lineage family, store concurrency and rename recovery, and the transport units of runs 397 to 403 are open, and the 0.2.0 candidate files them under wave A (#47).
🤖 Generated with Claude Code
drevendev commentedon Sep 30, 2026
PV-AUDIT-TARGET-MARKER-SYNTAX-001is repaired in #53 (0.2.0): the configured marker is a standalone token, soSubTarget: B1,NotTarget: B1andPreTarget:B1link nothing, and a marker ending in a letter needs a boundary after it too.Its regressions
LINK-MARKER-01..08reached this repository only as the categories of the handoff (exact marker, embedded-prefix negatives, custom markers, multiple markers, prose without the marker, end-to-end file planning).tests/test_linkage_markers.pycovers each category and says it does not claim the individual case texts; if the research side publishes the eight texts, they can be cited case by case.🤖 Generated with Claude Code
drevendev commentedon Oct 16, 2026
Catalogue delivery update — 2026-10-16
Three later independent reviews are now publicly delivered in the pinned PR #75 handoff, not merely referenced as private backlog:
PV-REV-CI-ATTEMPT-STATE-ADMISSION-001: legitimate UNKNOWN attempt outcomes and unrecognized state strings can be reduced to apparently complete non-failing history. Six isolated admission/reduction checks, including three controls, were executed. Keep same-attempt unresolved-to-pass transitions and sticky failures valid.PV-REV-CI-TIMESTAMP-PARSE-001: malformed current timestamps can contaminate the durable carrier; rejecting that carrier on a later read can lose failure evidence. The four-bundle persistence/recovery regression is specified, not executed end to end.PV-REV-OFFLINE-UNAVAILABLE-REASON-001: recognized exclusion labels do not substantiate their cause. PARTIAL remains PARTIAL, but an unjustified omission can hide a finding. Tree-backed predicates and unproved blob-size metadata must be treated separately.All were reread against
09d497f16520b6dc20f5dd42077ff76774e1f5e1. Verdicts are source-level CHANGES_REQUIRED; implementation and package-level verification remain outstanding. The PR handoff contains examples, repair boundaries and the proposed regression families. No accepted historical identifier or normative contract was changed by publication.For implementation triage: keep the two CI-history repairs with the existing admission/history family (#38 and this catalogue), and the source-exclusion repair with #75. Do not fold source-exclusion authenticity into #73 as though independent ancestry proof fixed it. #73 concerns another evidence boundary. The earlier extra-attempt/duplicate-current-inventory review remains a separate, already public input.
The next useful output is a finite repair plus regression evidence and an adoption receipt naming the final release head, not another duplicate issue or repeated unchanged audit. This catalogue entry does not claim merge/release authority or completion of those repairs.
Publication receipt:
DV-MANUAL-20261016-I35-63b9d42a.