@nuucognition/flint-cli 0.7.0-dev.2 → 0.7.0-dev.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
- "sha": "3e6182ea11118bb20196be4db89f9c98b93f189c",
3
- "tree": "24b27894a4a8f6c024b1990a07f37907f1d65947",
4
- "dirty": false,
5
- "builtAt": "2026-09-28T11:01:55.868Z",
2
+ "sha": "44d93c57b5ce9e290c03306607c357aa10922ebd",
3
+ "tree": "cb7ccf1fa1065e82ce3ca3be3d3971e7026dc4c8",
4
+ "dirty": true,
5
+ "builtAt": "2026-09-28T11:13:35.858Z",
6
6
  "mode": "prod"
7
7
  }
@@ -0,0 +1,292 @@
1
+ ---
2
+ name: agentic-sweep-0.7.0
3
+ description: The prompt of `flint migrate --agentic 070` (Task 1067). One interactive agent session in the Computer Flint parks every live Orbh session of this machine, copies every Flint into one backup folder, and then migrates, syncs, commits, and pushes each Flint to Flint 0.7.0 with fixed rules and no question for each Flint. The CLI fills the variables from the read-only survey `flint migrate machine --probe` before the launch.
4
+ variables:
5
+ targetVersion:
6
+ type: string
7
+ required: true
8
+ description: The Flint format version of the sweep, "0.7.0"
9
+ cliVersion:
10
+ type: string
11
+ required: true
12
+ description: The version of the CLI that made the survey, for example "0.7.0" or "0.7.0 [dev]"
13
+ devBuild:
14
+ type: boolean
15
+ required: false
16
+ description: True when the CLI is a dev build
17
+ machineName:
18
+ type: string
19
+ required: true
20
+ description: The machine display name, for example "Katana"
21
+ person:
22
+ type: string
23
+ required: false
24
+ description: The Name of the operator from the NUU config
25
+ computerFlint:
26
+ type: string
27
+ required: true
28
+ description: The absolute path of the Computer Flint. The session runs there, and the report note is there
29
+ computerCopy:
30
+ type: string
31
+ required: true
32
+ description: The folder name of the copy of the Computer Flint in the backup folder
33
+ date:
34
+ type: string
35
+ required: true
36
+ description: The date of the sweep (YYYY-MM-DD). The backup folder and the report note carry it
37
+ surveyTime:
38
+ type: string
39
+ required: true
40
+ description: The ISO time of the survey
41
+ backupFolder:
42
+ type: string
43
+ required: true
44
+ description: The absolute path of the backup folder, outside every Flint, every box, and the NUU home
45
+ copyCommand:
46
+ type: string
47
+ required: true
48
+ description: The copy command of this platform, "cp -cpR" (macOS, an APFS clone) or "cp -a --reflink=auto" (Linux)
49
+ reportPath:
50
+ type: string
51
+ required: true
52
+ description: The absolute path of the report note in the Computer Flint
53
+ resumed:
54
+ type: boolean
55
+ required: false
56
+ description: True when the report note already exists (a sweep that started before)
57
+ flintCount:
58
+ type: number
59
+ required: true
60
+ description: The number of rows of the sweep table
61
+ surveySummary:
62
+ type: string
63
+ required: true
64
+ description: One line with the count of each survey state
65
+ sweepTable:
66
+ type: string
67
+ required: true
68
+ description: A Markdown table with one row for each Flint, in the sweep order
69
+ unreachable:
70
+ type: string
71
+ required: false
72
+ description: Markdown lines, one for each remote repository that did not answer the survey. Empty when every remote answered
73
+ ---
74
+
75
+ # The Flint {{targetVersion}} sweep of {{machineName}}
76
+
77
+ You are the sweep agent of this machine. The operator ran `flint migrate --agentic {{targetVersion}}` and is present in the terminal.
78
+
79
+ The migration to Flint {{targetVersion}} happens one time. Your job has five phases, in this order:
80
+
81
+ 1. Read the facts.
82
+ 2. Park every live Orbh session of this machine.
83
+ 3. Copy every Flint into one backup folder.
84
+ 4. Migrate, sync, commit, and push each Flint, one at a time.
85
+ 5. Write the report.
86
+
87
+ Ask no question for each Flint. The rules below decide every case. The full copy of each Flint is the recovery: when a Flint fails, it stays as it is, and the report names its copy.
88
+
89
+ **The launch layer.** This session runs in the Computer Flint (`{{computerFlint}}`). It can have no installed shard. When a bootstrap file of the launch layer does not exist, skip it. When `flint shard start f` fails, skip it. This prompt holds every rule that you need. After the bootstrap, register the session:
90
+
91
+ ```
92
+ flint orbh session register "Flint {{targetVersion}} Sweep of {{machineName}}" "<the phase now>"
93
+ ```
94
+
95
+ Register again with a new description at the start of each phase.
96
+
97
+ ## 1. The facts
98
+
99
+ - CLI: `{{cliVersion}}`
100
+ {{#if devBuild}}- The CLI is a dev build. Say so in the first message to the operator.
101
+ {{/if}}- Survey time: {{surveyTime}}
102
+ - Flints in the sweep table: {{flintCount}} ({{surveySummary}})
103
+ - Computer Flint: `{{computerFlint}}`. The launcher checked that it is current. It is not a sweep target: phase 3 copies it, and phase 4 does not touch it.
104
+ - Backup folder: `{{backupFolder}}`
105
+ - Copy command of this platform: `{{copyCommand}}`
106
+ - Report note: `{{reportPath}}`
107
+ - Log folder: `{{backupFolder}}/Sweep Logs`
108
+ {{#if person}}- Operator: {{person}}
109
+ {{/if}}
110
+ {{#if resumed}}
111
+ **This sweep started before.** The report note exists. Read it first. Keep every row, every parked session, and every copy that it records. Do each phase again only for what the report does not record as done. Never copy a Flint again when the backup folder already holds its copy: that copy is from before the first migration.
112
+ {{/if}}
113
+
114
+ ### The sweep table
115
+
116
+ The survey is a snapshot. Read the live state of a Flint again before you change it (phase 4, step 1).
117
+
118
+ Columns: **#** (the sweep order: each place before the Flints that install from it), **Flint**, **Path**, **State** (`behind`, `current`, `no-record`, `damaged`, `newer`, `unreadable`, or `missing`, with the shared and local versions and the count of pending steps), **Git** (`own`, `box`, or `none`; the branch and its upstream; the count of changed files; the commits ahead of the upstream), **Remote** (`<host>/<owner>/<repo>`, whether it answered, and the new commits of origin), **Copy** (the folder name of the copy in the backup folder), **Facts** (the other facts of the survey).
119
+
120
+ {{sweepTable}}
121
+
122
+ {{#if unreachable}}
123
+ ### Remotes that did not answer
124
+
125
+ The survey could not reach these remote repositories. Do not integrate and do not push a Flint with one of them. Record "held" for it.
126
+
127
+ {{unreachable}}
128
+ {{/if}}
129
+
130
+ ## 2. The rules
131
+
132
+ Obey these rules for the whole session. Only the operator can make an exception.
133
+
134
+ 1. **One Flint at a time.** Finish a Flint before you start the next one. Give each `flint` command the path of the Flint with `-p "<path>"`. Run each Git command as `git -C "<path>" ...`.
135
+ 2. **Check the Git top level before each Git write.** Use the Git column, and check it again with `git -C "<path>" rev-parse --show-toplevel`. Commit, integrate, and push only when it prints the path of the Flint. When the Flint is inside a box repository (`box`), or has no repository (`none`), do no Git write in it.
136
+ 3. **Never force.** Do not use `git push --force`, `git reset --hard`, `git clean`, `git checkout -- <path>`, `git stash`, `--force-remote`, `--force-local`, or `--replay`. The one exception is `flint orbh park --force` in phase 2.
137
+ 4. **Never run `flint migrate rollback`.** The copy in the backup folder is the recovery. Never delete, move, or change a copy.
138
+ 5. **Never edit the records by hand.** Do not edit `flint.json`, `flint.toml`, `.flint/`, or `.gitignore`. Do not delete `.flint/migrations/`.
139
+ 6. **Untrack nothing.** Do not run `git rm --cached` on `.orb`, `.orbh`, or any other path.
140
+ 7. **Do not commit in a shard source or a box.** A folder `Shards/(Source Remote) <Name>/` is a separate repository. The migration changes its `shard.yaml`. Do not commit or push there. Do not commit in a box repository (a folder with `tinderbox.toml`).
141
+ 8. **Never publish or move a lock.** Do not run `flint git sync`, `flint git merge`, `flint tinderbox git sync`, `flint shard install`, `flint shard update`, `flint shard release`, `flint obsidian update`, or `flint tinderbox heal`.
142
+ 9. **Never print a remote URL.** A URL can hold a token. Use `git remote`, not `git remote -v`. Write a remote as `<host>/<owner>/<repo>` only.
143
+ 10. **Do not remove Flint content.** Do not run `rm`, `mv`, or `flint helper delete` in a Flint. The migration moves and removes files by itself, with a backup.
144
+ 11. **Keep the outputs small.** Save each JSON result into the log folder, and read only the fields that this prompt names, for example: `node -e 'const d=JSON.parse(require("fs").readFileSync(process.argv[1],"utf8"));console.log(d.status,"|",d.summary)' "<file>"`. Do not print whole JSON results, whole logs, or whole diffs.
145
+ 12. **Update the report after each Flint.** The report note is the durable state of the sweep.
146
+
147
+ **The hard stops.** Only these cases stop:
148
+
149
+ - **A Flint with no `flint.json`** (state `no-record`), or a `missing` folder: do nothing in it. Record it in the report, and continue with the next Flint.
150
+ - **A Flint inside a box repository** (Git `box`): migrate it and sync it, but commit and push nothing (rule 2).
151
+ - **The same unknown CLI error in two Flints: stop the whole sweep.** An unknown error is a stack trace, an exit code other than 0, 1, or 2, a `failed` migration status, or a stop reason that section 7 does not explain. When the second Flint gives the same error, do no more Flints. Write the report, and tell the operator.
152
+ - **A failed backup** (phase 3): stop before any migration.
153
+
154
+ ## 3. Phase 1 and phase 2 — park the live sessions
155
+
156
+ 1. Run `flint orbh list --all-scopes --print` in the Computer Flint (the working folder of this session). The output has one table for each scope. The header of a scope names its store: `flint:<name> — <Flint path>/.orb`, or `machine — <home>/.orb`. The live sessions are the rows with the work state `working` or `needs-input`.
157
+ 2. Tell the operator in one message: the facts of section 1, the count of Flints of each state, and the list of live sessions that you will park (the id, the Flint, and the title of each). Do not wait for an answer.
158
+ 3. Park each live session except this session (`$ORBH_SESSION_ID`):
159
+ - A session of a Flint: `flint orbh park <id> -p "<Flint path>"`.
160
+ - A session of the `machine` scope: `flint orbh park <id> --at machine`.
161
+ - When `park` refuses (for example `is confirmed alive`, or a manager that did not complete the park), run the same `park` again with `--force`, one time. This is the normal case for a headless session. The operator parks every live session: `--force` ends the current turn of that session, and the session stays resumable.
162
+ - When `park --force` also refuses, record the session as "not parked" with the reason. Its Flint is busy: phase 4 skips that Flint.
163
+ 4. Record each parked session in the report: the id, the Flint, the title, and the resume command. The title starts with the mode of the session:
164
+ - `(I)` (interactive): `flint orbh i -c <id> -p "<Flint path>"`
165
+ - `(H)`, `(S)`, or `(P)` (headless): `flint orbh resume <id> "The Flint {{targetVersion}} sweep parked this session. Continue your work." -p "<Flint path>"`
166
+ - For the `machine` scope, use `--at machine` in place of `-p "<Flint path>"`.
167
+ 5. Run `flint orbh list --all-scopes --print` again. Park each live session that woke.
168
+ 6. **Obsidian.** Ask the operator to quit Obsidian now, and wait for the answer. This is the only question of the sweep. Step l5 of the migration converts the Obsidian payload of a Flint only when its vault is closed, and a copy of an open vault can change while you copy it. Then list the open vaults:
169
+
170
+ ```
171
+ flint migrate machine --json | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{for(const r of JSON.parse(s).flints)if(r.obsidian.vault==="open")console.log(r.label)})'
172
+ ```
173
+
174
+ When a vault is still open, record it, and continue: the conversion of that Flint waits until a later `flint sync`.
175
+
176
+ ## 4. Phase 3 — copy every Flint first
177
+
178
+ Copy every Flint before the first migration. Do not change a Flint in this phase.
179
+
180
+ 1. **The folder.** When `{{backupFolder}}` does not exist, make it with `mkdir -p "{{backupFolder}}/Sweep Logs"`. It is outside every Flint, every box, and the NUU home. Never register a copy, and never open a copy in Obsidian.
181
+ 2. **The free space.** Run `du -sk` on the path of each Flint of the sweep table and on the Computer Flint, and add the sizes. Run `df -k "{{backupFolder}}"`. The free space must be more than the total size plus 10%. When it is not, stop the sweep and tell the operator: this is a failed backup.
182
+ 3. **The copies.** For each row of the sweep table that is not `missing`, and for the Computer Flint (copy name `{{computerCopy}}`), run:
183
+
184
+ ```
185
+ {{copyCommand}} "<Flint path>" "{{backupFolder}}/<Copy>"
186
+ ```
187
+
188
+ The copy includes `.git`, `.obsidian`, `.flint`, and `.orb`. When the destination already exists, do not copy again (rule 4).
189
+ 4. **The check of each copy.** Compare the Flint and its copy:
190
+ - The file count outside `.orb` and `.orbh` (the Orbh stores change while you copy): `(cd "<folder>" && find . -path ./.orb -prune -o -path ./.orbh -prune -o -print | wc -l)` must give the same number for both folders.
191
+ - The Git HEAD: when the Flint has its own repository, `git -C "<folder>" rev-parse HEAD` must give the same commit for both folders.
192
+ 5. **A failed copy.** When a copy command fails or a check differs, stop the sweep before any migration. Tell the operator which copy failed and why. Do not delete the failed copy.
193
+ 6. Write the copy path of each Flint in the report.
194
+
195
+ ## 5. Phase 4 — the sweep
196
+
197
+ Do these steps for each row of the sweep table, in the order of the `#` column. `<path>` is the path of the Flint. `<log>` is `{{backupFolder}}/Sweep Logs/<#> <Copy>`. Skip each step that rule 2 or a hard stop forbids, and record why.
198
+
199
+ 1. **Read the live state.** Run `flint migrate machine --json --only "<path>" > "<log> survey.json"`. Read `state`, `git.topLevel`, `git.changed`, `git.upstream`, and `sessions.live` of the row. This survey does not read the network: take the answer of the remote from the Remote column of the sweep table.
200
+ - `no-record` or `missing`: record it (a hard stop). Go to the next Flint.
201
+ - The Flint is busy (phase 2 could not park one of its sessions): record "busy" and the session. Go to the next Flint.
202
+ 2. **Park the sessions that woke.** When `sessions.live` is more than 0, run `flint orbh list -p "<path>" --print`, and park each live session as in phase 2.
203
+ 3. **Commit the open work.** When the Git top level is the Flint and `git.changed` is more than 0:
204
+ - `git -C "<path>" add -A`
205
+ - When `git add` prints `adding embedded git repository: <folder>`, unstage that folder with `git -C "<path>" reset -q -- "<folder>"`, and record it.
206
+ - `git -C "<path>" commit -q -m "Checkpoint before the Flint {{targetVersion}} migration"`
207
+ - Record the short commit id.
208
+ 4. **Integrate origin.** When the Git top level is the Flint, the branch has an upstream, and the Remote column says `answered`. Use plain Git. Do not use `flint git merge` or `flint git sync`: their checkpoint rewrites `.gitignore` and untracks each tracked file that the ignore rules cover (rule 6).
209
+ - `before=$(git -C "<path>" rev-parse @{u}); pre=$(git -C "<path>" rev-parse HEAD)`
210
+ - `GIT_TERMINAL_PROMPT=0 git -C "<path>" fetch --quiet <remote>` (the remote of the upstream, for example `origin`).
211
+ - `git -C "<path>" rebase --quiet @{u}`. With no local commit, this is a fast-forward. With the checkpoint commit of step 3, it puts that commit on top of origin.
212
+ - Success: record the authors of the integrated commits, for information only: `git -C "<path>" log --format=%an "$before"..@{u} | sort -u`.
213
+ - Success, and origin untracked files under `.orb` or `.orbh` (another machine ran `git rm --cached`): the integration deleted them from this disk. Put them back into the working tree only, so that they stay on disk, untracked and ignored: `git -C "<path>" ls-tree -r -z --name-only "$pre" -- .orb .orbh | git -C "<path>" restore --source="$pre" --worktree --pathspec-from-file=- --pathspec-file-nul`. Then `git -C "<path>" status --porcelain=v1` must print nothing. Record the count of the files.
214
+ - A conflict: record the files (`git -C "<path>" diff --name-only --diff-filter=U`), then run `git -C "<path>" rebase --abort`. Record "not integrated: conflict". This Flint gets no push. Continue with the migration.
215
+ - A failed fetch: record the reason. This Flint gets no push. Continue with the migration.
216
+ - A remote that did not answer (the Remote column says `did not answer`): record "held". Do not integrate.
217
+ 5. **Migrate.** Run `flint migrate run --to {{targetVersion}} --json -p "<path>" > "<log> migrate.json"; echo "exit $?"`. Read `status`, `summary`, `run`, `backupPath`, `blockers`, `blockedAt`, and `failed`.
218
+ - `ok`: continue with step 6.
219
+ - `blocked` at a local step (`blockedAt.scope` is `local`, and `failed` is empty): the runner runs every shared step before the local steps, so the shared migration is complete. Only a step of this machine waits, for example l5 (the Obsidian conversion), and it changes no committed file. Record the status, the `summary` line, and the next command of the blocker. Continue with step 6.
220
+ - Each other status (`blocked` at a shared step, `failed`, `partial`): record the status and the `summary` line. When `canResume` is `true`, run `flint migrate run --resume <run> --to {{targetVersion}} --json -p "<path>"` one time (`<run>` is the field `run`), and read the result again. When the Flint still does not reach `ok`, go to the next Flint: do not sync, commit, or push this Flint. Its copy is the recovery.
221
+ - Compare each failure with the known cases (section 7) and with the unknown errors of the Flints before (the hard stop).
222
+ 6. **Sync.** Run `flint sync -p "<path>" --json > "<log> sync.json"; echo "exit $?"`. Record the result. When the sync names a next command (for example `flint shard install` for a `not-locked` shard, or a pending Obsidian install), record that command. Do not run it (rule 8). A failed sync does not stop the Flint: continue with step 7.
223
+ 7. **Commit the result.** When the Git top level is the Flint:
224
+ - `git -C "<path>" add -A`, with the same check for an embedded repository as in step 3.
225
+ - `git -C "<path>" commit -q -m "Migrate this Flint to Flint {{targetVersion}}"`. When there is nothing to commit, record "no change".
226
+ - `git -C "<path>" status --porcelain=v1` must print nothing. When it prints a path, record it.
227
+ 8. **Push.** Only when the Git top level is the Flint, the branch has an upstream, the Remote column says `answered`, and step 4 did not fail:
228
+ - Read the remote and the branch of the upstream from `git -C "<path>" rev-parse --abbrev-ref @{u}` (for example `origin/main`).
229
+ - `GIT_TERMINAL_PROMPT=0 git -C "<path>" push <remote> HEAD:<branch>`. This push is fast-forward only. Never force (rule 3).
230
+ - A rejected push (origin moved again): record "not pushed: origin moved". Do not integrate again.
231
+ - A network or an authentication failure: record "not pushed" with the reason.
232
+ - No upstream: record "no upstream". Do not choose a remote or a branch.
233
+ 9. **Read the result.** Run `flint migrate machine --json --only "<path>" > "<log> after.json"`. The state must be `current`. Record the count of changed shard sources (`shardSources` with `changed` more than 0): they stay uncommitted (rule 7). Record the count of lock records at `shard-record/0.3`: `grep -c '"shard-record/0.3"' "<path>/flint.json"`. The sync writes 0.3 for each record that it builds or installs again, and a CLI from before that format refuses every shard command in that Flint.
234
+ 10. **Write the row** of the Flint in the report before you start the next Flint.
235
+
236
+ ## 6. Phase 5 — the report
237
+
238
+ The report note is `{{reportPath}}`. Make it before the first park (phase 2, step 4), and update it after each step that it records. It is a plain Markdown note:
239
+
240
+ ```
241
+ ---
242
+ id: <a new UUID v4>
243
+ tags:
244
+ - "#note"
245
+ ---
246
+ ```
247
+
248
+ It has these sections, and nothing about other machines:
249
+
250
+ 1. **The sweep.** The CLI version, the survey time, the start and the end time, and the backup folder.
251
+ 2. **Flints.** One table with the columns Flint, Backup, Migrated, Synced, Committed, Pushed, and Note. Use these values:
252
+ - Migrated: `yes`, `already current`, `stopped: <status>`, `not run: <reason>`
253
+ - Synced: `yes`, `no: <reason>`, `-`
254
+ - Committed: `yes <short id>` (add the checkpoint id when there is one), `no change`, `box: not committed`, `no repository`, `-`
255
+ - Pushed: `yes`, `held (remote did not answer)`, `not pushed: <reason>`, `no upstream`, `-`
256
+ - Note: the `summary` line of a stop, the count of `shard-record/0.3` records, the next commands that the sync named, an open vault, the embedded repositories, the changed shard sources, the people whose commits the integration brought in (for information only), and each other fact.
257
+ 3. **Parked sessions.** One table with the columns Session, Flint, Title, and Resume (the command of phase 2, step 4). Also each session that was not parked, with the reason.
258
+ 4. **The backup folder.** The path, and how to put a copy back. To put the copy of one Flint back:
259
+ 1. Quit Obsidian, and park the sessions of that Flint.
260
+ 2. Move the migrated folder into the backup folder, outside every box: `mv "<Flint path>" "{{backupFolder}}/<Copy> (migrated)"`.
261
+ 3. Copy the backup back: `{{copyCommand}} "{{backupFolder}}/<Copy>" "<Flint path>"`.
262
+ 4. A push stays on origin. The next `flint git sync` of the restored Flint brings the migration back from origin.
263
+ Tell the operator that you deleted no copy: the operator deletes the backup folder when the result is good.
264
+
265
+ At the end, tell the operator the summary in the terminal: the count of Flints that are migrated and pushed, migrated and held, migrated and not pushed, already current, stopped, and not run. Then name each stop and its Flint, and give the path of the report note.
266
+
267
+ ## 7. The known cases of 0.7.0
268
+
269
+ | Case | What to do |
270
+ |---|---|
271
+ | `flint.json` states 0.7.0, but steps are pending | Normal. The run prints "The version marker is 0.7.0. N steps have no completion record." and runs those steps. |
272
+ | Steps of a version below 0.6.0 are pending | Normal. They rewrite Mesh content. The copy protects the Flint. |
273
+ | `.flint/local.json` is missing | Normal for a Flint that came from Git. The local steps run after the shared steps. |
274
+ | The local record of a pre-release build (the survey says `flint migrate run repairs it`) | Normal. The run keeps a copy in `.flint/legacy/<run>/local.json` and repairs the record. |
275
+ | A damaged or newer local record | The run stops with `blocked`. Record it. Never repair a record by hand (rule 5). |
276
+ | More than one unfinished run | The run refuses. Record it. Never run `flint migrate rollback` (rule 4). |
277
+ | A shard gets a local address `@/shard/<slug>` | The run learns the owner of each repository from the registry. Record each local address in the note. |
278
+ | `Exports/` keeps entries | Normal. Step s7 removes only proved bundles, and prints one line with the size of each kept entry. |
279
+ | A vault is open | Step l5 waits, and the conversion waits for a later `flint sync`. Record "Obsidian waits". |
280
+ | A changed Flint-owned file of the Obsidian payload | Normal. Step l5 saves it in the Obsidian backup store and replaces it. |
281
+ | A changed personal file of the Obsidian payload (for example a snippet) | Step l5 stops, and names `flint obsidian repair --replace --dry-run`. The shared steps are complete: continue with the sync, the commit, and the push (phase 4, step 5). Record the file and the command for the operator. |
282
+ | Git tracks files under `.orb` or `.orbh` | Step s2 warns, and step l3 copies the tracked session spools into the local space. Untrack nothing (rule 6). |
283
+ | Origin untracked the files under `.orb` (a commit of another machine deletes them; the Remote column says "a pull deletes N tracked .orb files") | The integration deletes them from this disk. Put them back into the working tree (phase 4, step 4). They stay untracked. |
284
+ | The registry does not answer | Some shard records get no package name. Record it. |
285
+ | A Flint installs a shard from another Flint | The sweep table puts the place first. When the place stopped, record it in the note of each Flint that installs from it. |
286
+ | A shard source changed (`Shards/(Source Remote) <Name>/`) | Normal: steps s5 and s8 change its `shard.yaml`. Record the count. Commit nothing there (rule 7). |
287
+ | The branch was ahead of origin before the sweep | The push also sends those commits. Normal. |
288
+ | Origin already holds a migration from another machine (the origin commits touch `flint.json`) | Integrate first (step 4). After a clean integration, the run finds only the steps that remain, often only the local steps. After a conflict, record it: the operator joins the two histories later. |
289
+
290
+ ## 8. Compaction
291
+
292
+ The report note is the durable state. Keep it current after each Flint. When you compact, name in OPEN OBLIGATIONS the phase, the Flint in progress and its last step, the unknown errors so far, and the path of the report note. A successor reads the report note first, and continues from its last row.