import sys
sys.path.insert(0, r'C:\Users\decid\AppData\Local\Temp\claude\C--Users-decid-Documents-projects-spt-core\eda11d3f-0102-46f7-a034-9d1d416bb9d3\scratchpad')
from crlfedit import Ed
e=Ed('docs-site/src/harness-contract/manifest.md')
e.rep('''With `file_pull`, **you** sign your releases with your own key; spt-core's
release keys never extend to adapter content.
''','''With `file_pull`, **you** sign your releases with your own key; spt-core's
release keys never extend to adapter content.

<!-- [doc->REQ-ADAPTER-UPDATE-PRUNES-STRINGS] -->
**What an update does to files you stop shipping.** An update replaces only the
files whose content changed, and what happens to a file your new release no
longer contains depends on where it lives:

- **`strings/` mirrors your archive.** A file under `strings/` that the new
  release does not ship is **removed** once the update has landed, along with any
  directory that leaves empty. Rename `skills/a.md` to `skills/a/SKILL.md` and
  the old `a.md` is gone after the update — a harness that scans `strings/` never
  finds a skill you retired.
- **Everything else is additive.** A binary (or any other file outside
  `strings/`) that you drop stays on the node until the next clean install. A
  running process is never pulled out from under an update, so do not rely on an
  update to delete an old executable; stop referencing it instead.
''')
e.save()
e=Ed('docs/MANIFEST.md')
e.rep('''<!-- [doc->REQ-ADAPTER-UPDATE-PARALLEL] -->''','''<!-- [doc->REQ-ADAPTER-UPDATE-PRUNES-STRINGS] -->
**Update semantics — `strings/` mirrors, binaries are additive (releases#278).** The CRC swap replaces only content-changed files. A file the new archive no longer ships is PRUNED if it lives under `strings/` (removed after the swap commits, emptied dirs under `strings/` removed, `strings/` itself kept; a prune that cannot remove its file prints `CRC_SWAP_PRUNE_FAILED:` and the update still stands) and LEFT IN PLACE anywhere else, so a running binary is never yanked. The swap's own `.new` / `.old[-N]` litter is never a prune row. Both apply routes (CLI direct and daemon-coordinated) run the one plan (`spt_daemon::crc_swap::plan_crc_swap`).

<!-- [doc->REQ-ADAPTER-UPDATE-PARALLEL] -->''')
e.save()
print('ok')
