Every item core held for one add-on, and did not use itself, is in that add-on's crate now. Where core still reads one, it goes through an extension point that already existed (the assembly's migrations, IPC routes and settings-page sections) or a raw accessor beside an existing one.
To lichen-git: the hub's ambiguous-main marker (HUB_AMBIGUOUS), the test routes' REFUSES_HUB_ACTS, the old deploy key copy's remover (deploy_key), the remote URL check (validate_remote_url, shared by git and the Pages deployment), the publish area's deploy-key constants and private write, and standard.site's settings with the publication URI git reads at an import.
To lichen-iroh: edit_iroh_peers_doc, iroh's peers in the settings' TOML, beside the [iroh] settings.
To lichen-publish: the publish targets' DNS checks, Built and PreparedPublication, the record and the area's files with migration 0007-publish, the [publish] settings (read from the raw table core keeps, SiteSections::publish_table), the two publish-settings asks the front server makes, and the settings page's publish and standard.site keys, now a section. lichen_publish::assemble registers the migration, the asks and the page section in every build, so a build without git still runs the migration, mounts the asks and fills the page.
What core keeps. publish.rs (PublishError, PublicationAttempt) and publish/outcome.rs, the OnPublish event's payload and core's build answer, because moving them needs a relocated or type-erased event. For git it keeps the migration ids, the owner's lent secrets, relay_dir and the known hosts, the fetch and push constants, BACKUP, FIRST_START, git_table, PUSHES, text_from_snapshot, adopt_recovered_room_history and AdmittedRoomProtocol; for the shell, ipc::link::front_pty. load_publication_uri, which nothing called, is deleted.
Held by a structure test. core_names_no_file_of_gits: none of core's sources names a file name that is git's.
ADD-ON-HOMES, the whole phase in one reading PR. Plan: https://tangled.org/notplants-bot.bsky.social/lichen-orchestrator/blob/main/machine-docs/plans/ADD-ON-HOMES-2026-11-07.md
Only the phase's Rust product code is here: every .rs file under crates/<crate>/src/ (no tests folder in its path), which is what e2e/ci/count_product_code_lines.py counts as product. The head is the base plus one commit that sets each of those files to its content at the end tip (added, changed, deleted and renamed files alike). Tests, docs, scripts and non-Rust files (including Cargo.toml and Cargo.lock) are not in it, so the crates here are not meant to build on their own. Reading copy; nothing here is to be merged.
Source PRs on lichen.page.review (product), in order #
- #3787 git's three items to
lichen-git; the structure test (ADD-ON-HOMES unit 1) - #3789
edit_iroh_peers_doctolichen-iroh(unit 2) - #3791
validate_remote_url, the DNS checks,BuiltandPreparedPublication(unit 2b-i) - #3793 the rest of core's
publish/andipc/publish.rs, through the extension points (unit 2b-ii)
Base, end tip, count #
Base 5328aaf2a8525af4585a8fa632a014da131dc3c5. End tip 10e4eae604ce6825c4481652be40de641805d84a. Head 9d039b4890efa7a5a7a5083cab8f05851af5c088 (57 files: 50 added or changed, 7 deleted).
Counter, base to end tip (the phase as lichen.page.review has it):
count-product-code-lines 5328aaf2a852..10e4eae604ce: NET +16 · counted +1061 -1045 · moved out of the counted set +0 · comment-only deletions flagged 15 · macros flagged 0 · tests-folder code flagged 0
Counter, base to head (this PR):
count-product-code-lines 5328aaf2a852..9d039b4890ef: NET +16 · counted +1061 -1045 · moved out of the counted set +0 · comment-only deletions flagged 15 · macros flagged 0 · tests-folder code flagged 0
The two are equal.
Check #
git diff base head lists only counter-product Rust files, and the head's content equals the end tip's for each of them.
Record #
ADD-ON-HOMES is COMPLETE at stack 10e4eae604ce6825c4481652be40de641805d84a (coordination report machine-docs/reports/ADD-ON-HOMES-2026-11-10.md). The end tip's last change, over the reviewed 78c221b9, is one Cargo.lock line, which is not in this PR. Every product commit in this range is the phase's own.