Skip to content

fix(history): preserve parent-kind conflicts through reconciliation (#83) - #90

Draft
drevendev wants to merge 24 commits into
release/0.6.0from
fix/83-parent-kind-conflicts
Draft

drevendev wants to merge 24 commits into
release/0.6.0from
fix/83-parent-kind-conflicts

Conversation

@drevendev

Copy link
Copy Markdown
Owner

A v1 carrier discarded merge_parents() conflict diagnostics, and later reconciliation could erase a retained parent-kind contradiction when current attempts were complete. With the same parent id represented as Actions and Check Suite, input order could turn an unresolved history into a favorable PASS-only result. This repair carries the conflict into unresolved and preserves it through subsequent reconciliation.

Target: B1
Target: B3

Related to #83. Bounded parent-kind propagation/persistence repair; keep #83 open. Separate legacy status/coverage work remains under #87.

Base and dependency

Resulting behavior

  • Replayable v1 _carried_records() retains the conflict list returned by merge_parents() in the revision's unresolved evidence.
  • Complete current evidence may repair an incompatible-lineage gap, but cannot clear PARENT_KIND_CONFLICT:<parent_id>.
  • Both input orders retain the contradiction, and subsequent v2 carriers keep it. A current PASS cannot manufacture PASS-only history from the conflict.
  • An observed VERIFY_FAIL from either kind remains absorbing.
  • Valid same-kind/distinct-parent unions, v2 duplicate-group rejection, accepted lineage repair, expiry and proven departure from the complete branch inventory retain their behavior.
  • No history-lineage, Vital policy, threshold or runtime-dependency change.

Added 37 regression instances and specification/conformance mapping: 6 v1 order/failure cases; 12 repeated v1/v2 reconciliation cases; 4 valid union controls; 2 v2 duplicate-group refusals; 2 lineage-only/mixed-gap controls; one multiple-marker case; 2 expiry/departure controls; and 8 four-bundle legacy/current-origin store/replay cases. Implementation-local case labels do not replace research identifiers.

Executed checks at the exact fixing head

Windows 11 build 26200, Python 3.14.7, pytest 9.1.1, 2026-10-24. Real source import confirmed from the fixing checkout; PYTHONDONTWRITEBYTECODE=1, explicit source PYTHONPATH.

Check Result
New test module against the actual unpatched base package 18 failed / 19 passed, expected red
python -B -m pytest -p no:cacheprovider tests/test_parent_kind_conflicts.py tests/test_legacy_carrier_admission.py tests/test_carried_array_admission.py tests/test_revision_history.py tests/test_ci_history_admission.py --basetemp=<dedicated scratch> 153 passed
Single full native run outside sandbox: python -B -m pytest -p no:cacheprovider --basetemp=<dedicated scratch> --junitxml=<external evidence path> 2645 passed in 87.89s; 0 failures/errors/skips; exit 0
python -B -m devostasis vectors --quiet 148 passed
python -B scripts/check_conformance_surface.py 63 passed
Offline core/code-v1/code-v2/packet/work verify and replay 6 checks passed
Eight four-bundle conflict chains Every bundle verifies; saved-observation replay preserves exact bundle ID and member bytes
git diff --check <base>..HEAD, worktree preservation PASS; fixing and prior checkout clean

Independent review

A separate reviewer inspected the exact four-file diff, actual parser/reconciliation/evaluator paths, fixtures and relevant contract.

No actionable findings in this bounded diff. Independently executed:

  • python -B -m pytest -p no:cacheprovider tests/test_parent_kind_conflicts.py tests/test_revision_history.py tests/conformance/test_integrity.py: 88 passed;
  • python -B -m pytest -p no:cacheprovider tests/conformance/test_vectors.py -k HIST: 14 passed, 138 deselected;
  • exact-head new tests against the actual base: expected 18 failed / 19 passed;
  • 24 permutations of three parent kinds and failure location, through 96 reconciliation stages including acquisition outage, partial empty inventory and later complete evidence under a different parent;
  • 4 accepted lineage-repair controls;
  • real source import, clean HEAD and diff checks.

All probes use actual package imports and fixture-only construction, not copied core functions. The primary agent inspected the retained probe script and outputs. The independent reviewer did not repeat the primary 2645-pass full suite. Separate-agent execution on the same owner/host is not separate credential identity or release approval.

Bounded patch SHA-256: 9352b41728f9e721b9b552afb6264df8d15f2af7ad837ac92a6fb71c3a36c10f. The committed tests and commands above are the public reproducible corpus; private task records, local paths and transcripts are not published.

Remaining #83 / #87 scope

The three stacked repairs (#88, #89 and this PR) do not by themselves finish issue/release acceptance:

Linux, Python 3.12/3.13 and hosted CI were not run for this repair. These checks do not accept the whole release or the inherited #81 scope. No automatic closure of #83/#87, merge or release is requested.

abogun-product and others added 24 commits October 21, 2026 14:16

@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.

Independent bounded review of #90 at exact head 51e58b8a4f1504f8f953fbc47db6157d157051e6, relative to its immediate predecessor 1a735f451f9fe6dae7948a014b660249501a1ffc (one commit, four files, +224/-6), not a sign-off on the accumulated 24-commit release diff.

I examined the actual commit patch, surrounding _carried_records(), merge_parents(), reconcile(), Integrity's fail-closed evaluation path, the 37-instance test_parent_kind_conflicts.py corpus, docs/spec/integrity-ci.md, and the implementation-local conformance mapping. No actionable merge-blocking defect found within this bounded repair.

  • v1 replay now preserves the PARENT_KIND_CONFLICT:<parent_id> diagnostics returned by merge_parents(), rather than discarding them when constructing a v2 union.
  • Complete current parent evidence may clear a repairable lineage gap but retains structural parent-kind contradictions, preventing a contradictory history from being upgraded to PASS_ONLY_OBSERVED. VERIFY_FAIL remains absorbing from either input order.
  • Regression coverage includes both parent orders, failure placement, repeated v1/v2 reconciliations, legitimate parent unions, duplicate-group rejection, lineage-only repair, expiry/branch departure, and four-bundle stored/replayed histories; specification and executable mapping are updated without changing Vital policy or lineage.
  • GitHub Actions run https://github.com/drevendev/Devostasis/actions/runs/40098455528 is SUCCESS at this exact commit; all three hosted jobs (Python 3.12/3.13/3.14) and their reported steps succeeded. This is hosted verification, not an independently executed local pytest or release acceptance.

Scope/merge gate: #90 is a draft stacked on unmerged #89 -> #88 -> #81 and targets release/0.6.0. The full PR diff includes their inherited changes; those changes are not approved by this review. Do not merge this draft or close #83 merely on this bounded finding. Rebase/recheck exact integrated heads after prerequisite landing and resolve remaining #87 status/inventory uncertainty separately. Local pytest and independent historical replay: NOT_RUN in this review.

andy-zen-dev commented Oct 24, 2026 •

Copy link
Copy Markdown

2026-10-24 — integration-gate drift after #91 (exact-head audit, not a new #83 code finding)

Current release branch: release/0.6.0 at 5998723411bd2721971a7385ca2d8c8af8df055f, the verified merge commit for #91 (merged 2026-10-24 14:27:17 UTC). That merge added scripts/wheel_smoke.py, docs/wheel-verification.md, and the wheel-smoke job to .github/workflows/ci.yml, delivering the independently installed-wheel check from #84.

This PR's exact head: 51e58b8a4f1504f8f953fbc47db6157d157051e6. Comparing current release head to this commit reports diverged, 24 ahead / 2 behind, merge base 22a2894057d9b1bc003efe4ef932ed4de601e26b. The checked-in .github/workflows/ci.yml at this PR head (blob 42763487e82b2e634cf13b81fe6b65d81935ea1d) does not contain the new wheel-smoke job; the current release branch's workflow (blob ddb3739494409b94d5667eb16b73537ff58ad541) does.

CI evidence boundary: run 40098455528 is SUCCESS for this PR's source SHA, but its inspected job list contains only Tests (Python 3.12/3.13/3.14). It does not qualify the newly required installed-wheel gate for the combined #81 → #88 → #89 → #90 changes, nor a merge candidate containing #91. This is not a claim that wheel installation is broken.

Required before claiming the 0.6.0 integrated/release head green: reconcile the landed #91 branch changes with the stacked feature/release chain in dependency order, retain the newly merged wheel gate, and obtain successful exact integrated-head CI with the installed-wheel job and the Python test matrix, followed by historical/conformance replay and independent release acceptance. Do not treat the three green source-head jobs as a pass for a different merged tree. Keep #90 draft and #83 open until their independent gates are satisfied. Existing #81 blockers (#38/#82/#86 and the remaining #83/#87 boundary) are unchanged by this observation.

Method/limits: read the current Git ref and #91 merge, both exact workflow blobs, PR refs, commit comparison, run 40098455528 and its three hosted jobs. No new source checkout pytest, installed-wheel execution, approval, branch update, merge or release was performed by this audit.


2026-10-27 — updated release-base reconciliation

A fresh GitHub ref/compare/CI inspection supersedes the 2026-10-24 release-base snapshot above (the older audit is retained for chronology):

Remaining gate: integrate/reconcile #81 → #88 → #89 → #90 against the new release head while keeping #93's checkout assertions and wheel gate; obtain successful Python 3.12/3.13/3.14 + wheel-smoke jobs at the actual integrated candidate, plus historical/conformance replay and independent acceptance before leaving draft/releasing. #38/#82/#83/#86/#87 and #96 are separate open correctness/contract boundaries; this update does not assert their resolution. Full checkout and local tests: NOT_RUN (git fetch DNS unavailable); no source edits, re-review approval, branch updates, merges or tag were performed here.

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.

3 participants