09 · sync-clean
What this scenario proves
archon sync (and its URL-less agent equivalent hi archon, are you healthy?) is read-only. Against an unmodified install, it must:
- Fetch the canonical manifest.
- Walk every installed file, compute sha256, compare to the manifest.
- Print a green report: every required module's files match.
- Write nothing — neither to source-files nor to runtime ledgers.
This is the most basic guarantee of the framework: the gate that proves "you can run sync at any time without consequences".
Test environment
| Fixture | output of scenario 01 (clean post-install) |
| IDE | Cursor |
| Manifest version under test | v0.1.0 |
| OS | same as scenario 01 |
Pre-conditions
- Scenario 01 ✅.
git statusclean immediately before this scenario starts.
Steps
text
1. In Cursor, paste exactly:
hi archon, are you healthy?
2. Or via CLI:
npx @archon/cli@latest sync
3. Inspect the printed report:
- core-soul: N/N OK
- core-contracts: N/N OK
- commands: N/N OK
- rules: N/N OK
- skills: N/N OK
- cli (optional): N/N OK (or "not installed" if removed in 08)
- extensions-demand-pool: …
4. Run `git status` immediately after — must still be clean.Expected outcome
| Check | Expected |
|---|---|
| Sync exits with success status | yes |
Every required module reports N/N OK | yes |
Optional modules report either N/N OK or not installed (never 0/N OK) | yes |
git status after sync | identical to before (clean) |
No .bak files created | yes |
.archon/drift.md unchanged | yes |
| Total wall-clock time | < 30 s on a warm cache |
Demo recordings
Recording coming soon
sync-clean.mp4IDE chat-panel walkthroughdocs/public/videos/sync-clean.mp4 once recorded. See videos/README for upload conventions. $ archon doctor .
[L1 Structural] OK
[L2 Contract] OK
[L3 Hints] OK
✔ Recording coming soon — placeholderdocs/public/asciinema/sync-clean.cast embedded via the asciinema-player web component. See asciinema/README for the recording command. Run records
The table below is rendered live from JSON written by the sandbox runner (scripts/sandbox-run.mjs) under docs/testing/sandbox/runs/sync-clean/. To add a new row, run
bash
node scripts/sandbox-run.mjs --only=sync-clean| Started (UTC) | Manifest | Runner | Result | Duration | Notes | Record |
|---|---|---|---|---|---|---|
2026-05-06 10:24:35 UTC | v0.1.0 | cli | ✅ passing | 372 ms | — | JSON |
2026-05-06 06:10:25 UTC | v0.1.0 | cli | ✅ passing | 414 ms | — | JSON |
2026-05-06 00:55:44 UTC | v0.1.0 | cli | ✅ passing | 369 ms | — | JSON |
2026-05-06 00:40:10 UTC | v0.1.0 | cli | ✅ passing | 385 ms | — | JSON |
2026-05-05 15:00:35 UTC | v0.1.0 | cli | ✅ passing | 331 ms | — | JSON |
2026-05-05 14:55:19 UTC | v0.1.0 | cli | ✅ passing | 454 ms | — | JSON |
2026-05-05 14:22:53 UTC | v0.1.0 | cli | ✅ passing | 411 ms | — | JSON |
2026-05-05 14:04:53 UTC | v0.1.0 | cli | ✅ passing | 388 ms | — | JSON |
2026-05-05 14:00:01 UTC | v0.1.0 | cli | ✅ passing | 399 ms | — | JSON |
2026-05-05 13:55:05 UTC | v0.1.0 | cli | ✅ passing | 388 ms | — | JSON |
Known limitations
- Does not test sync against a manifest fetched from a stale CDN cache. That is
sync-stale-manifest— separate scenario. - Does not exercise the offline path (
--offlineflag for the CLI); see protocol page for that mode's expected output.
Cross-references
- Protocol page:
/setup/sync - Agent file:
https://aaep.site/sync.md - Pre-requisite: 01 install-cursor-node
- Sibling: 10 sync-modified — same scenario but with a hand-edit injected so the report goes red.
json
{
"runnable": "cli",
"fixture": "fixtures/sandbox-node-ts",
"ide_platform": "cursor",
"prerequisites": [
{
"name": "archon install",
"cli": "install",
"flags": [
"--with=cli"
]
}
],
"steps": [
{
"name": "archon sync (json)",
"cli": "sync",
"flags": [
"--json"
]
}
],
"assertions": [
{
"file_exists": ".archon/VERSION"
}
]
}