You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ssealed upgrade [target] --repo-type api-service --density strict --runner make --force
74
75
ssealed doctor [target] --json
76
+
ssealed doctor [target] --strict --json
75
77
ssealed --help
76
78
ssealed --version
77
79
ssealed init --help
78
80
```
79
81
80
82
`init` creates a new scaffold and refuses targets with an existing valid `.ssealed/manifest.json`.
81
-
`update` reapplies the existing manifest settingsand refreshes checksums without changing `scope`, repository type, addons, `density`, or `runner`.
83
+
`update` reapplies the existing manifest settings, accepts project-owned edits to seeded documents, keeps deleted seeded documents retired, and refreshes manifest metadata without changing `scope`, repository type, addons, `density`, or `runner`.
82
84
`upgrade` is the explicit path for changing scaffold settings.
83
-
`doctor` checks manifest-tracked files for missing or modified content.
85
+
`doctor` checks scaffold lifecycle metadata. It accepts normal project evolution for seeded documents by default. Use `doctor --strict` when you intentionally want checksum drift detection against accepted manifest content.
84
86
85
87
`--profile` remains accepted as an alias for `--repo-type`.
86
88
@@ -152,17 +154,25 @@ Runner files are optional because many repositories already have their own task
152
154
153
155
## Overwrite Policy
154
156
155
-
Existing files are not overwritten by default. Identical files are marked `unchanged`. Different files are marked `conflict`. If any conflict exists and `--force` is not provided, no files are written.
157
+
Existing files are not overwritten by default. Identical files are marked `unchanged`. During `init`, different existing files are marked `conflict`. During `update`and `upgrade`, seeded files that already have project-owned edits are marked `customized` and are not overwritten. Seeded files that were deleted after a previous run are marked `retired` and are not recreated.
156
158
157
-
`--force` overwrites conflicting files only when the current file content matches the checksum recorded for that path in the previous `.ssealed/manifest.json`. The manifest is a local previous-run record, not a security boundary, and it never authorizes overwriting unrelated user files at the same path. Existing user-authored `.gitignore` patterns are preserved even with `--force`; only the ssealed managed block is replaced.
159
+
`--force` overwrites conflicting files only when the current file content matches the checksum recorded for that path in the previous `.ssealed/manifest.json`. The manifest is a local previous-run record, not a security boundary, and it never authorizes overwriting unrelated user files at the same path. Existing user-authored `.gitignore` patterns are preserved even with `--force`; only the ssealed managed block is replaced. Seeded files with project-owned edits stay project-owned unless their content still matches the previously accepted generated checksum.
158
160
159
161
## Manifest Behavior
160
162
161
-
Every write run refreshes `.ssealed/manifest.json` with tool version, generation timestamp, scope, profile, addons, density, runner, generated file paths, kinds, and SHA-256 checksums of normalized LF content. The `profile` field is retained for manifest compatibility and represents the selected primary repository type.
163
+
Every write run refreshes `.ssealed/manifest.json` with tool version, generation timestamp, scope, profile, addons, density, runner, file paths, kinds, ownership, presence, lifecycle status, and SHA-256 checksums of normalized LF content. The `profile` field is retained for manifest compatibility and represents the selected primary repository type.
162
164
163
-
The manifest helps identify previously generated files, but it never authorizes silent overwrite of user-modified files.
165
+
Manifest file ownership has three meanings:
164
166
165
-
`init` is intentionally conservative and refuses a target that already has a valid `.ssealed/manifest.json`. Use `update` to reapply the recorded scaffold settings, or use `upgrade` to explicitly change `scope`, repository type, addons, `density`, or `runner`. `update` rejects setting changes so old generated files do not silently become untracked scaffold leftovers.
167
+
-`seeded`: ssealed created an initial document or repository file, but the project is expected to edit, move, or delete it over time.
168
+
-`block-managed`: ssealed manages a bounded block or script set inside a user-owned file, such as `.gitignore` or generated validation scripts in `package.json`.
169
+
-`managed`: ssealed owns the full file content as tool metadata.
170
+
171
+
Seeded files use `presence: optional`; missing seeded files can be retained as `status: retired`. Active files keep both `initialChecksum` and `acceptedChecksum` so tooling can distinguish original template content from project-accepted content. The legacy `checksum` field remains as the accepted checksum for compatibility.
172
+
173
+
The manifest helps identify previously generated files, but it never authorizes silent overwrite of user-modified files. Default `doctor` treats modified seeded files as `customized` and missing optional seeded files as `retired`, both of which are healthy lifecycle states. `doctor --strict` reports accepted-checksum drift for callers that need the old exact-content comparison.
174
+
175
+
`init` is intentionally conservative and refuses a target that already has a valid `.ssealed/manifest.json`. Use `update` to reapply the recorded scaffold settings, or use `upgrade` to explicitly change `scope`, repository type, addons, `density`, or `runner`. `update` rejects setting changes so old generated files do not silently become untracked scaffold leftovers, but it does not force project documents back to their seed text.
ssealed upgrade ./my-service --repo-type api-service --density strict --runner make --force
210
220
ssealed doctor ./my-service --json
221
+
ssealed doctor ./my-service --strict --json
211
222
```
212
223
213
-
`--json` prints a public result shape with command, target, scope, profile, repoType, addons, density, runner, file paths, kinds, actions, reasons, conflicts, warnings, and written paths. Runtime failures also return `{ "ok": false, "error": { "code": "...", "message": "..." } }`. JSON output does not include generated file contents or existing file contents.
224
+
`--json` prints a public result shape with command, target, scope, profile, repoType, addons, density, runner, file paths, kinds, ownership, presence, actions, lifecycle statuses, reasons, conflicts, warnings, and written paths. Runtime failures also return `{ "ok": false, "error": { "code": "...", "message": "..." } }`. JSON output does not include generated file contents or existing file contents.
0 commit comments