No description
  • Assembly 68.3%
  • C 17.7%
  • Shell 9%
  • JSONiq 2.7%
  • RPGLE 1.4%
  • Other 0.9%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Sean OMeara d562a08680
fix: retry the final presence checks on transport failures
The check stage of the housekeeping Build compiled every object and then
died on a name-resolution failure inside one CHKOBJ, which the script
reported as a missing object. Only an IBM i object-not-found message
means missing; anything else is retried three times.

Claude-Session: https://claude.ai/code/session_01HPdKaFBKQVs8hzfgXMrnwV
2026-09-14 18:12:26 +02:00
.vscode fix: lint the recovered text without an indentation rule 2026-09-14 16:12:31 +02:00
db/sql feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
docs feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
native feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
recovery chore: keep only the verified Ghidra bundle copies of the listings 2026-09-14 17:58:32 +02:00
scripts fix: retry the final presence checks on transport failures 2026-09-14 18:12:26 +02:00
.gitattributes feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
AGENTS.md fix: add the linter configuration the pipeline's check stage expects 2026-09-14 16:09:04 +02:00
CHANGELOG.md feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
CLAUDE.md feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
README.md feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
sourcerer.json feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
test-1-open-for-business.sh feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
test-2-cannot-afford.sh feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00
test-3-closing-time.sh feat: release 1, recovered from pub400 after the routine source loss 2026-09-14 16:01:16 +02:00

rpg-lemonade-tng

The lemonade stand, recovered. rpg-lemonade is deployed to pub400 and every one of its deployments ends with a routine source loss: four source members disappear from the development library and two programs lose their debug data and observability in production and development. This repository is the twin that a recovery worker rebuilt from that box, with no access to the original source. It deploys through the same Binjovi pipeline, with the same three behaviour reels, from what the box still gives up:

origin what it is where
exact_source_captured the surviving members, exported twice and compared byte for byte native/
generated_ddl the SQL tables, procedures and functions as QSYS2.GENERATE_SQL text db/sql/
object_metadata catalog rows for every object: compile attributes, bound modules, service programs, exported symbols recovery/application/
retained_binary_only the lost executables as save-file dumps plus an on-box retained copy recovery/objects/*/archive.savf, recovery/retained.json
disassembly_captured the Ghidra 11.1.2 + PowerAS bundle of each stripped program: instructions, layout, interpretation recovery/objects/*/recovery/bundle/
permission_denied / insufficient_evidence what the host refused or what no tool can produce recovery/gaps.json

recovery/README.md is the provenance table. It is generated by scripts/recovery-report.sh from the receipts and the file hashes, so it shows exactly which files came from surviving source and which came from the Ghidra techniques. docs/RECOVERY.md records the run that produced release 1.

How it deploys

scripts/deploy.sh installs the twin into $LIB (SOMEARA1 for the Build check, SOMEARA2 for the release stage): it uploads the surviving members and compiles them with the commands of sourcerer.json, which were derived from the recovered catalog metadata; it duplicates each lost executable from its retained copy, because pub400 denies RSTOBJ (the committed archive.savf is the portable form for a host that can restore). The pipeline then records the three scenarios (test-*.sh), saves the release objects into LEMTNGSF and, on deploy, copies them to production. sourcerer manifest validate proves the manifest offline.

Reconstruction

A lost program becomes source again only through a reconstruction kit (its bundle, metadata, the surviving callers and the reels) and a native gate: compile in the release library, replay the scenarios. Until then it stays retained_binary_only. Nothing here is original source, and the provenance table never says otherwise.