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-06-08 08:17:13 UTC | v0.1.0 | cli | ✅ passing | 359 ms | — | JSON |
2026-06-07 07:10:18 UTC | v0.1.0 | cli | ✅ passing | 349 ms | — | JSON |
2026-06-06 06:34:42 UTC | v0.1.0 | cli | ✅ passing | 361 ms | — | JSON |
2026-06-05 07:14:08 UTC | v0.1.0 | cli | ✅ passing | 358 ms | — | JSON |
2026-06-04 07:56:45 UTC | v0.1.0 | cli | ✅ passing | 371 ms | — | JSON |
2026-06-03 08:24:19 UTC | v0.1.0 | cli | ✅ passing | 372 ms | — | JSON |
2026-06-02 08:00:53 UTC | v0.1.0 | cli | ✅ passing | 365 ms | — | JSON |
2026-06-01 08:40:47 UTC | v0.1.0 | cli | ✅ passing | 366 ms | — | JSON |
2026-05-31 07:02:25 UTC | v0.1.0 | cli | ✅ passing | 354 ms | — | JSON |
2026-05-30 06:27:54 UTC | v0.1.0 | cli | ✅ passing | 355 ms | — | JSON |
2026-05-29 06:59:41 UTC | v0.1.0 | cli | ✅ passing | 356 ms | — | JSON |
2026-05-28 06:59:34 UTC | v0.1.0 | cli | ✅ passing | 346 ms | — | JSON |
2026-05-27 07:09:43 UTC | v0.1.0 | cli | ✅ passing | 363 ms | — | JSON |
2026-05-26 06:52:10 UTC | v0.1.0 | cli | ✅ passing | 341 ms | — | JSON |
2026-05-25 07:20:23 UTC | v0.1.0 | cli | ✅ passing | 351 ms | — | JSON |
2026-05-24 06:41:54 UTC | v0.1.0 | cli | ✅ passing | 349 ms | — | JSON |
2026-05-23 06:16:51 UTC | v0.1.0 | cli | ✅ passing | 361 ms | — | JSON |
2026-05-22 06:54:19 UTC | v0.1.0 | cli | ✅ passing | 359 ms | — | JSON |
2026-05-21 06:58:05 UTC | v0.1.0 | cli | ✅ passing | 339 ms | — | JSON |
2026-05-20 06:53:38 UTC | v0.1.0 | cli | ✅ passing | 365 ms | — | JSON |
2026-05-19 06:53:19 UTC | v0.1.0 | cli | ✅ passing | 354 ms | — | JSON |
2026-05-18 07:01:48 UTC | v0.1.0 | cli | ✅ passing | 374 ms | — | JSON |
2026-05-17 06:27:37 UTC | v0.1.0 | cli | ✅ passing | 350 ms | — | JSON |
2026-05-16 06:04:41 UTC | v0.1.0 | cli | ✅ passing | 344 ms | — | JSON |
2026-05-15 06:38:00 UTC | v0.1.0 | cli | ✅ passing | 356 ms | — | JSON |
2026-05-14 06:28:58 UTC | v0.1.0 | cli | ✅ passing | 349 ms | — | JSON |
2026-05-13 06:30:26 UTC | v0.1.0 | cli | ✅ passing | 322 ms | — | JSON |
2026-05-12 06:19:02 UTC | v0.1.0 | cli | ✅ passing | 350 ms | — | JSON |
2026-05-11 06:45:36 UTC | v0.1.0 | cli | ✅ passing | 330 ms | — | JSON |
2026-05-10 06:16:46 UTC | v0.1.0 | cli | ✅ passing | 378 ms | — | JSON |
2026-05-09 05:52:40 UTC | v0.1.0 | cli | ✅ passing | 418 ms | — | JSON |
2026-05-08 05:33:37 UTC | v0.1.0 | cli | ✅ passing | 378 ms | — | JSON |
2026-05-07 11:01:04 UTC | v0.1.0 | cli | ✅ passing | 356 ms | — | JSON |
2026-05-07 09:54:55 UTC | v0.1.0 | cli | ✅ passing | 354 ms | — | JSON |
2026-05-07 09:45:14 UTC | v0.1.0 | cli | ✅ passing | 382 ms | — | JSON |
2026-05-07 06:15:45 UTC | v0.1.0 | cli | ✅ passing | 354 ms | — | JSON |
2026-05-06 13:05:53 UTC | v0.1.0 | cli | ✅ passing | 396 ms | — | JSON |
2026-05-06 11:19:49 UTC | v0.1.0 | cli | ✅ passing | 298 ms | — | JSON |
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"
}
]
}