Development record
Lifeboats Carry Source Code, Not Just Lessons
Press Release
abcd lets you bundle source code into your lifeboats. Running
/abcd:disembark pack <repo> <path> --with-codepacks not only the synthesised brief, principles, and reviews, but also a curated copy of the existing implementation. On the receiving end,/abcd:embark from <path> --with-codeunpacks both the design lessons AND the working code, so the new project starts running immediately rather than rebuilding from scratch."We were running disembark for big rewrites where the lessons were the goal, but for some projects we just wanted to fork-and-improve," said Bob, staff engineer. "Now I can choose: rebuild clean, or carry the code over and refactor where it matters."
Why This Matters
abcd deliberately scopes code-shipping out of the base lifeboat: the lifeboat captures lessons (principles, decisions, reviews), and code-rescuer extracts patterns from source without ever copying source itself. This is right for greenfield rewrites but wrong for the substantial fraction of cases where users want to fork-and-improve rather than rebuild.
Code bundling needs a thoughtful scope decision (source dirs only? everything tracked? curator-driven? user-picked?) and a corresponding lifeboat shape. The --with-code flag is the extension point; the simpler "lessons-only" model ships first, with code bundling added once real disembark/embark cycles provide evidence.
What's In Scope
--with-codeflag on/abcd:disembark pack <repo> <path>(pack code into lifeboat)--with-codeflag on/abcd:embark from <path>(unpack code from lifeboat)- Code scope decision: source dirs / everything tracked / curator-driven / user-picked (one wins)
- Updated lifeboat shape with
code/subdirectory and manifest code-rescueragent extended (currently principle-only) to make scope-aware copy decisions
What's Out of Scope
- Migrating existing lifeboats forward to include code retroactively (covered by itd-9 schema migration)
- Selective code "diff" packing (only changed files vs full snapshot) — possible future extension
- Test-suite carrying as a separate axis (could be future intent)
Acceptance Criteria
BDD format, per
itd-1-acceptance-gates. These gates are checked byintent-fidelity-reviewerwhen this intent moves toshipped/.
- Given a project with a
src/directory and/abcd:disembark pack <repo> <path> --with-codeis invoked, when disembark completes, then the lifeboat at<path>contains acode/subdirectory holding the curated source AND acode/_manifest.jsondeclaring per-file scope decision (copy_verbatim/copy_redacted/excludedwith reason). - Given a lessons-only lifeboat (no
code/subdirectory), when the user runs/abcd:embark from <path> --with-codeagainst it, then the command warns "this lifeboat carries lessons only; nothing to unpack as code" and embarks the brief content normally without erroring. - Given a code-bundled lifeboat, when
/abcd:embark from <path> --with-coderuns, then the unpacked repo contains the source under the documented destination (e.g.,src/matching the disembark scope) AND the embark report records the per-file copy outcomes. - Given the user declines code curation at disembark time (or runs
disembark pack <repo> <path>without--with-code), when disembark completes, then nocode/directory is written to the lifeboat — the--with-codeflag is the only path to code shipping; default behaviour stays lessons-only. - Given
disembark pack <repo> <path> --with-codeis invoked on a repo where the curator-suggested defaults exclude a file the user wants included, when the user inspects the curator output interactively, then the user can override the per-file decision before disembark commits the lifeboat. - Given a code-bundled lifeboat, when
/abcd:launch shipruns against it, thencode/is not automatically promoted to the publicabcd/repo — code shipping respects the launch payload manifest's default-deny semantics; explicit allow-list entries are required.
SOTA
Surveyed on 2026-10-23; sources, evidence tiers and the local fit risks are in the harness, interop and lifeboats SOTA note, which reuses the itd-35 manifest finding in the same day's security and isolation note.
- git answers two different questions first-party:
git archivewrites one tree (the named commit's tree only: no history, and no uncommitted or untracked work unless--add-filenames it), honoursexport-ignoreandexport-substfrom the tree's own.gitattributes, stores the commit id in a pax header;git bundlepacks objects and refs for offline transfer,verifychecks it "will apply cleanly", a self-contained bundle unpacks into an empty repository, and it carries no index, working tree, stash, config or hooks (git documentation). - Scope can be declared in the repository:
export-ignoreis the maintained in-tree statement of "not part of the shipped tree"; a curator starts from that baseline and the manifest records only deviations with their reasons. - BagIt (RFC 8493) is the standard for a payload with a per-file manifest:
data/,manifest-<alg>.txtwith one checksum per payload file, "complete" (everything listed exists and everything present is listed) against "valid" (every checksum verifies), SHA-512 recommended, and a note that manifests do not resist deliberate tampering. The draft'scode/_manifest.jsonis BagIt-shaped, one digest per payload file and the complete/valid distinction, plus a decision column BagIt does not have; it is not a BagIt manifest that BagIt tooling would read. - The lifeboat's integrity manifest is being shaped as a flat digest-per-file list verified on extracted files (itd-35);
code/is more rows in it, not a second mechanism. - The launch bundler is default-deny by construction ("no include pattern can promote a denied path",
internal/core/launch/bundle.go), socode/never reaches a launch payload unless named.
Path 2 — a native code/ family shaped to git archive scoping (export-ignore baseline, curator suggestions, per-file override recorded with its reason) and a BagIt-shaped manifest, with an opt-in git bundle as the history carrier verified on embark. git archive carries HEAD's tree only, and a project is packed when it is being left behind, which is when uncommitted work exists: pack reports every uncommitted or untracked file it leaves out, or adds it with --add-file on the person's say-so, and never drops one silently (loud staging). The independent fit-challenge runs at plan time.
Open Questions
- Which scope model wins? Likely user-picked at disembark with curator-suggested defaults, but needs confirmation.
- How does
--with-codeinteract with/abcd:launch's default-deny payload manifest? - Do code-bundled lifeboats grow large enough to warrant compression / streaming?
- (SOTA 2026-10-23) Does the fork-and-improve case want history (a bundle) or a tree (an archive) by default, and is the choice a flag or a question at pack time?
Audit Notes
Empty. Populated by intent-fidelity-reviewer when intent moves to shipped/.
Frontmatter
| id | itd-8 |
|---|---|
| type | intent |
| lifecycle | drafts |
| kind | standalone |
| severity | minor |
.abcd/development/intents/drafts/itd-8-with-code-bundling.md
open on GitHub ↗ · commit history ↗
Referenced by4
- iss-2610262033030496itd-8 has a code-rescuer agent decide what code the pack copies; the disembark page says pack is one deterministic run that dispatches no agents.related
- iss-2610262039173971itd-8 extends a `code-rescuer` agent it calls currently principle-only, but the agent catalogue lists `code-rescuer` among the agents still to be builtrelated
- iss-2610262044045987itd-8 leaves adding code to old lifeboats to itd-9; itd-9 migrates structural schema only and excludes lifeboat contentrelated
- iss-2610262044466021itd-8 writes the lifeboat packer as `/abcd:disembark pack <repo> <path>`; shipped itd-88 writes it as `disembark <repo> to <dest>`related
mentions10
- iss-21itd-8 and itd-16 cite the launch intent as itd-launch by name, not number — a dangling-reference class the itd-78 graph lint should flag; re-point to the concrete itd
- iss-94The intent corpus still specifies the pre-adr-35 lifeboat model: itd-2, itd-8, itd-9, itd-10, itd-13, itd-15, itd-19, itd-22 and itd-24 variously use the retired 'disembark to home' signature, the in-tree .abcd/lifeboat/ home, or the in-tree .abcd/development/voyage/ path (itd-9's acceptance writes voyage provenance in-tree — the exact path that would fail abcd's own privacy-hygiene audit rule). The brief, glossary and roadmap were reconciled to adr-35; the intents were deliberately NOT rewritten, because an intent is a proposal with its own lifecycle and silently rewriting nine of them inside an unrelated change is worse than tracking the drift. Each reconciles when it is next planned.
- itd-1Every Intent Has Acceptance Criteria; Every Audit Verifies Them
- itd-9Old Lifeboats Still Unpack
- itd-35Lifeboats Carry Their Own Integrity Proof
- itd-88Know What a Repo Can and Cannot Tell You — Before You Trust the Lifeboat
- itd-2609091034175565Before an agent starts on an item, it reserves it on the shared remote, and everyone who works on the project sees the reservation
- itd-2609111003026787A gate catches the intent whose work is live while its spec is still open
- itd-2609212103572513An intent names the release it must land by, and the cut says whether it did
- spc-3lifeboat-coverage-experiment