Skip to content

infra: isolate module evidence and generated compatibility summaries - #78

Merged
swear01 merged 7 commits into
mainfrom
compat/issue-77-evidence-isolation
Aug 2, 2026
Merged

infra: isolate module evidence and generated compatibility summaries#78
swear01 merged 7 commits into
mainfrom
compat/issue-77-evidence-isolation

Conversation

@swear01

@swear01 swear01 commented Aug 2, 2026

Copy link
Copy Markdown
Owner

Closes #77.

Summary

This removes the remaining shared compatibility-evidence merge points:

  • each audited descriptor owns only its isolated module recipe-inventory digest;
  • isolated fixture runs verify that descriptor digest;
  • the compatibility matrix owns the actual combined coexistence and unclaimed inventories in build/reports/terminal-scale-<types>.json;
  • build/reports/compatibility-modules.md is generated from descriptors and active module docs rather than maintained as a shared source file.

Outcome A: declarative evidence isolation implemented. No runtime recipe semantics changed.

Current base and head

  • base: 9fc1aae99ed2b67a4ecd7c0fdbcbced858d5bada
  • head: 5d7db18a70cd9eb556fa803e759a4d327af0b67a
  • PR is ready for review (not draft)

The branch was rebased onto the Productive Metalworks merge. Its newly merged fixture now verifies its isolated descriptor evidence: 312 productivemetalworks:* recipes, SHA-256 a17a7208231825e5c0c9f0c801867dfbf09e0bbfbb228018562ae01460f1fee7.

TDD and review fixes

  • RED then GREEN: every isolated audited fixture must call IsolatedRecipeInventoryEvidence.
  • RED then GREEN: every Compat Kit manifest must retain exact keys including tool_version.
  • RED then GREEN: both compatibility-summary Gradle tasks declare active docs/*-compatibility.md inputs.
  • Explicit UTF-8 is retained for generated isolated-evidence JSON.

Verification

Gate Result
PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover scripts 554/554 passed
./gradlew build passed
./gradlew runCompatFixtureGameTestServers passed
./gradlew runProductivemetalworksGameTestServer 8/8 passed
./gradlew runCompatibilityMatrixGameTestServer 3/3 passed, 14,990 recipes
Compat Kit Productive Metalworks bundled verification 12/12 checks, 5/5 commands passed
./gradlew checkCompatibilitySummary passed
./gradlew runData passed, zero files written
git diff --check clean

Latest matrix report evidence:

  • coexistence: 14,990 recipes, SHA-256 b340161edceb2857560c3229c4731b2241081643ee2f7c788622da531140a87f;
  • unclaimed: 1,354 recipes, SHA-256 c5796e5c92a7ec1e51c9fe58397e8c0e1dc0743b7a587039631f231c294c1207;
  • shared retained index: 5,015,272 bytes;
  • per-menu retained heap: 114,626 bytes.

Documentation

Updated active plan, roadmap, and Productive Metalworks compatibility evidence. Generated report path: build/reports/compatibility-modules.md.

Remaining risk

Cross-mod-only recipe changes intentionally change the matrix report rather than a committed global expected digest. CI/release retain the report as evidence; reintroducing a committed global digest would recreate the shared-file conflict this issue removes.

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

This pull request implements true module evidence isolation (GitHub #77) by verifying isolated descriptor digests via isolated fixtures and recording actual coexistence and unclaimed recipe inventories in a matrix report rather than committing global digests. It also introduces a generated compatibility summary report (compatibility-modules.md) for CI/release. Feedback on these changes includes addressing platform-default encoding issues when reading and writing isolated recipe inventories in build.gradle, and fixing a test bug in test_compatibility_matrix_manifest.py where subprocess.run is called with check=True on a conflicting git merge-tree command, which would cause the test to crash.

Comment thread build.gradle Outdated
Comment thread build.gradle Outdated
Comment thread scripts/test_compatibility_matrix_manifest.py
@swear01

swear01 commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

Follow-up evidence (42e029990e4adaedc7e30ce8e3301bb2e2db72b3)

Initial --continue RED sweep

./gradlew runCompatFixtureGameTestServers --continueBUILD FAILED in 9m 24s after collecting isolated digests:

  • Passed: Advanced AE 8, Ars Nouveau 11, Botania 14, CAA 4, Draconic 6, Extended Crafting 4, IF 9, MI 7
  • Drift RED (expected→got): AE2, Create, EvilCraft, Farmers Delight, Iron Furnaces, Mekanism, Powah, Productive Bees, Theurgy

Final 17-fixture aggregate GREEN

./gradlew runCompatFixtureGameTestServers → all 17 fixtures passed, BUILD SUCCESSFUL in 8m 31s:
8 / 8 / 11 / 14 / 13 / 4 / 6 / 10 / 4 / 7 / 9 / 3 / 47 / 7 / 11 / 8 / 9

Coordinator correction verification

  • Focused Python 29 OK; full Python 548 OK
  • stageAe2CompatAuditAncestry + build SUCCESS
  • git diff --check clean
  • Contracts advanced_ae / ae2 / productivebees / theurgy each changed only matrix.recipeInventory.sha256 (1-line diffs)
  • Shared tests no longer pin Productive Bees/Create digests or peer MI/Create descriptors

Draft remains draft; no review bot triggered.

@swear01
swear01 force-pushed the compat/issue-77-evidence-isolation branch from 42e0299 to e59e778 Compare August 2, 2026 11:26
@swear01

swear01 commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

Rebase evidence

  • New head: e59e778e5df5c28f3f91799c273203dcad791885
  • Exact base: 61aaf32f4faa263d8c3c6c6281f5ad81adc2e8b7 (Railcraft compat: add Railcraft Reborn fail-closed integration #58 on main)
  • Commits: 38ecbcc isolation · ca362a0 digest follow-up · e59e778 Railcraft isolated digest after rebase

Gates

  • Focused Python 31 OK; full Python 548 OK; railcraft metadata OK after digest fix
  • stageAe2CompatAuditAncestry + build SUCCESS
  • Aggregate runCompatFixtureGameTestServers: 18 fixtures green (incl. Railcraft 8 / Theurgy 9)
  • Matrix 3/3 SUCCESS; report coexistence 0635a176… / unclaimed c5796e5c…
  • runData SUCCESS, written 0; git diff --check clean

Isolation notes

  • Companions remain without coexistence/unclaimed expected SHA
  • Railcraft fixture asserts IsolatedRecipeInventoryEvidence; isolated digest 5fa9e922337c24f2a2d4d86da0d68ebe8205a89dcd70ece1e952f75707107060
  • CAA/Railcraft docs do not pin peer Create descriptor SHA

Draft remains draft; no review bot triggered.

swear01 added a commit that referenced this pull request Aug 2, 2026
Add an all-module compat-kit manifest disk-hash regression and refresh the
two AE2 entries left stale after #78 rewrote that verification-sensitive file.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@swear01

swear01 commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

Manifest integrity follow-up

  • New head: 330c22f105643884adb0f3753953427db8601905
  • Base: 61aaf32f4faa263d8c3c6c6281f5ad81adc2e8b7 (unchanged)

Correction

  • RED→GREEN: added test_every_compat_kit_manifest_file_hash_matches_disk (files-only; all src/compat/*/.compat-kit-manifest.json).
  • Refreshed AE2 listed file hashes for neoforge.mods.toml and Ae2Compat.java to match disk (no source-byte changes).
  • Restored AE2 contract_sha256 and AE2 generation/compile-fixture source_contract_digest to Compat Kit canonical digest 846f86c211aec80ed9e740d5956a013173fa8b26785501cd027c6336e0db2aad (file-byte digest was inconsistent with _contract_sha256).

Verification

  • Focused modular/manifest Python: 32 OK
  • Full Python (JDK 21): 551 OK
  • git diff --check clean
  • No GameTest / runData rerun: metadata-only; prior aggregate/matrix/runData on e59e778 remain valid for runtime bytes

Draft remains draft; no review bot triggered.

@swear01

swear01 commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 700c7a5fd4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread build.gradle
Comment thread src/compat/ae2/.compat-kit-manifest.json Outdated
swear01 and others added 7 commits August 2, 2026 20:24
Routine module PRs no longer touch committed coexistence/unclaimed baselines or a tracked compatibility index. Isolated fixtures verify module digests; the matrix records actual coexistence evidence only in build reports.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep module digest ownership on descriptors/contracts only: drop shared-test
peer SHA pins, document matrix report-only coexistence, and replace only
recipeInventory.sha256 in affected Compat Kit contracts.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Railcraft joins #77 isolation with fixture-owned inventory evidence and an
isolated 639-recipe digest, without pinning peer Create or global matrix SHA.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Add an all-module compat-kit manifest disk-hash regression and refresh the
two AE2 entries left stale after #78 rewrote that verification-sensitive file.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep the all-manifest file-hash gate files-only, and restore AE2
contract_sha256 plus bound generation/compile-fixture plan digests to Compat
Kit canonical hashing so verification-sensitive bindings stay consistent.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@swear01
swear01 force-pushed the compat/issue-77-evidence-isolation branch from 700c7a5 to 5d7db18 Compare August 2, 2026 12:46
@swear01

swear01 commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep them coming!

Reviewed commit: 5d7db18a70

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@swear01

swear01 commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

Final gate evidence

@swear01
swear01 merged commit 4464493 into main Aug 2, 2026
1 check passed
@swear01
swear01 deleted the compat/issue-77-evidence-isolation branch August 2, 2026 13:05
swear01 added a commit that referenced this pull request Aug 2, 2026
Rebase onto evidence isolation, lock the isolated 509-recipe digest in
fixture/descriptor/contract, simplify exact() matching, and drop peer
Theurgy digest coupling so routine module PRs stay self-contained.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
swear01 added a commit that referenced this pull request Aug 2, 2026
via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
swear01 added a commit that referenced this pull request Aug 2, 2026
Rebase onto evidence isolation, lock the isolated 509-recipe digest in
fixture/descriptor/contract, simplify exact() matching, and drop peer
Theurgy digest coupling so routine module PRs stay self-contained.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
swear01 added a commit that referenced this pull request Aug 2, 2026
via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
swear01 added a commit that referenced this pull request Aug 2, 2026
Rebase onto #78/#46 keeps peer descriptors untouched; the isolated
fixture now verifies this module's own digest evidence.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
swear01 added a commit that referenced this pull request Aug 2, 2026
Restore the truncated matrix fixture, assert isolated recipe digests in
ID/IC GameTests, and pin the measured Integrated Dynamics inventory SHA.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
Restore the truncated matrix fixture, assert isolated recipe digests in
ID/IC GameTests, and pin the measured Integrated Dynamics inventory SHA.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
Restore the truncated matrix fixture, assert isolated recipe digests in
ID/IC GameTests, and pin the measured Integrated Dynamics inventory SHA.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
Capture the measured immersiveengineering isolated inventory digest after
descriptor isolation, keep the fixed 9 MiB shared-index gate, and document
the current matrix and format-migration blockers without widening gates.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
Capture the measured immersiveengineering isolated inventory digest after
descriptor isolation, keep the fixed 9 MiB shared-index gate, and document
the current matrix and format-migration blockers without widening gates.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
Restore the truncated matrix fixture, assert isolated recipe digests in
ID/IC GameTests, and pin the measured Integrated Dynamics inventory SHA.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
Restore the truncated matrix fixture, assert isolated recipe digests in
ID/IC GameTests, and pin the measured Integrated Dynamics inventory SHA.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
Capture the measured immersiveengineering isolated inventory digest after
descriptor isolation, keep the fixed 9 MiB shared-index gate, and document
the current matrix and format-migration blockers without widening gates.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
* compat: add Immersive Engineering fail-closed Compat Kit integration

Reject all 128 audited Immersive Engineering 12.4.2-194 recipe candidates
(Outcome C), keep a present-mod zero-family module with eight GameTests, and
lock the fourteen-mod matrix at 12,889 recipes with a 9 MiB shared-index gate.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* compat: lock Immersive Engineering matrix recipe digests

Capture the runtime immersiveengineering recipeInventory digest after
rebasing onto declarative isolation, and update peer digests that shift
when IE is present in the combined matrix.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* compat: align IE matrix evidence with declarative coexistence

Point coexistence verification at the descriptor matrix assert used on
main, document format-7 verify parity with Theurgy, and keep the local
verify command including the exact representative jar.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* docs: record IE format-16 scan blocker on ModelConveyor$1$Key

Keep scanner format 7 parity with Theurgy after optional ancestry still
fails Compat Kit nested-class owner resolution.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* compat: lock isolated IE digest and record post-#78 blockers

Capture the measured immersiveengineering isolated inventory digest after
descriptor isolation, keep the fixed 9 MiB shared-index gate, and document
the current matrix and format-migration blockers without widening gates.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* compat: migrate Immersive Engineering audit to scanner format 17

Replace format-7/128 name-shaped evidence with format-17 structural 44
recipe-class Outcome C decisions, regenerate the isolated descriptor and
manifest, and record the fixed 50 ms craftable-prepare matrix blocker.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* docs: record IE craftable-prepare host-contention clearance

Quiet exclusive matrix evidence clears the contended 81 ms prepare
reading without widening the fixed 50 ms or 9 MiB gates.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* docs: record IE rebase onto CEI main matrix evidence

Capture quiet exclusive prepare 35.36 ms at 20,012 recipes after
rebasing onto origin/main 481449d, keep the fixed 50 ms and 9 MiB
gates, and align overview with format-17's 44 rejected candidates.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* perf(crafting): reuse resolved catalog matches

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* fix(crafting): preserve adapter output validation

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

* docs: record IE rebase onto current main matrix evidence

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

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

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
Restore the truncated matrix fixture, assert isolated recipe digests in
ID/IC GameTests, and pin the measured Integrated Dynamics inventory SHA.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
swear01 added a commit that referenced this pull request Aug 3, 2026
Restore the truncated matrix fixture, assert isolated recipe digests in
ID/IC GameTests, and pin the measured Integrated Dynamics inventory SHA.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.

[Infrastructure] isolate module evidence and generated compatibility summaries

1 participant