Skip to content

Release 0.2.0: adopt the accepted Direction, Horizon, Debt and T9 repairs, and carry Integrity history across bundles (B3) - #53

Open
drevendev wants to merge 7 commits into
masterfrom
release/0.2.0
Open

drevendev wants to merge 7 commits into
masterfrom
release/0.2.0

Conversation

@drevendev

Copy link
Copy Markdown
Owner

The adoption release. Every accepted research contract about the Vitals and their history that this repository had not adopted, and that needs no owner decision, lands here: the repairs of Direction, Horizon and Debt that #33 lists, the final T9 reconciliation, and target B3, durable Integrity revision history (PV-HIST-002, #34). The owner asked for a large next release on 2026-09-30 (#47); its candidate specification (PV-RELEASE-020-001) is not accepted yet, so this is the part of that ambition that rests on accepted contracts. No threshold, window, gauge constant or demand mapping changed; four rule ids moved, each with the judgement that moved it.

Target: B3

How to read it

Nine commits, one per family, each with its tests and specification pages: the three Vital repairs, durable history, T9, the carrier size fixes the live run found, the release, a robustness fix, and the targets register. About 1,300 lines of source; most of the 13,000 added lines are the generated vector corpus. #47 proposed doing 0.2.0 as a series of small pull requests; this one is its Wave A work that rests on accepted contracts (W05's durable CI contribution and W06's marker grammar, subset trust and Direction repair), shipped as the major release the owner asked for, and the commits are cut so they can be reviewed one by one.

What changes

Vital Rule Accepted units Cases
Direction direction.bands.v1.1 → direction.bands.v2 PV-REV-DIRECTION-CLOSED-TARGET-001, PV-DIRECTION-INCOMPLETE-001 DIR-CLOSED-01..09, DIR-INCOMPLETE-01..16 (vectors)
Horizon horizon.bands.v1 → horizon.bands.v2 PV-HORIZON-PARTIAL-001 HOR-PARTIAL-01..16 (vectors)
Debt debt.bands.v1.1 → debt.bands.v2 PV-DEBT-PARTIAL-001, the Debt part of #39 DEBT-PARTIAL-01..16 (vectors)
Integrity integrity.bands.v1+ci-unit-004 → …+hist-002 PV-HIST-002 HIST-01..20 (14 vectors, 5 store tests; HIST-14 has no accepted migration to execute)
all — PV-TEST-004 (T9) a generator of ~1,270 cells over the nine former gap families
  • Direction: linkage is state-neutral, so closing the target a change delivered no longer un-links it (calibration finding 9). Each active change request is LINKED, UNLINKED (including a reference a complete register lacks, DIRECTION_TARGET_REFERENCE_MISSING) or UNRESOLVED, and incomplete linkage is a completion set: one reachable band is DEGRADED / <band> / EXACT, several are UNKNOWN. Unreadable linkage fields no longer fail the whole project (LinkageEvidenceError is gone).
  • Target markers are standalone tokens (PV-AUDIT-TARGET-MARKER-SYNTAX-001): NotTarget: B1 links nothing.
  • Horizon: over a partial target enumeration only an observed open target beyond the frame forces a band (DEGRADED / EXTENDED / EXACT); a partial zero is never UNDECLARED.
  • Debt: a confirmed open item under partial acquisition is DEGRADED / PRESENT / EXACT, none confirmed is UNKNOWN, and a PARTIAL count needs its OBSERVED_SUBSET_COUNT proof.
  • Integrity: the union of every attempt observed per parent per revision is carried from the immediate predecessor (ci.revision_history_carried in, derived.revision_history out, grouped by parent shape). A failure the provider stops showing still counts; favorable parent-level or incomplete evidence is UNKNOWN_HISTORY, never a pass (R52); a gap in the chain is explicit and never bridged by an older bundle; verify checks the source (HISTORY_SOURCE_MISMATCH). The first 0.2.0 bundle replays the 0.1.9 predecessor's revision records.
  • Contradictory counts (L + U + R != N, beyond > future) are refused before classification; the CLI reports an input error.
  • Vector format: given.derive (run the derivation over stated inventories) and expect.rejected (a refusal), with the schema, vectors.md and runner tests.

Verification

  • pytest: 2,053 tests pass; devostasis vectors: 148 pass (71 new); the sample bundle verifies and builds deterministically twice.
  • All 326 stored bundle directories of the fleet store still verify with the new verifier.
  • A read-only live run of all 18 fleet projects into a copy of the store (twice, to exercise both the replay from 0.1.9 and the carry from a 0.2.0 snapshot): every project built, all 348 bundle directories of the copy verify, and re-evaluating each new bundle's own observations.json reproduces its snapshot byte for byte. This repository reads Direction MIXED, 9 of 18 active changes traced, where the open-target count said 4 of 18 (SCATTERED). The first 0.2.0 bundle shows RULE_VERSION_BOUNDARY on exactly the four moved Vitals.
  • The live run found two costs, both fixed here: the first bundle carried an out-of-window series of about 1 MB, and grouping parents by shape took the busiest project's snapshot from 393 KB to 91 KB.

Follow-ups filed

Not in this release: the fifth identity move (#19, the owner's decision), the Phase C contracts of #34 (after B7 and the compatibility policy), the Pulse part of #39 (research), and the "Evidence Observatory" candidate of #47. The version number follows the owner's request for a large release; the roadmap says plainly that the condition it had set for 0.2 (B7, no unadopted research) is now the bar for 0.3. Tagging v0.2.0 happens after the merge.

Closes #33.

🤖 Generated with Claude Code

drevendev and others added 7 commits October 1, 2026 00:43
…versions

Direction becomes direction.bands.v2 and carries both accepted repairs in one
rule move. Linkage is state-neutral (PV-REV-DIRECTION-CLOSED-TARGET-001): a
change request linked to a declared target stays linked when the target
closes, which repairs calibration finding 9, where closing A1 and B6 took the
linked count from 2 of 6 to 0. The open-target count is still derived, for
presentation only. Every active change request is LINKED, UNLINKED or
UNRESOLVED (PV-DIRECTION-INCOMPLETE-001): a reference a complete register
lacks is a broken reference and unlinked, with DIRECTION_TARGET_REFERENCE_MISSING;
a reference nobody could resolve, or a title, body or milestone of the wrong
type, is unresolved. Over L + U + R = N the completion set k in L..L+R is
mapped through the unchanged predicates: one reachable band is DEGRADED /
band / EXACT, several are UNKNOWN. Unreadable linkage evidence therefore no
longer fails the whole project; LinkageEvidenceError is gone, and the record
names what it could not read in linkage_unresolved.

Horizon becomes horizon.bands.v2 (PV-HORIZON-PARTIAL-001). A partial target
enumeration that returned a target proves the capability; its counts are
observed-subset lower bounds, and only PH3, an open target already beyond the
frame, forces a band: DEGRADED / EXTENDED / EXACT. PH0 to PH2 stay UNKNOWN,
because Horizon declares no order to pick a representative by.

Debt becomes debt.bands.v2 (PV-DEBT-PARTIAL-001). A partial register with a
confirmed open item is DEGRADED / PRESENT / EXACT, one without is UNKNOWN,
and, as issue #39 asked for Debt, a PARTIAL count is read as a lower bound only
with its OBSERVED_SUBSET_COUNT proof.

The target marker is a standalone token now (PV-AUDIT-TARGET-MARKER-SYNTAX-001):
SubTarget: B1 and PreTarget:B1 link nothing. Counts that contradict each other
(L + U + R != N, beyond > future > open) are InadmissibleEvidence, refused
before classification and reported by the command line as an input error.

The vector format learns two things the new families need: given.derive runs
the derivation over stated inventories, so a case about how a change request
becomes linked is executed where that happens, and expect.rejected states a
refusal (HOR-PARTIAL-15). DIR-CLOSED-01..09, DIR-INCOMPLETE-01..16,
HOR-PARTIAL-01..16 and DEBT-PARTIAL-01..16 are executable vectors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Integrity history was reconstructed from whatever the provider still showed,
so a failure hidden behind a passing re-run on a parent-level surface, or
dropped by retention, left the counts as if it had never happened. The
accepted contract, PV-HIST-002 (PV-REV-HIST-002), makes history durable.

The carrier is the union of every attempt observed per parent per revision.
A build now reads its immediate predecessor, the bundle the comparison
already resolved, and adds that union as ci.revision_history_carried before
evaluating; Integrity merges it with the provider's current parents and
emits the result as derived.revision_history in the snapshot, on every path,
UNKNOWN ones included, so history also crosses a bundle whose verification
evidence could not be read. A missing, unverifiable, foreign or later
predecessor is a gap that says so (REVISION_HISTORY_GAP); nothing older is
ever carried in its place. verify checks that the source a bundle names is
the bundle its manifest follows, and a build refuses observations that
already carry history from somewhere else.

The state of a revision is a function of its union: an observed failure is
FAILURE_OBSERVED on any surface and stays; favorable evidence proves
PASS_ONLY_OBSERVED only when every attempt of every parent is observed, so a
check-suite pass, or a run whose earlier attempts are not all known, is
UNKNOWN_HISTORY (R52), which makes the Vital UNKNOWN, because T9 puts unknown
history above every conservative branch. A current verdict is never carried.
The first 0.2.0 bundle of a project replays the revision records of its
0.1.9 predecessor (lineage devostasis.ci-history.v1) instead of starting
empty. On the stored corpus every active revision is attempt-complete, so no
fleet project loses its band to R52; all 326 stored bundle directories still
verify.

The rule moves to integrity.bands.v1+ci-unit-004+hist-002; the band table
and the 0.1.9 judgements are unchanged. HIST-01..07, -09..11, -13, -15, -16
and -19 are vectors, HIST-08, -12, -17, -18 and -20 store tests; HIST-14
has no accepted migration to execute.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ligation

PV-REV-TEST-004 accepted the final T9 reconciliation (PV-TEST-004,
generator PV-T9-GEN-003) with zero CONTRACT_GAP terminals: each of the nine
gap identifiers PV-T9-GEN-002 exposed maps to one deterministic obligation,
and higher-precedence fail-closed conditions stay higher. With the Direction,
Horizon and Debt repairs of this release every obligation T9 consumes is
implemented, so T9 can be adopted.

The implementation side of it is a finite generator: the acquisition tokens
(CF, POS_ABSENT, PARTIAL, UNAVAILABLE, FORBIDDEN, UNKNOWN, ERROR, STALE)
crossed with the regions each family names, about 1,270 cells, each evaluated
and held to the accepted table: Horizon PH0..PH3, Clutter's confirmed floors,
Direction's completion set and per-reference resolution, Integrity's
unresolved, partial and unconfigured-recent regions, Debt's PD0 and PD1, and
unknown history above every conservative branch. The oracles restate the
accepted table rather than calling the evaluators. The T9v2 cell-key
serialization remains the research process's to deliver as vectors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The live run against a copy of the fleet store showed two costs the tests
could not. The first 0.2.0 bundle of trade_simulation carried its 0.1.9
predecessor's whole revision series, about a megabyte, although every record
in it had aged out of the 14-day window and would be dropped on arrival. And
its snapshot grew from 12 KB to 393 KB, because 834 workflow_dispatch runs in
two weeks attach to a handful of revisions and the carrier wrote each run as
its own object.

The carried observation now holds only in-window records, and a replayed
0.1.x record only the fields replay reads (revision, time and every parent's
identity, kind and attempts). The carrier stores parents grouped by shape
(kind, greatest attempt, observed attempts) with their ids, which is
lossless: every parent keeps its identity and its own attempts, and a
parent listed in two groups is corrupt history. On the same evidence the
snapshot is 91 KB. Which of those runs should count as verification at all
is the question issue #40 already asks the research side.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Version 0.2.0, the pins that name it, the example bundle regenerated under
the four new rule versions (its change-request records now in the shape the
adapter writes, one merged change linked to the closed release it delivered,
so the example shows the state-neutral linkage: 6 of 10 linked where the
open-target count says 5), and the changelog section.

The roadmap moves B3 to done, the Direction, Horizon, Debt and T9 judgements
to adopted, finding 9 to judged, and the count of named cases without a test
from 63 to 62. It also says plainly that 0.2.0 ships before the condition it
had set for 0.2 (Phase B closed, an outside consumer, no unadopted research):
the owner asked for a large release (#47), and this is the part of it that
rests on accepted contracts, so B7 and the Phase C contracts become the bar
for 0.3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… on it

Durable history is keyed by immutable revision identity, and the new union
code read the revision of every record directly, so a hand-written record
without one ended the evaluation with a KeyError. A record that names no
revision can be neither counted nor carried: it is now
REVISION_RECORD_INCONSISTENT, the same defect as a contribution that
contradicts its own history, and the Vital is UNKNOWN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
B3, durable revision history, is delivered by this release. v0.2 described
the condition the roadmap had set for 0.2 (phases A and B closed, an outside
consumer, no unadopted research); 0.2.0 ships before it at the owner's
request, so the release target closes and the condition moves to a new
target, v0.3, as the roadmap now says. Ids are never reused.

The pull requests that advanced B3 stay linked after it closes: that is the
state-neutral linkage of direction.bands.v2, and this repository is its first
beneficiary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@andy-zen-dev andy-zen-dev left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Release-dependency review at exact head 96d10fc. This is not a complete independent acceptance of the 60-file semantic release.

Live comparison confirms repaired #57 head b849923 is 11 commits ahead of this release head, with no divergence in the opposite direction. Its changed files include revision_history, runner, Integrity evaluator and new admission regressions. Those repairs are therefore not delivered by this current #53 head.

#57 has a fresh concrete REQUEST_CHANGES for the remaining carrier-array admission defect #83. Resolve that defect and independently accept/merge #57 into release/0.2.0 first; then refresh this release head's checks, version/pins and changelog, historical bundle verification and exact release/tag readiness. The current PR's older verification narrative must not be used as evidence for a future changed head.

Do not close #33/B3 merely because this release PR exists; match each claimed acceptance to the final merged release. Do not treat the later cumulative 0.6 CI as acceptance of this 0.2 head. No local full suite, merge, tag or issue closure was performed in this pass; this COMMENT records the verified dependency blocker rather than inventing a new semantic defect.

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.

Accepted research repairs of the Vitals not yet adopted: Direction closed-target and incomplete, Debt partial, Horizon partial, Integrity totality, T9

2 participants