feat: capture real IBM i programs and validate independent recovery #45

Merged
binjovi-bot merged 2 commits from codex/deterministic-recovery-tool into trunk 2026-09-10 07:30:57 +00:00
Owner

Missing IBM i source can now be captured as reusable Git text through declared application scopes and checked executable extraction. Native editors remain in use. The tool records source, SQL definitions, object metadata, loaded memory, instructions, and explicit recovery limits.

The offline path validates the observed V7R5 uncompressed save-file container, restores the displaced tail bytes, checks program segments and entry points, and runs pinned Ghidra/PowerAS with verified tool-file hashes. It rejects corrupt evidence, changed inputs, metadata filename collisions, incomplete analysis, and timeouts. Permission denials remain visible as skips. Application-specific rules live in the fixtures.

The controlled pricing retry removed one implementation member and runtime observability after verified source and executable backups. A fresh agent received only the captured executable text, two surviving members, and 96 observed calls. Its first frozen RPG candidate compiled in SOMEARA2 and passed all 13,166 native cases, including 13,070 cases not supplied to the agent. The parent did not change its business logic. A later native source capture matched the frozen candidate byte for byte.

Validation:

  • 143 offline tests pass.
  • B1_BUYUI: 1,376 automatic instructions; R9_LOST: 739 automatic instructions.
  • Python extraction matches independent jSAVF raw exports for both real programs; jSAVF full archive checks pass.
  • Separate analysis runs produce identical bundles for each fixed input and toolchain.
  • Native reference, retained copy, stripped copy, and replacement agree across 1,166 boundary, 10,000 seeded, and 2,000 separately seeded hidden cases.
  • Mixed RPGLE/SQLRPGLE source, CCSID metadata, and generated external-procedure DDL were captured on pub400.

The supported extractor format is limited to the observed uncompressed V7R5 QSYS and ILE layouts. The Python reader checks each record but does not yet check the separate whole-file checksum. Ghidra misses part of the calculation body; the agent used captured memory and a small documented decoder as an analysis aid. This is useful reconstruction evidence, not proof of complete semantic equivalence or original source recovery. The evidence boundary is procedural on a shared filesystem.

See recovery/RETRY.md, recovery/NATIVE-WORKFLOW.md, and recovery/evidence/reusable-capture-20260910/summary.json. The current Binjovi recipe checks and releases the recovery tool. This retry validates staging; automatic promotion for arbitrary application scopes and off-host save-file restoration remain separate work.

Binjovi Build 105aa21b3b37bb8f38688aa4392f3911caee10a599cc8e24359c2cf858544fb4 succeeded for exact feature revision 06f1e9c502fe77c617348885a470d4825f07e37a. Its native executor log confirms all 143 offline tests passed.

Missing IBM i source can now be captured as reusable Git text through declared application scopes and checked executable extraction. Native editors remain in use. The tool records source, SQL definitions, object metadata, loaded memory, instructions, and explicit recovery limits. The offline path validates the observed V7R5 uncompressed save-file container, restores the displaced tail bytes, checks program segments and entry points, and runs pinned Ghidra/PowerAS with verified tool-file hashes. It rejects corrupt evidence, changed inputs, metadata filename collisions, incomplete analysis, and timeouts. Permission denials remain visible as skips. Application-specific rules live in the fixtures. The controlled pricing retry removed one implementation member and runtime observability after verified source and executable backups. A fresh agent received only the captured executable text, two surviving members, and 96 observed calls. Its first frozen RPG candidate compiled in SOMEARA2 and passed all 13,166 native cases, including 13,070 cases not supplied to the agent. The parent did not change its business logic. A later native source capture matched the frozen candidate byte for byte. Validation: - 143 offline tests pass. - B1_BUYUI: 1,376 automatic instructions; R9_LOST: 739 automatic instructions. - Python extraction matches independent jSAVF raw exports for both real programs; jSAVF full archive checks pass. - Separate analysis runs produce identical bundles for each fixed input and toolchain. - Native reference, retained copy, stripped copy, and replacement agree across 1,166 boundary, 10,000 seeded, and 2,000 separately seeded hidden cases. - Mixed RPGLE/SQLRPGLE source, CCSID metadata, and generated external-procedure DDL were captured on pub400. The supported extractor format is limited to the observed uncompressed V7R5 QSYS and ILE layouts. The Python reader checks each record but does not yet check the separate whole-file checksum. Ghidra misses part of the calculation body; the agent used captured memory and a small documented decoder as an analysis aid. This is useful reconstruction evidence, not proof of complete semantic equivalence or original source recovery. The evidence boundary is procedural on a shared filesystem. See recovery/RETRY.md, recovery/NATIVE-WORKFLOW.md, and recovery/evidence/reusable-capture-20260910/summary.json. The current Binjovi recipe checks and releases the recovery tool. This retry validates staging; automatic promotion for arbitrary application scopes and off-host save-file restoration remain separate work. Binjovi Build `105aa21b3b37bb8f38688aa4392f3911caee10a599cc8e24359c2cf858544fb4` succeeded for exact feature revision `06f1e9c502fe77c617348885a470d4825f07e37a`. Its native executor log confirms all 143 offline tests passed.
feat: add deterministic IBM i recovery text bundles
All checks were successful
binjovi/ci Binjovi completed the frozen plan
faf6d18347
feat: capture real IBM i programs and verify independent recovery
All checks were successful
binjovi/ci Binjovi completed the frozen plan
06f1e9c502
sean changed title from feat: add deterministic IBM i recovery text bundles to feat: capture real IBM i programs and validate independent recovery 2026-09-10 00:22:22 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
sean/rpg-demo!45
No description provided.