@orkestrel/scaffold 0.0.63 → 0.0.65

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.
Files changed (57) hide show
  1. package/README.md +29 -104
  2. package/dist/bin/main.js +95 -27
  3. package/dist/bin/main.js.map +1 -1
  4. package/dist/host/AGENTS.md +2 -2
  5. package/dist/host/CLAUDE.md +6 -0
  6. package/dist/host/agents/orchestration.md +23 -15
  7. package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +184 -177
  8. package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +314 -91
  9. package/dist/host/agents/skills/enterprise-bootstrap/references/color-modes.md +241 -0
  10. package/dist/host/agents/skills/enterprise-bootstrap/references/components.md +83 -36
  11. package/dist/host/agents/skills/enterprise-bootstrap/references/frontend-design.md +297 -98
  12. package/dist/host/agents/skills/enterprise-bootstrap/references/inputs.md +25 -14
  13. package/dist/host/agents/skills/enterprise-bootstrap/references/inspection.md +216 -128
  14. package/dist/host/agents/skills/enterprise-bootstrap/references/responsive-layout.md +187 -0
  15. package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +109 -20
  16. package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +5 -5
  17. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +1 -1
  18. package/dist/host/agents/skills/orkestrel-publish/SKILL.md +15 -15
  19. package/dist/host/agents/skills/orkestrel-publish/references/wave.md +43 -17
  20. package/dist/host/agents/skills/orkestrel-publish/references/window.md +41 -16
  21. package/dist/host/claude/agents/orkestrel.md +56 -56
  22. package/dist/host/claude/agents/reviewer.md +13 -0
  23. package/dist/host/claude/rules/architecture.md +51 -45
  24. package/dist/host/claude/rules/documentation.md +18 -1
  25. package/dist/host/claude/rules/portability.md +2 -0
  26. package/dist/host/claude/rules/quality.md +1 -1
  27. package/dist/host/claude/rules/tests.md +12 -11
  28. package/dist/host/claude/rules/typescript.md +5 -0
  29. package/dist/host/claude/rules/workspace.md +25 -20
  30. package/dist/host/claude/rules/writing.md +4 -0
  31. package/dist/host/claude/settings.json +1 -1
  32. package/dist/host/claude/skills/enterprise-bootstrap/SKILL.md +10 -9
  33. package/dist/host/codex/agents/orkestrel.toml +3 -3
  34. package/dist/host/codex/agents/reviewer.toml +4 -2
  35. package/dist/host/configs/helpers.ts +311 -2
  36. package/dist/host/configs/policy.ts +1100 -51
  37. package/dist/host/dotfiles/oxlintrc.json +72 -1
  38. package/dist/host/guides/guide.md +749 -222
  39. package/dist/host/guides/scaffold.md +529 -394
  40. package/dist/host/manifest.json +53 -40
  41. package/dist/host/scripts/ollama.sh +322 -13
  42. package/dist/host/tests/config.test.ts +1200 -16
  43. package/dist/host/tests/policy.test.ts +157 -173
  44. package/dist/host/tests/setupPolicy.ts +522 -1007
  45. package/dist/src/core/index.cjs +402 -287
  46. package/dist/src/core/index.cjs.map +1 -1
  47. package/dist/src/core/index.d.cts +160 -128
  48. package/dist/src/core/index.d.ts +160 -128
  49. package/dist/src/core/index.js +400 -286
  50. package/dist/src/core/index.js.map +1 -1
  51. package/dist/src/server/index.cjs +28 -21
  52. package/dist/src/server/index.cjs.map +1 -1
  53. package/dist/src/server/index.d.cts +38 -33
  54. package/dist/src/server/index.d.ts +38 -33
  55. package/dist/src/server/index.js +28 -21
  56. package/dist/src/server/index.js.map +1 -1
  57. package/package.json +18 -19
@@ -1,10 +1,7 @@
1
1
  # Scaffold
2
2
 
3
- > Scaffold compiles a workspace specification into an ordered list of files, compares that list to a
4
- > real directory, and writes the difference. It ships one executable, `scaffold`, and library
5
- > entry points: `@orkestrel/scaffold` is the pure compiler and its data contracts, and
6
- > `@orkestrel/scaffold/server` is the filesystem writer and the network reader. Source:
7
- > [`src/core/index.ts`](../src/core/index.ts) and [`src/server/index.ts`](../src/server/index.ts).
3
+ > A compiler that turns a workspace specification into an ordered list of files, compares that list
4
+ > to a real directory, and writes the difference.
8
5
 
9
6
  The package exists because every `@orkestrel` repository shares the same toolchain, the same agent
10
7
  instructions, and the same root dotfiles. Keeping every copy of those files in agreement by hand
@@ -14,10 +11,10 @@ write the difference back.
14
11
 
15
12
  That root stages the vendored set and the instruction canon, and a target meets them differently.
16
13
  `HOST_PATHS` names the vendored set — the licence, the harness permission file, the
17
- session-start hooks, the shared policy register, the shared policy proof, the shared policy plugin,
18
- the shared configuration leaf and its proof, the byte-identical root dotfiles, and the guide mirrors
19
- a generated workspace starts from, never its own guide — and each target carries its own copy of
20
- the paths it selects, which the verbs write and compare.
14
+ session-start hooks, the shared policy register, the shared policy
15
+ proof, the shared policy plugin, the shared configuration leaf and its proof, the byte-identical
16
+ root dotfiles, and the guide mirrors a generated workspace starts from, never its own guide — and
17
+ each target carries its own copy of the paths it selects, which the verbs write and compare.
21
18
  `CANON_PATHS` names the instruction canon — the coding and orchestration contracts, the rules, the
22
19
  skills, the templates, the transport contracts, the agent roles, the bench configuration, and the
23
20
  MCP registrations — which stays in one place and is published for reading. A target carries the
@@ -36,7 +33,7 @@ print. Limits states what that leaves unproven and what covers it instead.
36
33
  npm install --save-dev @orkestrel/scaffold
37
34
  ```
38
35
 
39
- The executable needs Node 22.12 or later. Run it through `npx` without installing:
36
+ The executable needs Node 22.18.0 or later. Run it through `npx` without installing:
40
37
 
41
38
  ```sh
42
39
  npx @orkestrel/scaffold --help
@@ -51,241 +48,242 @@ Exported from `@orkestrel/scaffold`, and reachable from
51
48
 
52
49
  #### Types
53
50
 
54
- | Name | Kind | Summary |
55
- | ------------------- | ---- | ------------------------------------------------------------------------------------------------ |
56
- | `Artifact` | type | One file in a plan, discriminated by how its content is produced and what scaffold claims of it. |
57
- | `BuildFormat` | type | One module format a published library environment builds. |
58
- | `CatalogEntry` | type | One package row of the fleet catalog. |
59
- | `CompileStage` | type | The compile phases, in the order they run. |
60
- | `CompilerEventMap` | type | The compiler's observation channel. |
61
- | `HostFile` | type | One vendored file read from the repository, beside the target bytes it answers for. |
62
- | `Drift` | type | How one target path compares to the artifact planned for it. |
63
- | `Environment` | type | One environment a generated workspace selects on its `src` or `app` axis. |
64
- | `Finding` | type | One drift verdict against a target path. |
65
- | `Group` | type | The artifact group a plan selects over. |
66
- | `Lookup` | type | How an upstream lookup resolved: found, missing, unmatched, or failed. |
67
- | `Mirror` | type | One dependency guide fetched from upstream, beside the local mirror it answers for. |
68
- | `Origin` | type | How an artifact's content is produced. |
69
- | `Ownership` | type | What scaffold claims at an artifact's path. |
70
- | `Release` | type | One declared dependency range measured against a registry release. |
71
- | `ScaffoldErrorCode` | type | The coded reasons a scaffold error is raised. |
72
- | `Snapshot` | type | Exact lowercase hexadecimal target bytes keyed by artifact-relative path. |
51
+ | Name | Kind | Summary |
52
+ | ------------------- | ---- | ----------------------------------------------------------------------------------------------------------- |
53
+ | `Artifact` | type | Represents one file in a plan, discriminated by how its content is produced and what scaffold claims of it. |
54
+ | `BuildFormat` | type | Names one module format a published library environment builds. |
55
+ | `CatalogEntry` | type | Represents one package row of the fleet catalog. |
56
+ | `CompileStage` | type | Names the compile phases, in the order they run. |
57
+ | `CompilerEventMap` | type | Represents the compiler's observation channel. |
58
+ | `HostFile` | type | Represents one vendored file read from the repository, beside the target bytes it answers for. |
59
+ | `Drift` | type | Names how one target path compares to the artifact planned for it. |
60
+ | `Environment` | type | Names one environment a generated workspace selects on its `src` or `app` axis. |
61
+ | `Finding` | type | Represents one drift verdict against a target path. |
62
+ | `Group` | type | Names the artifact group a plan selects over. |
63
+ | `Lookup` | type | Names how an upstream lookup resolved: found, missing, unmatched, or failed. |
64
+ | `Mirror` | type | Represents one dependency guide fetched from upstream, beside the local mirror it answers for. |
65
+ | `Origin` | type | Names how an artifact's content is produced. |
66
+ | `Ownership` | type | Names what scaffold claims at an artifact's path. |
67
+ | `Release` | type | Represents one declared dependency range measured against a registry release. |
68
+ | `ScaffoldErrorCode` | type | Names the coded reasons a scaffold error is raised. |
69
+ | `Snapshot` | type | Holds exact lowercase hexadecimal target bytes keyed by artifact-relative path. |
73
70
 
74
71
  #### Interfaces
75
72
 
76
- | Name | Kind | Summary |
77
- | ----------------------- | --------- | --------------------------------------------------------------------------------------- |
78
- | `AppDefinition` | interface | The configuration and runtime-entry settings one private `app` environment contributes. |
79
- | `ArtifactBase` | interface | The fields every planned file carries. |
80
- | `Audit` | interface | The whole comparison of a plan against a target's current content. |
81
- | `Blueprint` | interface | The closed, JSON-serializable workspace specification. |
82
- | `CompileFailure` | interface | The coded reason one compile stage failed. |
83
- | `CompileRecord` | interface | The input and output snapshot of one compile stage. |
84
- | `CompilerInterface` | interface | The compilation contract: pure, synchronous, and host-independent. |
85
- | `CompilerOptions` | interface | Options for the compiler. |
86
- | `ContentArtifact` | interface | A text file produced by the template or computed compilation path. |
87
- | `Dependency` | interface | One runtime `@orkestrel/*` dependency of a generated workspace. |
88
- | `DependencyPinSet` | interface | The runtime and development dependency sections a range writer may change. |
89
- | `HostArtifact` | interface | A file byte-copied from the vendored data root, planned before its bytes are read. |
90
- | `HydratedArtifact` | interface | A vendored file whose exact bytes have been read, so its content can be compared. |
91
- | `ManifestDependencySet` | interface | The runtime, development, and peer declarations read from an existing manifest. |
92
- | `ManifestRegionSet` | interface | The manifest regions a writing operation may change. |
93
- | `ManifestScript` | interface | One manifest script a region-writing operation may replace. |
94
- | `Override` | interface | One artifact override. |
95
- | `Plan` | interface | The compiled, ordered artifact list and the selection it covers. |
96
- | `PlanSummary` | interface | The tally of one plan by artifact origin. |
97
- | `Question` | interface | One validation issue raised against a blueprint or a plan. |
98
- | `Scaffolding` | interface | The replayable outcome of one compile. |
99
- | `SrcDefinition` | interface | The build and export settings one published `src` environment contributes. |
100
- | `ViteMachinery` | interface | Which host-specific pipelines a generated root Vite configuration carries. |
73
+ | Name | Kind | Summary |
74
+ | ----------------------- | --------- | ------------------------------------------------------------------------------------------------- |
75
+ | `AppDefinition` | interface | Describes the configuration and runtime-entry settings one private `app` environment contributes. |
76
+ | `ArtifactBase` | interface | Describes the fields every planned file carries. |
77
+ | `Audit` | interface | Represents the whole comparison of a plan against a target's current content. |
78
+ | `Blueprint` | interface | Represents the closed, JSON-serializable workspace specification. |
79
+ | `CompileFailure` | interface | Represents the coded reason one compile stage failed. |
80
+ | `CompileRecord` | interface | Holds the input and output snapshot of one compile stage. |
81
+ | `CompilerInterface` | interface | Describes the compilation contract: pure, synchronous, and host-independent. |
82
+ | `CompilerOptions` | interface | Represents the options for the compiler. |
83
+ | `ContentArtifact` | interface | Represents a text file produced by the template or computed compilation path. |
84
+ | `Dependency` | interface | Represents one runtime `@orkestrel/*` dependency of a generated workspace. |
85
+ | `DependencyPinSet` | interface | Describes the runtime and development sections a range-writing operation may change. |
86
+ | `HostArtifact` | interface | Represents a file byte-copied from the vendored data root, planned before its bytes are read. |
87
+ | `HydratedArtifact` | interface | Represents a vendored file whose exact bytes have been read, so its content can be compared. |
88
+ | `ManifestDependencySet` | interface | Describes the runtime, development, and peer sections read from an existing package manifest. |
89
+ | `ManifestRegionSet` | interface | Describes the manifest regions a writing operation may change. |
90
+ | `ManifestScript` | interface | Represents one manifest script a region-writing operation may replace. |
91
+ | `Override` | interface | Represents one artifact override. |
92
+ | `Plan` | interface | Holds the compiled, ordered artifact list and the selection it covers. |
93
+ | `PlanSummary` | interface | Represents the tally of one plan by artifact origin. |
94
+ | `Question` | interface | Represents one validation issue raised against a blueprint or a plan. |
95
+ | `Scaffolding` | interface | Represents the replayable outcome of one compile. |
96
+ | `SrcDefinition` | interface | Describes the build and export settings one published `src` environment contributes. |
97
+ | `ViteMachinery` | interface | Names which host-specific pipelines a generated root Vite configuration carries. |
101
98
 
102
99
  #### Constants
103
100
 
104
- | Name | Kind | Summary |
105
- | --------------------------------- | ----- | ------------------------------------------------------------------------------------------------ |
106
- | `APP_BROWSER_DEV_DEPENDENCIES` | const | The development dependencies a private Vue browser application adds. |
107
- | `APP_DEV_DEPENDENCIES` | const | The development dependency every private `app` environment adds. |
108
- | `APP_MATRIX` | const | The configuration and runtime-entry settings each private `app` environment contributes, frozen. |
109
- | `APP_SERVER_DEV_DEPENDENCIES` | const | The development dependencies a private server application adds. |
110
- | `ARTIFACT_TEMPLATES` | const | Formatter-stable template text for source, test, document, guide, and service artifacts. |
111
- | `BASE_DEV_DEPENDENCIES` | const | The tooling versions scaffold and every generated workspace share. |
112
- | `BIN_CONFIGS` | const | The configuration files a workspace that ships its own executable adds, frozen. |
113
- | `BIN_ENTRY_PATH` | const | The executable entry whose presence makes a workspace `bin`. |
114
- | `CANON_PATHS` | const | The instruction-canon paths staged for reading rather than for a target, frozen. |
115
- | `CATALOG_AGENT_PATH` | const | The agent file whose marker-bounded package table the catalog verb alone owns. |
116
- | `CATALOG_CLOSING_MARKER` | const | The marker closing the package table inside the catalog agent file. |
117
- | `CATALOG_OPENING_MARKER` | const | The marker opening the package table inside the catalog agent file. |
118
- | `CONFIG_TEMPLATES` | const | Formatter-stable template text for every configuration artifact. |
119
- | `CONFORMANCE_TEST_PATH` | const | The official-tooling drift proof whose presence makes a workspace `conformance`. |
120
- | `CONTROL_CHARACTER_PATTERN` | const | Unicode controls, formatting controls, and line and paragraph separators rejected in text. |
121
- | `DECLARATION_DEV_DEPENDENCIES` | const | The development dependencies that emit declarations for published source or an executable. |
122
- | `DEFAULT_ENGINES` | const | The `engines.node` range a workspace starts with. |
123
- | `DEFAULT_VERSION` | const | The version a workspace starts at. |
124
- | `DEPENDENCY_NAME_PATTERN` | const | The runtime dependency name syntax: the `@orkestrel` scope and a bare name. |
125
- | `DISTRIBUTION_TEST_PATH` | const | The generated packed-package proof every publishing workspace is planned at. |
126
- | `ENGINES_PATTERN` | const | The minimum-Node engine syntax a blueprint declares. |
127
- | `ENVIRONMENTS` | const | The `Environment` values, frozen. |
128
- | `EXECUTABLE_PATHS` | const | The vendored paths a target receives with its executable bit set, frozen. |
129
- | `EXTRA_RANGE_PATTERN` | const | The registry-only semver subset accepted for a development extra's range. |
130
- | `FLOOR_RANGE_PATTERN` | const | The exact `major.minor.patch` floor accepted for a foreign peer's range. |
131
- | `FOREIGN_NAME_PATTERN` | const | The package name syntax for a dependency this package does not publish. |
132
- | `GLOBAL_SETUP_PATH` | const | The shared Vitest global-setup module whose presence makes a workspace `global`. |
133
- | `GROUPS` | const | The `Group` values in plan order, frozen. |
134
- | `GUIDES_TEST_PATH` | const | The guide-parity proof whose presence selects the planned `guides` project. |
135
- | `HEX_PATTERN` | const | Exact lowercase hexadecimal bytes: two digits per byte, and empty content is valid. |
136
- | `HOST_PATHS` | const | The paths a target receives from the vendored data root, frozen. |
137
- | `HOST_INVENTORY_PATH` | const | The repository-relative path where the committed vendored-file inventory is served. |
138
- | `INTEGRATION_TEST_PATH` | const | The cross-environment composition proof whose presence makes a workspace `integration`. |
139
- | `INVALID_PATH_CHARACTER_PATTERN` | const | Visible characters a target-relative path and a Markdown path cell both forbid. |
140
- | `MANIFEST_PATH` | const | The manifest path every compiler plan emits with birth ownership. |
141
- | `MAX_ARTIFACT_BYTES` | const | Maximum bytes accepted for one artifact. |
142
- | `MAX_ARTIFACT_HEX_LENGTH` | const | Maximum length of the hexadecimal string carrying one artifact's bytes. |
143
- | `MAX_AUDIT_FINDINGS` | const | Maximum findings one audit can produce from a bounded plan and snapshot. |
144
- | `MAX_COLLECTION_ITEMS` | const | Maximum items accepted in one public collection. |
145
- | `MAX_DEPENDENCY_NAME_LENGTH` | const | Maximum dependency package name length, scope included, as the registry caps it. |
146
- | `MAX_MANIFEST_BYTES` | const | Maximum bytes accepted for one package or vendored-host manifest. |
147
- | `MAX_NAME_LENGTH` | const | Maximum bare workspace name length. |
148
- | `MAX_PATH_LENGTH` | const | Maximum length of one path, matching the longest a supported filesystem accepts. |
149
- | `MAX_RANGE_LENGTH` | const | Maximum length of one declared package range. |
150
- | `MAX_REGISTRY_BYTES` | const | Maximum decoded bytes accepted from one registry response. |
151
- | `MAX_SCRIPT_LENGTH` | const | Maximum length of one manifest script name or command. |
152
- | `MAX_TOTAL_ARTIFACT_BYTES` | const | Maximum bytes retained across one whole plan or audit. |
153
- | `MAX_TOTAL_REGISTRY_BYTES` | const | Maximum decoded bytes accepted across one registry-reading call. |
154
- | `MINIMUM_NODE_VERSION` | const | The oldest Node version the generated toolchain supports. |
155
- | `NAME_PATTERN` | const | The bare workspace name syntax: lowercase alphanumeric with hyphens, letter first. |
156
- | `ORCHESTRATION_PATH_NAMES` | const | The exact root filenames that wire an agent bench rather than the toolchain, frozen. |
157
- | `ORCHESTRATION_PATH_PREFIXES` | const | The path prefixes whose contents instruct or wire an agent, frozen. |
158
- | `ORKESTREL_RANGE_PATTERN` | const | The exact caret-pinned pre-1.0 range accepted for an `@orkestrel/*` runtime dependency. |
159
- | `PRINT_WIDTH` | const | Columns one emitted line may occupy, matching `printWidth` in `.oxfmtrc.json`. |
160
- | `RELEASE_PROOF_COMMAND` | const | The `prepublishOnly` row that runs the packed-package proof against a real registry. |
161
- | `SERVICE_SCRIPT_PATH` | const | The provisioner skeleton a workspace with declared service vendors is given once. |
162
- | `SERVICE_SETUP_PATH` | const | The live-service readiness module whose presence makes a workspace `service`. |
163
- | `SERVICE_TEST_INCLUDE` | const | The include the live-service project covers, which is a directory rather than one proof. |
164
- | `SHOWCASE_CONFIG_PATH` | const | The Vite wrapper whose presence makes a workspace `showcase`. |
165
- | `SHOWCASE_DEV_DEPENDENCIES` | const | The development dependency used only by the optional single-file showcase build. |
166
- | `SOURCE_BROWSER_DEV_DEPENDENCIES` | const | The development dependencies a published browser `src` environment adds. |
167
- | `SRC_MATRIX` | const | The build and export settings each published `src` environment contributes, frozen. |
168
- | `TAB_WIDTH` | const | Columns one tab occupies when the formatter measures a line, matching `tabWidth`. |
169
- | `VERSION_PATTERN` | const | The exact `major.minor.patch` version syntax a blueprint declares. |
170
- | `WORKSPACE_OWNED_PATHS` | const | The vendored paths whose present bytes belong to each workspace, frozen. |
101
+ | Name | Kind | Summary |
102
+ | --------------------------------- | ----- | ------------------------------------------------------------------------------------------------------ |
103
+ | `APP_BROWSER_DEV_DEPENDENCIES` | const | Lists the development dependencies a private Vue browser application adds. |
104
+ | `APP_DEV_DEPENDENCIES` | const | Names the development dependency every private `app` environment adds. |
105
+ | `APP_MATRIX` | const | Holds the configuration and runtime-entry settings each private `app` environment contributes, frozen. |
106
+ | `APP_SERVER_DEV_DEPENDENCIES` | const | Lists the development dependencies a private server application adds. |
107
+ | `ARTIFACT_TEMPLATES` | const | Holds formatter-stable template text for source, test, document, guide, and service artifacts. |
108
+ | `BASE_DEV_DEPENDENCIES` | const | Holds the tooling versions scaffold and every generated workspace share. |
109
+ | `BIN_CONFIGS` | const | Lists the configuration files a workspace that ships its own executable adds, frozen. |
110
+ | `BIN_ENTRY_PATH` | const | Names the executable entry whose presence makes a workspace `bin`. |
111
+ | `CANON_PATHS` | const | Lists the instruction-canon paths staged for reading rather than for a target, frozen. |
112
+ | `CATALOG_AGENT_PATH` | const | Names the agent file whose marker-bounded package table the catalog verb alone owns. |
113
+ | `CATALOG_CLOSING_MARKER` | const | Names the marker closing the package table inside `CATALOG_AGENT_PATH`. |
114
+ | `CATALOG_OPENING_MARKER` | const | Names the marker opening the package table inside `CATALOG_AGENT_PATH`. |
115
+ | `CONFIG_TEMPLATES` | const | Holds formatter-stable template text for every configuration artifact. |
116
+ | `CONFORMANCE_TEST_PATH` | const | Names the official-tooling drift proof whose presence makes a workspace `conformance`. |
117
+ | `CONTROL_CHARACTER_PATTERN` | const | Matches the Unicode controls, formatting controls, and line and paragraph separators rejected in text. |
118
+ | `DECLARATION_DEV_DEPENDENCIES` | const | Lists the development dependencies that roll declarations up for published source. |
119
+ | `DEFAULT_ENGINES` | const | Names the `engines.node` range a workspace starts with. |
120
+ | `DEFAULT_VERSION` | const | Names the version a workspace starts at. |
121
+ | `DEPENDENCY_NAME_PATTERN` | const | Matches the runtime dependency name syntax: the `@orkestrel` scope and a bare name. |
122
+ | `DISTRIBUTION_TEST_PATH` | const | Names the generated packed-package proof every publishing workspace is planned at. |
123
+ | `ENGINES_PATTERN` | const | Matches the minimum-Node engine syntax a blueprint declares. |
124
+ | `ENVIRONMENTS` | const | Lists the `Environment` values, frozen. |
125
+ | `EXECUTABLE_PATHS` | const | Lists the vendored paths a target receives with its executable bit set, frozen. |
126
+ | `EXTRA_RANGE_PATTERN` | const | Matches the registry-only semver subset accepted for a development extra's range. |
127
+ | `FLOOR_RANGE_PATTERN` | const | Matches the exact `major.minor.patch` floor accepted for a foreign peer's range. |
128
+ | `FOREIGN_NAME_PATTERN` | const | Matches the package name syntax for a dependency this package does not publish. |
129
+ | `GLOBAL_SETUP_PATH` | const | Names the shared Vitest global-setup module whose presence makes a workspace `global`. |
130
+ | `GROUPS` | const | Lists the `Group` values in plan order, frozen. |
131
+ | `GUIDES_TEST_PATH` | const | Names the package-owned guide-parity entry used by `test:guides` and to select the `guides` project. |
132
+ | `HEX_PATTERN` | const | Matches exact lowercase hexadecimal bytes: two digits per byte, and empty content is valid. |
133
+ | `HOST_PATHS` | const | Lists the paths a target receives from the vendored data root, frozen. |
134
+ | `HOST_INVENTORY_PATH` | const | Names the repository-relative path where the committed vendored-file inventory is served. |
135
+ | `INTEGRATION_TEST_PATH` | const | Names the cross-environment composition proof whose presence makes a workspace `integration`. |
136
+ | `INVALID_PATH_CHARACTER_PATTERN` | const | Matches the visible characters a target-relative path and a Markdown path cell both forbid. |
137
+ | `MANIFEST_PATH` | const | Names the manifest path every compiler plan emits with birth ownership. |
138
+ | `MAX_ARTIFACT_BYTES` | const | Caps the bytes accepted for one artifact. |
139
+ | `MAX_ARTIFACT_HEX_LENGTH` | const | Caps the length of the hexadecimal string carrying one artifact's bytes. |
140
+ | `MAX_AUDIT_FINDINGS` | const | Caps the findings one audit can produce from a bounded plan and snapshot. |
141
+ | `MAX_COLLECTION_ITEMS` | const | Caps the items accepted in one public collection. |
142
+ | `MAX_DEPENDENCY_NAME_LENGTH` | const | Sets the maximum dependency package name length, scope included, as the registry caps it. |
143
+ | `MAX_MANIFEST_BYTES` | const | Caps the bytes accepted for one package or vendored-host manifest. |
144
+ | `MAX_NAME_LENGTH` | const | Caps the bare workspace name length. |
145
+ | `MAX_PATH_LENGTH` | const | Caps the length of one path, matching the longest a supported filesystem accepts. |
146
+ | `MAX_RANGE_LENGTH` | const | Caps the length of one declared package range. |
147
+ | `MAX_REGISTRY_BYTES` | const | Caps the decoded bytes accepted from one registry response. |
148
+ | `MAX_SCRIPT_LENGTH` | const | Caps the length of one manifest script name or command. |
149
+ | `MAX_TOTAL_ARTIFACT_BYTES` | const | Caps the bytes retained across one whole plan or audit. |
150
+ | `MAX_TOTAL_REGISTRY_BYTES` | const | Caps the decoded bytes accepted across one registry-reading call. |
151
+ | `MINIMUM_NODE_VERSION` | const | Names the oldest Node version the generated toolchain supports. |
152
+ | `MINIMUM_NPM_VERSION` | const | Names the oldest npm version the generated toolchain supports. |
153
+ | `NAME_PATTERN` | const | Matches the bare workspace name syntax: lowercase alphanumeric with hyphens, letter first. |
154
+ | `ORCHESTRATION_PATH_NAMES` | const | Lists the exact root paths that wire an agent bench or own an orchestration directory, frozen. |
155
+ | `ORCHESTRATION_PATH_PREFIXES` | const | Lists the path prefixes whose contents instruct or wire an agent, frozen. |
156
+ | `ORKESTREL_RANGE_PATTERN` | const | Matches the exact caret-pinned pre-1.0 range accepted for an `@orkestrel/*` runtime dependency. |
157
+ | `PRINT_WIDTH` | const | Caps the columns one emitted line may occupy, matching `printWidth` in `.oxfmtrc.json`. |
158
+ | `RELEASE_PROOF_COMMAND` | const | Names the `prepublishOnly` row that runs the packed-package proof against a real registry. |
159
+ | `SERVICE_SCRIPT_PATH` | const | Names the inventory skeleton a workspace with declared service vendors is given once. |
160
+ | `SERVICE_SETUP_PATH` | const | Names the live-service readiness module whose presence makes a workspace `service`. |
161
+ | `SERVICE_TEST_INCLUDE` | const | Names the include the live-service project covers, which is a directory rather than one proof. |
162
+ | `SHOWCASE_CONFIG_PATH` | const | Names the Vite wrapper whose presence makes a workspace `showcase`. |
163
+ | `SHOWCASE_DEV_DEPENDENCIES` | const | Names the development dependency used only by the optional single-file showcase build. |
164
+ | `SOURCE_BROWSER_DEV_DEPENDENCIES` | const | Lists the development dependencies a published browser `src` environment adds. |
165
+ | `SRC_MATRIX` | const | Holds the build and export settings each published `src` environment contributes, frozen. |
166
+ | `TAB_WIDTH` | const | Sets the columns one tab occupies when the formatter measures a line, matching `tabWidth`. |
167
+ | `VERSION_PATTERN` | const | Matches the exact `major.minor.patch` version syntax a blueprint declares. |
168
+ | `WORKSPACE_DEV_ENGINES` | const | Holds the `devEngines` record every generated manifest carries. |
169
+ | `WORKSPACE_OWNED_PATHS` | const | Lists the vendored paths whose present bytes belong to each workspace, frozen. |
171
170
 
172
171
  #### Guards
173
172
 
174
- | Name | Kind | Summary |
175
- | ------------------- | -------- | -------------------------------------------------------------------------------- |
176
- | `isArtifact` | const | Narrow a value to an `Artifact`. |
177
- | `isAudit` | const | Narrow a value to an `Audit`. |
178
- | `isBlueprint` | const | Narrow a value to a `Blueprint`. |
179
- | `isCatalogEntry` | const | Narrow a value to a `CatalogEntry`. |
180
- | `isCollection` | function | Narrow a value to an array within the limit one public collection accepts. |
181
- | `isCompilerHooks` | const | Narrow a value to the compiler's initial listener record. |
182
- | `isCompilerOptions` | const | Narrow a value to `CompilerOptions`. |
183
- | `isContent` | const | Narrow a value to text this package will accept as one artifact's content. |
184
- | `isDependency` | const | Narrow a value to a `Dependency`. |
185
- | `isDependencyName` | const | Narrow a value to the scoped package name a runtime dependency carries. |
186
- | `isEnvironment` | const | Narrow a value to one `Environment` a workspace may select. |
187
- | `isFinding` | const | Narrow a value to a `Finding`. |
188
- | `isGroup` | const | Narrow a value to one `Group` a plan selects over. |
189
- | `isGroups` | const | Narrow a value to a bounded group selection. |
190
- | `isHex` | const | Narrow a value to exact lowercase hexadecimal bytes within one artifact's limit. |
191
- | `isManifestScript` | const | Narrow a value to a `ManifestScript`. |
192
- | `isMirror` | const | Narrow a value to a `Mirror`. |
193
- | `isOverride` | const | Narrow a value to an `Override`. |
194
- | `isPath` | function | Narrow a value to a logical target-relative path. |
195
- | `isPlan` | const | Narrow a value to a `Plan`. |
196
- | `isQuestion` | const | Narrow a value to a `Question`. |
197
- | `isScaffoldError` | function | Narrow a caught value to a `ScaffoldError`. |
198
- | `isSnapshot` | function | Narrow a value to a `Snapshot`. |
173
+ | Name | Kind | Summary |
174
+ | ------------------- | -------- | --------------------------------------------------------------------------------- |
175
+ | `isArtifact` | const | Narrows a value to an `Artifact`. |
176
+ | `isAudit` | const | Narrows a value to an `Audit`. |
177
+ | `isBlueprint` | const | Narrows a value to a `Blueprint`. |
178
+ | `isCatalogEntry` | const | Narrows a value to a `CatalogEntry`. |
179
+ | `isCollection` | function | Narrows a value to an array within the limit one public collection accepts. |
180
+ | `isCompilerHooks` | const | Narrows a value to the compiler's initial listener record. |
181
+ | `isCompilerOptions` | const | Narrows a value to `CompilerOptions`. |
182
+ | `isContent` | const | Narrows a value to text this package will accept as one artifact's content. |
183
+ | `isDependency` | const | Narrows a value to a `Dependency`. |
184
+ | `isDependencyName` | const | Narrows a value to the scoped package name a runtime dependency carries. |
185
+ | `isEnvironment` | const | Narrows a value to one `Environment` a workspace may select. |
186
+ | `isFinding` | const | Narrows a value to a `Finding`. |
187
+ | `isGroup` | const | Narrows a value to one `Group` a plan selects over. |
188
+ | `isGroups` | const | Narrows a value to a bounded group selection. |
189
+ | `isHex` | const | Narrows a value to exact lowercase hexadecimal bytes within one artifact's limit. |
190
+ | `isManifestScript` | const | Narrows a value to a `ManifestScript`. |
191
+ | `isMirror` | const | Narrows a value to a `Mirror`. |
192
+ | `isOverride` | const | Narrows a value to an `Override`. |
193
+ | `isPath` | function | Narrows a value to a logical target-relative path. |
194
+ | `isPlan` | const | Narrows a value to a `Plan`. |
195
+ | `isQuestion` | const | Narrows a value to a `Question`. |
196
+ | `isScaffoldError` | function | Narrows a caught value to a `ScaffoldError`. |
197
+ | `isSnapshot` | function | Narrows a value to a `Snapshot`. |
199
198
 
200
199
  #### Parsers
201
200
 
202
- | Name | Kind | Summary |
203
- | ---------------------- | -------- | ----------------------------------------------- |
204
- | `parseBlueprint` | function | Coerce an untrusted value to a `Blueprint`. |
205
- | `parseCompilerOptions` | function | Coerce an untrusted value to `CompilerOptions`. |
206
- | `parseGroups` | function | Coerce an untrusted value to a group selection. |
207
- | `parseSnapshot` | function | Coerce an untrusted value to a `Snapshot`. |
201
+ | Name | Kind | Summary |
202
+ | ---------------------- | -------- | ------------------------------------------------ |
203
+ | `parseBlueprint` | function | Coerces an untrusted value to a `Blueprint`. |
204
+ | `parseCompilerOptions` | function | Coerces an untrusted value to `CompilerOptions`. |
205
+ | `parseGroups` | function | Coerces an untrusted value to a group selection. |
206
+ | `parseSnapshot` | function | Coerces an untrusted value to a `Snapshot`. |
208
207
 
209
208
  #### Helpers
210
209
 
211
- | Name | Kind | Summary |
212
- | --------------------------- | -------- | ----------------------------------------------------------------------------- |
213
- | `artifactToFinding` | function | Project one planned artifact and the bytes found at its path into a verdict. |
214
- | `artifactToHex` | function | Project an artifact to the exact bytes it claims, as hexadecimal. |
215
- | `bytesToHex` | function | Encode bytes as exact lowercase hexadecimal text. |
216
- | `catalogToLayers` | function | Project a catalog into the layers it publishes in. |
217
- | `cloneValue` | function | Snapshot an untrusted value into exact JSON data the caller owns. |
218
- | `compareVersions` | function | Compare two versions by their numeric components. |
219
- | `computeBytes` | function | Count the UTF-8 bytes text encodes to. |
220
- | `computeHash` | function | Compute the deterministic content identity of text. |
221
- | `contentToHex` | function | Encode text as the exact lowercase hexadecimal form of its UTF-8 bytes. |
222
- | `extractRangeMajor` | function | Extract the major component of an admitted dependency range. |
223
- | `extractVersion` | function | Extract the major, minor, and patch components of an exact version. |
224
- | `inferDrift` | function | Infer how one target path compares to the artifact planned for it. |
225
- | `inferGroup` | function | Infer the `Group` a path belongs to. |
226
- | `isCanonPath` | function | Test whether a path belongs to the instruction canon a target reads. |
227
- | `isDeferredPath` | function | Test whether another surface owns the vendored bytes at a path. |
228
- | `isFloorPath` | function | Test whether a destination's floor bytes survive a live overlay. |
229
- | `isRetainedPath` | function | Test whether another surface owns a target's present bytes at a path. |
230
- | `manifestToDependencies` | function | Project a manifest's `@orkestrel/*` declarations into separate section lists. |
231
- | `manifestToName` | function | Project a package manifest's text to its own name. |
232
- | `matchesDriftReachability` | function | Test whether `inferDrift` could have produced a finding for an ownership. |
233
- | `matchesEngines` | function | Test whether a declared engines floor is at or above the supported minimum. |
234
- | `matchesOrchestrationPath` | function | Test whether a path instructs or wires an agent rather than the toolchain. |
235
- | `matchesPrintWidth` | function | Test whether one emitted line fits the vendored formatter width. |
236
- | `matchesRange` | function | Test whether a declared range already admits a published version. |
237
- | `nameToGuide` | function | Derive the guide mirror path a package name answers for. |
238
- | `nameToRewrite` | function | Derive the declaration rewrite a published face's `beforeWriteFile` applies. |
239
- | `planToSummary` | function | Project a plan into its tally by artifact origin. |
240
- | `selectGroups` | function | Select the groups a compile covers, in plan order. |
241
- | `selectHostPaths` | function | Select the host paths a named workspace vendors. |
242
- | `serializeTypeScriptString` | function | Serialize one string as a single-quoted TypeScript literal. |
243
- | `srcToRoot` | function | Select the single published environment a package root points at. |
210
+ | Name | Kind | Summary |
211
+ | --------------------------- | -------- | --------------------------------------------------------------------------------------------------- |
212
+ | `artifactToFinding` | function | Projects one planned artifact and the bytes found at its path into a verdict. |
213
+ | `artifactToHex` | function | Projects an artifact to the exact bytes it claims, as hexadecimal. |
214
+ | `bytesToHex` | function | Encodes bytes as exact lowercase hexadecimal text. |
215
+ | `catalogToLayers` | function | Projects a catalog into the layers it publishes in. |
216
+ | `cloneValue` | function | Snapshots an untrusted value into exact JSON data the caller owns. |
217
+ | `compareVersions` | function | Compares two versions by their numeric components. |
218
+ | `computeBytes` | function | Counts the UTF-8 bytes text encodes to. |
219
+ | `computeHash` | function | Computes the deterministic content identity of text. |
220
+ | `contentToHex` | function | Encodes text as the exact lowercase hexadecimal form of its UTF-8 bytes. |
221
+ | `extractRangeMajor` | function | Extracts the major component of an admitted dependency range. |
222
+ | `extractVersion` | function | Extracts the major, minor, and patch components of an exact version. |
223
+ | `inferDrift` | function | Infers how one target path compares to the artifact planned for it. |
224
+ | `inferGroup` | function | Infers the `Group` a path belongs to. |
225
+ | `isCanonPath` | function | Checks whether a path belongs to the instruction canon a target reads rather than holds. |
226
+ | `isDeferredPath` | function | Checks whether another surface owns the vendored bytes at a path. |
227
+ | `isFloorPath` | function | Checks whether a destination's floor bytes survive a live overlay. |
228
+ | `isRetainedPath` | function | Checks whether another surface owns a target's present bytes at a path. |
229
+ | `manifestToDependencies` | function | Projects a package manifest's text to the `@orkestrel/*` packages each dependency section declares. |
230
+ | `manifestToName` | function | Projects a package manifest's text to its own name. |
231
+ | `matchesDriftReachability` | function | Tests whether `inferDrift` could have produced a finding for an ownership. |
232
+ | `matchesEngines` | function | Tests whether a declared engines floor is at or above the supported minimum. |
233
+ | `matchesOrchestrationPath` | function | Tests whether a path instructs or wires an agent rather than the toolchain. |
234
+ | `matchesPrintWidth` | function | Tests whether one emitted line fits the vendored formatter width. |
235
+ | `matchesRange` | function | Tests whether a declared range already admits a published version. |
236
+ | `nameToGuide` | function | Derives the guide mirror path a package name answers for. |
237
+ | `planToSummary` | function | Projects a plan into its tally by artifact origin. |
238
+ | `selectGroups` | function | Selects the groups a compile covers, in plan order. |
239
+ | `selectHostPaths` | function | Selects the host paths a named workspace vendors. |
240
+ | `serializeTypeScriptString` | function | Serializes one string as a single-quoted TypeScript literal. |
241
+ | `srcToRoot` | function | Selects the single published environment a package root points at. |
244
242
 
245
243
  #### Compilers
246
244
 
247
- | Name | Kind | Summary |
248
- | ----------------------------------- | -------- | ------------------------------------------------------------------------------- |
249
- | `applyOverrides` | function | Replace the content of every drafted artifact an override names. |
250
- | `artifactsToQuestions` | function | Measure a drafted artifact list against the laws a whole plan decides. |
251
- | `blueprintToConfigArtifacts` | function | Compile every artifact in the `configs` group. |
252
- | `blueprintToDevDependencies` | function | Project a blueprint into the development dependencies its manifest declares. |
253
- | `blueprintToDocumentArtifacts` | function | Compile the generated workspace's root documentation. |
254
- | `blueprintToGuideArtifacts` | function | Compile the generated workspace's guide index. |
255
- | `blueprintToMachinery` | function | Derive the host-specific machinery a generated root Vite configuration carries. |
256
- | `blueprintToManifest` | function | Compile a blueprint into its `package.json` content. |
257
- | `blueprintToOrchestrationArtifacts` | function | Compile the blueprint-dependent orchestration artifacts. |
258
- | `blueprintToQuestions` | function | Measure a blueprint against every law its own fields decide. |
259
- | `blueprintToRootTsconfig` | function | Compile the root TypeScript configuration for a blueprint. |
260
- | `blueprintToRootVite` | function | Compile the root Vite and Vitest configuration for a blueprint. |
261
- | `blueprintToScripts` | function | Project a blueprint into the scripts its manifest declares. |
262
- | `blueprintToSourceArtifacts` | function | Compile every artifact in the `source` group. |
263
- | `blueprintToTestArtifacts` | function | Compile every artifact in the `tests` group that is not vendored from the host. |
264
- | `blueprintToWritableScripts` | function | Project a blueprint into the manifest scripts a region write may replace. |
265
- | `dependenciesToQuestions` | function | Measure one declared package list against the name and range syntax it accepts. |
266
- | `nameToHostArtifacts` | function | Compile the vendored host artifacts a named workspace plans. |
267
- | `overridesToQuestions` | function | Measure a blueprint's overrides against the artifacts drafted for it. |
268
- | `pathToCondition` | function | Build one `exports` condition block for a built environment. |
269
- | `planToFindings` | function | Compare a plan against a target's current content. |
270
- | `planToHash` | function | Compute a plan's content identity. |
271
- | `replaceManifestRanges` | function | Replace runtime and development ranges without reading or writing peer fields. |
272
- | `replaceManifestScripts` | function | Replace named script values, refusing a value the region does not accept. |
273
- | `replacePlanRanges` | function | Replace writable ranges in a plan's manifest and recompute its identity. |
274
- | `srcToEntry` | function | Project a published selection into the manifest's entry fields. |
275
- | `srcToExports` | function | Project a published selection into the manifest's `exports` map. |
245
+ | Name | Kind | Summary |
246
+ | ----------------------------------- | -------- | -------------------------------------------------------------------------------------------------------- |
247
+ | `applyOverrides` | function | Replaces the content of every drafted artifact an override names. |
248
+ | `artifactsToQuestions` | function | Measures a drafted artifact list against the laws a whole plan decides. |
249
+ | `blueprintToConfigArtifacts` | function | Compiles every artifact in the `configs` group. |
250
+ | `blueprintToDevDependencies` | function | Projects a blueprint into the development dependencies its manifest declares. |
251
+ | `blueprintToDocumentArtifacts` | function | Compiles the generated workspace's root documentation. |
252
+ | `blueprintToGuideArtifacts` | function | Compiles the generated workspace's guide index. |
253
+ | `blueprintToHostArtifacts` | function | Compiles the vendored host artifacts a workspace plans. |
254
+ | `blueprintToMachinery` | function | Derives the host-specific machinery a generated root Vite configuration carries. |
255
+ | `blueprintToManifest` | function | Compiles a blueprint into its `package.json` content. |
256
+ | `blueprintToOrchestrationArtifacts` | function | Compiles the blueprint-dependent orchestration artifacts. |
257
+ | `blueprintToQuestions` | function | Measures a blueprint against every law its own fields decide. |
258
+ | `blueprintToRootTsconfig` | function | Compiles the root TypeScript configuration for a blueprint. |
259
+ | `blueprintToRootVite` | function | Compiles the root Vite and Vitest configuration for a blueprint. |
260
+ | `blueprintToScripts` | function | Projects a blueprint into the scripts its manifest declares. |
261
+ | `blueprintToSourceArtifacts` | function | Compiles every artifact in the `source` group. |
262
+ | `blueprintToTestArtifacts` | function | Compiles every artifact in the `tests` group that is not vendored from the host. |
263
+ | `blueprintToWritableScripts` | function | Projects a blueprint into the manifest scripts a region write may replace. |
264
+ | `dependenciesToQuestions` | function | Measures one declared package list against the name and range syntax it accepts. |
265
+ | `overridesToQuestions` | function | Measures a blueprint's overrides against the artifacts drafted for it. |
266
+ | `pathToCondition` | function | Builds one `exports` condition block for a built environment. |
267
+ | `planToFindings` | function | Compares a plan against a target's current content. |
268
+ | `planToHash` | function | Computes a plan's content identity. |
269
+ | `replaceManifestRanges` | function | Replaces the runtime and development dependency ranges in package manifest text, and never a peer range. |
270
+ | `replaceManifestScripts` | function | Replaces named script values in package manifest text. |
271
+ | `replacePlanRanges` | function | Replaces dependency ranges in a plan's manifest and recomputes its identity. |
272
+ | `srcToEntry` | function | Projects a published selection into the manifest's entry fields. |
273
+ | `srcToExports` | function | Projects a published selection into the manifest's `exports` map. |
276
274
 
277
275
  #### Factories
278
276
 
279
- | Name | Kind | Summary |
280
- | ----------------- | -------- | --------------------------------------------------------------------------------- |
281
- | `createBlueprint` | function | Construct a `Blueprint` from a name and the fields that differ from the defaults. |
277
+ | Name | Kind | Summary |
278
+ | ----------------- | -------- | ---------------------------------------------------------------------------------- |
279
+ | `createBlueprint` | function | Constructs a `Blueprint` from a name and the fields that differ from the defaults. |
282
280
 
283
281
  #### Classes
284
282
 
285
- | Name | Kind | Summary |
286
- | --------------- | ----- | --------------------------------------------------------------------------- |
287
- | `Compiler` | class | The compile spine: draft, gate, pin, run in that order over a blueprint. |
288
- | `ScaffoldError` | class | The one error this package throws, carrying the coded reason it was raised. |
283
+ | Name | Kind | Summary |
284
+ | --------------- | ----- | -------------------------------------------------------------------------------------- |
285
+ | `Compiler` | class | Represents the compile spine: draft, gate, pin, run in that order over a blueprint. |
286
+ | `ScaffoldError` | class | Represents the one error this package throws, carrying the coded reason it was raised. |
289
287
 
290
288
  ### Server
291
289
 
@@ -294,134 +292,134 @@ Exported from `@orkestrel/scaffold/server`, and reachable from
294
292
 
295
293
  #### Types
296
294
 
297
- | Name | Kind | Summary |
298
- | ---------------------- | ---- | ------------------------------------------ |
299
- | `MaterializerEventMap` | type | The materializer's observation channel. |
300
- | `UpstreamEventMap` | type | The upstream reader's observation channel. |
295
+ | Name | Kind | Summary |
296
+ | ---------------------- | ---- | ----------------------------------------------------- |
297
+ | `MaterializerEventMap` | type | Represents the materializer's observation channel. |
298
+ | `UpstreamEventMap` | type | Represents the upstream reader's observation channel. |
301
299
 
302
300
  #### Interfaces
303
301
 
304
- | Name | Kind | Summary |
305
- | ----------------------- | --------- | ------------------------------------------------------------------------------------ |
306
- | `BytesReadResult` | interface | The outcome of one bounded read whose body is taken as exact bytes. |
307
- | `Host` | interface | A whole vendored host supplied as a value rather than read from a directory. |
308
- | `HostInventory` | interface | The committed vendored-file inventory as one call's reads are decided against. |
309
- | `HostManifest` | interface | The complete vendored-host inventory. |
310
- | `ManifestEntry` | interface | One file record of the vendored host's manifest, including its exact-byte digest. |
311
- | `MaterializeResult` | interface | The outcome of one mutation of a target. |
312
- | `MaterializerInterface` | interface | The mutation contract: the package's only filesystem writer. |
313
- | `MaterializerOptions` | interface | Options for the materializer. |
314
- | `ReadAllowance` | interface | The byte allowance one whole upstream call spends across every read it makes. |
315
- | `TextReadResult` | interface | The outcome of one bounded read whose body is taken as text. |
316
- | `Worktree` | interface | What git reports about a target's working tree. |
317
- | `UpstreamInterface` | interface | The upstream contract: the package's only network reader, and it never writes. |
318
- | `UpstreamOptions` | interface | Options for the upstream reader. |
319
- | `WriteAnchor` | interface | One physical directory identity captured across a write transaction. |
320
- | `WriteDirectoryResult` | interface | The final directory anchor of a write transaction and the subset one call created. |
321
- | `WriteExpectation` | interface | One destination snapshot captured before a write and required to survive it. |
322
- | `WritePrecondition` | interface | The narrower caller-observed destination state a write transaction must still match. |
302
+ | Name | Kind | Summary |
303
+ | ----------------------- | --------- | ------------------------------------------------------------------------------------------------- |
304
+ | `BytesReadResult` | interface | Reports the outcome of one bounded read whose body is taken as exact bytes. |
305
+ | `Host` | interface | Represents a whole vendored host supplied as a value: the membership beside the bytes filling it. |
306
+ | `HostInventory` | interface | Represents the committed vendored-file inventory as one call's reads are decided against. |
307
+ | `HostManifest` | interface | Represents the complete vendored-host inventory. |
308
+ | `ManifestEntry` | interface | Represents one file record of the vendored host's manifest. |
309
+ | `MaterializeResult` | interface | Reports the outcome of one mutation of a target. |
310
+ | `MaterializerInterface` | interface | Describes the mutation contract: the package's only filesystem writer. |
311
+ | `MaterializerOptions` | interface | Represents the options for the materializer. |
312
+ | `ReadAllowance` | interface | Represents the byte allowance one whole upstream call spends across every read it makes. |
313
+ | `TextReadResult` | interface | Reports the outcome of one bounded read whose body is taken as text. |
314
+ | `Worktree` | interface | Describes what git reports about a target's working tree. |
315
+ | `UpstreamInterface` | interface | Describes the upstream contract: the package's only network reader, and it never writes. |
316
+ | `UpstreamOptions` | interface | Represents the options for the upstream reader. |
317
+ | `WriteAnchor` | interface | Represents one physical directory identity captured across a write transaction. |
318
+ | `WriteDirectoryResult` | interface | Reports the final directory anchor of a write transaction and the subset one call created. |
319
+ | `WriteExpectation` | interface | Represents one destination snapshot captured before a write and required to survive it. |
320
+ | `WritePrecondition` | interface | Describes the narrower caller-observed destination state a write transaction must still match. |
323
321
 
324
322
  #### Constants
325
323
 
326
- | Name | Kind | Summary |
327
- | ----------------------------------- | ----- | ---------------------------------------------------------------------------------------- |
328
- | `BRANCH_PATTERN` | const | The Git branch syntax the repository endpoint accepts. |
329
- | `DEFAULT_BRANCH` | const | The repository branch a raw content read addresses when a caller names none. |
330
- | `DEFAULT_REGISTRY_BASE` | const | The registry a version read addresses when a caller names none. |
331
- | `DEFAULT_REPOSITORY_BASE` | const | The raw content host a repository read addresses when a caller names none. |
332
- | `DEFAULT_UPSTREAM_CONCURRENCY` | const | The simultaneous upstream requests a reader opens with. |
333
- | `DEFAULT_UPSTREAM_RETRIES` | const | The retries one upstream request is given when a caller names none. |
334
- | `DEFAULT_UPSTREAM_TIMEOUT` | const | The timeout one upstream request is given when a caller names none, in milliseconds. |
335
- | `DIGEST_PATTERN` | const | The exact SHA-256 syntax a digest is stated in: sixty-four lowercase hexadecimal digits. |
336
- | `DRIVE_PATTERN` | const | The drive prefix a Windows host path may open with. |
337
- | `INVALID_SEGMENT_CHARACTER_PATTERN` | const | Visible characters no host path segment may carry. |
338
- | `MANIFEST_NAME` | const | The reserved metadata name a staged vendored host writes at its own root. |
339
- | `MAX_BRANCH_LENGTH` | const | Maximum characters one repository branch may carry. |
340
- | `MAX_ENDPOINT_LENGTH` | const | Maximum characters one caller-supplied upstream endpoint may carry. |
341
- | `MAX_INVENTORY_PATHS` | const | Maximum paths one target's working-tree inventory may report. |
342
- | `MAX_PATH_DEPTH` | const | Maximum segments one host path may carry. |
343
- | `MAX_PATH_SEGMENT_BYTES` | const | Maximum UTF-8 bytes one host path segment may encode to. |
344
- | `MAX_UPSTREAM_CONCURRENCY` | const | Maximum simultaneous upstream requests. |
345
- | `MAX_UPSTREAM_RETRIES` | const | Maximum retries one upstream request may be given after a transport fault. |
346
- | `MAX_UPSTREAM_TIMEOUT` | const | Maximum timeout one upstream request may be given, in milliseconds. |
347
- | `ORKESTREL_SCOPE` | const | The npm scope and repository owner the fleet's packages and sources are published under. |
348
- | `PACKUMENT_MEDIA_TYPE` | const | The media type that selects the registry's abbreviated packument. |
349
- | `RESERVED_SEGMENT_PATTERN` | const | The Windows device names that stay reserved even when an extension follows. |
350
- | `SCAFFOLD_REPOSITORY` | const | The repository this package's own vendored files are served from. |
351
- | `UNREADABLE_VERSION_NOTE` | const | The note a release carries when its packument names no readable latest version. |
324
+ | Name | Kind | Summary |
325
+ | ----------------------------------- | ----- | ------------------------------------------------------------------------------------------------ |
326
+ | `BRANCH_PATTERN` | const | Matches the Git branch syntax the repository endpoint accepts. |
327
+ | `DEFAULT_BRANCH` | const | Holds the repository branch a raw content read addresses when a caller names none. |
328
+ | `DEFAULT_REGISTRY_BASE` | const | Holds the registry a version read addresses when a caller names none. |
329
+ | `DEFAULT_REPOSITORY_BASE` | const | Holds the raw content host a repository read addresses when a caller names none. |
330
+ | `DEFAULT_UPSTREAM_CONCURRENCY` | const | Sets the simultaneous upstream requests a reader opens with, under `MAX_UPSTREAM_CONCURRENCY`. |
331
+ | `DEFAULT_UPSTREAM_RETRIES` | const | Sets the retries one upstream request is given when a caller names none. |
332
+ | `DEFAULT_UPSTREAM_TIMEOUT` | const | Sets the timeout one upstream request is given when a caller names none, in milliseconds. |
333
+ | `DIGEST_PATTERN` | const | Matches the exact SHA-256 syntax a digest is stated in: sixty-four lowercase hexadecimal digits. |
334
+ | `DRIVE_PATTERN` | const | Matches the drive prefix a Windows host path may open with. |
335
+ | `INVALID_SEGMENT_CHARACTER_PATTERN` | const | Matches the visible characters no host path segment may carry. |
336
+ | `MANIFEST_NAME` | const | Reserves the metadata name a staged vendored host writes at its own root. |
337
+ | `MAX_BRANCH_LENGTH` | const | Caps the characters one repository branch may carry. |
338
+ | `MAX_ENDPOINT_LENGTH` | const | Caps the characters one caller-supplied upstream endpoint may carry. |
339
+ | `MAX_INVENTORY_PATHS` | const | Caps the paths one target's working-tree inventory may report. |
340
+ | `MAX_PATH_DEPTH` | const | Caps the segments one host path may carry. |
341
+ | `MAX_PATH_SEGMENT_BYTES` | const | Caps the UTF-8 bytes one host path segment may encode to. |
342
+ | `MAX_UPSTREAM_CONCURRENCY` | const | Caps the simultaneous upstream requests. |
343
+ | `MAX_UPSTREAM_RETRIES` | const | Caps the retries one upstream request may be given after a transport fault. |
344
+ | `MAX_UPSTREAM_TIMEOUT` | const | Caps the timeout one upstream request may be given, in milliseconds. |
345
+ | `ORKESTREL_SCOPE` | const | Names the npm scope and repository owner the fleet's packages and sources are published under. |
346
+ | `PACKUMENT_MEDIA_TYPE` | const | Names the media type that selects the registry's abbreviated packument. |
347
+ | `RESERVED_SEGMENT_PATTERN` | const | Matches the Windows device names that stay reserved even when an extension follows. |
348
+ | `SCAFFOLD_REPOSITORY` | const | Names the repository this package's own vendored files are served from. |
349
+ | `UNREADABLE_VERSION_NOTE` | const | Holds the note a release carries when its packument names no readable latest version. |
352
350
 
353
351
  #### Guards
354
352
 
355
- | Name | Kind | Summary |
356
- | ----------------------- | -------- | ---------------------------------------------------------------------------------- |
357
- | `isBranch` | const | Narrow a value to a Git branch the repository endpoint accepts. |
358
- | `isCatalogEntries` | const | Narrow a value to a bounded list of fleet catalog rows. |
359
- | `isDependencies` | const | Narrow a value to a bounded list of declared runtime dependencies. |
360
- | `isDependencyNames` | const | Narrow a value to a bounded list of `@orkestrel` package names. |
361
- | `isDigest` | const | Narrow a value to one exact SHA-256 digest. |
362
- | `isEndpoint` | const | Narrow a value to a bounded upstream endpoint. |
363
- | `isFilesystemPath` | function | Narrow a value to a path naming a location on this host. |
364
- | `isHost` | const | Narrow a value to one whole vendored host supplied as a value. |
365
- | `isHostManifest` | const | Narrow a value to one `HostManifest`. |
366
- | `isInventory` | function | Narrow a value to a working-tree inventory within the limit one target may report. |
367
- | `isManifestEntry` | const | Narrow a value to one `ManifestEntry`. |
368
- | `isManifestRegionSet` | const | Narrow a value to one `ManifestRegionSet`. |
369
- | `isMaterializerHooks` | const | Narrow a value to the materializer's initial listener record. |
370
- | `isMaterializerOptions` | const | Narrow a value to `MaterializerOptions`. |
371
- | `isMirrors` | const | Narrow a value to a bounded list of fetched guide mirrors. |
372
- | `isPaths` | const | Narrow a value to a bounded list of target-relative paths. |
373
- | `isWorktree` | const | Narrow a value to a `Worktree`. |
374
- | `isTimeout` | const | Narrow a value to a per-request timeout in milliseconds. |
375
- | `isUpstreamHooks` | const | Narrow a value to the upstream reader's initial listener record. |
376
- | `isUpstreamOptions` | const | Narrow a value to `UpstreamOptions`. |
353
+ | Name | Kind | Summary |
354
+ | ----------------------- | -------- | ----------------------------------------------------------------------------------- |
355
+ | `isBranch` | const | Narrows a value to a Git branch the repository endpoint accepts. |
356
+ | `isCatalogEntries` | const | Narrows a value to a bounded list of fleet catalog rows. |
357
+ | `isDependencies` | const | Narrows a value to a bounded list of declared runtime dependencies. |
358
+ | `isDependencyNames` | const | Narrows a value to a bounded list of `@orkestrel` package names. |
359
+ | `isDigest` | const | Narrows a value to one exact SHA-256 digest. |
360
+ | `isEndpoint` | const | Narrows a value to a bounded upstream endpoint. |
361
+ | `isFilesystemPath` | function | Narrows a value to a path naming a location on this host. |
362
+ | `isHost` | const | Narrows a value to one `Host`. |
363
+ | `isHostManifest` | const | Narrows a value to one `HostManifest`. |
364
+ | `isInventory` | function | Narrows a value to a working-tree inventory within the limit one target may report. |
365
+ | `isManifestEntry` | const | Narrows a value to one `ManifestEntry`. |
366
+ | `isManifestRegionSet` | const | Narrows a value to one `ManifestRegionSet`. |
367
+ | `isMaterializerHooks` | const | Narrows a value to the materializer's initial listener record. |
368
+ | `isMaterializerOptions` | const | Narrows a value to `MaterializerOptions`. |
369
+ | `isMirrors` | const | Narrows a value to a bounded list of fetched guide mirrors. |
370
+ | `isPaths` | const | Narrows a value to a bounded list of target-relative paths. |
371
+ | `isWorktree` | const | Narrows a value to a `Worktree`. |
372
+ | `isTimeout` | const | Narrows a value to a per-request timeout in milliseconds. |
373
+ | `isUpstreamHooks` | const | Narrows a value to the upstream reader's initial listener record. |
374
+ | `isUpstreamOptions` | const | Narrows a value to `UpstreamOptions`. |
377
375
 
378
376
  #### Helpers
379
377
 
380
- | Name | Kind | Summary |
381
- | ------------------------- | -------- | ------------------------------------------------------------------------------------- |
382
- | `computeDigest` | function | Compute the SHA-256 digest of text. |
383
- | `computeFileDigest` | function | Compute the SHA-256 digest of one file's exact bytes. |
384
- | `computeManifestDigest` | function | Compute the digest of a vendored host's declared membership. |
385
- | `filesToHost` | function | Overlay host-owned live files onto the installed vendored floor. |
386
- | `hexToDigest` | function | Project exact bytes stated in hexadecimal to their SHA-256 digest. |
387
- | `isExactCaseFile` | function | Test whether a physical file's path matches every on-disk segment exactly. |
388
- | `isPhysicalDirectory` | function | Test whether a path is a physical directory this package will read or write into. |
389
- | `isPhysicalFile` | function | Test whether a path is a physical file this package will read or replace. |
390
- | `isVacant` | function | Test whether a target is safe to write a fresh workspace into. |
391
- | `listCanonPaths` | function | List the canon paths a target holds, filtered to a plan's groups. |
392
- | `listDirectories` | function | List a directory's descendant directories as sorted root-relative paths. |
393
- | `listFiles` | function | List a directory's files as sorted root-relative paths. |
394
- | `matchesAnchor` | function | Test whether a captured directory is still the same directory. |
395
- | `matchesExecutablePath` | function | Test whether a vendored path is one a target receives executable. |
396
- | `matchesExpectation` | function | Test whether a destination still holds what was captured of it. |
397
- | `matchesGitPath` | function | Test whether a path addresses a target's own repository metadata. |
398
- | `matchesMissingPath` | function | Test whether a caught filesystem error reports an absent path. |
399
- | `matchesPrecondition` | function | Test whether a destination still matches the narrower state a caller observed. |
400
- | `matchesProtectedPath` | function | Test whether a target-relative path is one no verb may delete. |
401
- | `matchesSensitivePath` | function | Test whether a path names local configuration or a credential. |
402
- | `pathToStorage` | function | Project a target-relative path to the storage name a vendored host holds it under. |
403
- | `pruneEmptiedDirectories` | function | Remove every directory one set of deletions emptied. |
404
- | `readAnchor` | function | Capture one directory's physical identity. |
405
- | `readExpectation` | function | Capture what one destination holds before a write. |
406
- | `readFileHex` | function | Read one contained file as its exact bytes in lowercase hexadecimal. |
407
- | `readFileText` | function | Read one contained file as bounded UTF-8 text. |
408
- | `readHostFloor` | function | Read the installed vendored host floor as a verified value. |
409
- | `readHostManifest` | function | Read a vendored host's manifest, when it carries one. |
410
- | `readManifestEntry` | function | Derive one vendored-host manifest entry from a file in a checkout. |
411
- | `readSnapshot` | function | Read a target's current bytes at the paths a plan claims. |
412
- | `resolveContainedPath` | function | Resolve a root-relative path and refuse one that leaves its root. |
413
- | `resolveRealPath` | function | Resolve a path through the real filesystem, keeping the part that does not exist yet. |
414
- | `stageBytes` | function | Stage the named destinations of a value host into a private root. |
415
- | `stageHost` | function | Stage a vendored host root from a real checkout. |
416
- | `stageInventory` | function | Stage the committed vendored-file inventory from a real checkout. |
378
+ | Name | Kind | Summary |
379
+ | ------------------------- | -------- | -------------------------------------------------------------------------------------- |
380
+ | `computeDigest` | function | Computes the SHA-256 digest of text. |
381
+ | `computeFileDigest` | function | Computes the SHA-256 digest of one file's exact bytes. |
382
+ | `computeManifestDigest` | function | Computes the digest of a vendored host's declared membership. |
383
+ | `filesToHost` | function | Assembles a whole vendored host from live files and the installed floor. |
384
+ | `hexToDigest` | function | Projects exact bytes stated in hexadecimal to their SHA-256 digest. |
385
+ | `isExactCaseFile` | function | Tests whether a path is a physical file with exact on-disk casing. |
386
+ | `isPhysicalDirectory` | function | Tests whether a path is a physical directory this package will read or write into. |
387
+ | `isPhysicalFile` | function | Tests whether a path is a physical file this package will read or replace. |
388
+ | `isVacant` | function | Tests whether a target is safe to write a fresh workspace into. |
389
+ | `listCanonPaths` | function | Lists the canon paths a target holds, filtered to a plan's groups. |
390
+ | `listDirectories` | function | Lists a directory's descendant directories as sorted root-relative paths. |
391
+ | `listFiles` | function | Lists a directory's files as sorted root-relative paths. |
392
+ | `matchesAnchor` | function | Tests whether a captured directory is still the same directory. |
393
+ | `matchesExecutablePath` | function | Tests whether a vendored path is one a target receives executable. |
394
+ | `matchesExpectation` | function | Tests whether a destination still holds what was captured of it. |
395
+ | `matchesGitPath` | function | Tests whether a path addresses a target's own repository metadata. |
396
+ | `matchesMissingPath` | function | Tests whether a caught filesystem error reports an absent path. |
397
+ | `matchesPrecondition` | function | Tests whether a destination still matches the narrower state a caller observed. |
398
+ | `matchesProtectedPath` | function | Tests whether a target-relative path is one no verb may delete. |
399
+ | `matchesSensitivePath` | function | Tests whether a path names local configuration or a credential. |
400
+ | `pathToStorage` | function | Projects a target-relative path to the storage name a vendored host holds it under. |
401
+ | `pruneEmptiedDirectories` | function | Removes every directory one set of deletions emptied. |
402
+ | `readAnchor` | function | Captures one directory's physical identity. |
403
+ | `readExpectation` | function | Captures what one destination holds before a write. |
404
+ | `readFileHex` | function | Reads one contained file as its exact bytes in lowercase hexadecimal. |
405
+ | `readFileText` | function | Reads one contained file as bounded UTF-8 text. |
406
+ | `readHostFloor` | function | Reads the installed vendored host floor as a value. |
407
+ | `readHostManifest` | function | Reads a vendored host's manifest, when it carries one. |
408
+ | `readManifestEntry` | function | Derives one vendored-host manifest entry from a file in a checkout. |
409
+ | `readSnapshot` | function | Reads a target's current bytes at the paths a plan claims. |
410
+ | `resolveContainedPath` | function | Resolves a root-relative path and refuses one that leaves its root. |
411
+ | `resolveRealPath` | function | Resolves a path through the real filesystem, keeping the part that does not exist yet. |
412
+ | `stageBytes` | function | Stages the named destinations of a value host into a private root. |
413
+ | `stageHost` | function | Stages a vendored host root from a real checkout. |
414
+ | `stageInventory` | function | Stages the committed inventory of the files a vendored host carries. |
417
415
 
418
416
  #### Classes
419
417
 
420
- | Name | Kind | Summary |
421
- | ------------------ | ----- | ---------------------------------------------------------------------------------- |
422
- | `Materializer` | class | The mutation spine: read the vendored host, re-derive the target, stage, swap. |
423
- | `Upstream` | class | The reading spine: one bounded, unauthenticated, redirect-free request per answer. |
424
- | `WriteTransaction` | class | One staged, reversible mutation of one target directory. |
418
+ | Name | Kind | Summary |
419
+ | ------------------ | ----- | --------------------------------------------------------------------------------------------- |
420
+ | `Materializer` | class | Represents the mutation spine: read the vendored host, re-derive the target, stage, swap. |
421
+ | `Upstream` | class | Represents the reading spine: one bounded, unauthenticated, redirect-free request per answer. |
422
+ | `WriteTransaction` | class | Represents one staged, reversible mutation of one target directory. |
425
423
 
426
424
  ## Methods
427
425
 
@@ -432,45 +430,45 @@ publishes no interface and is documented directly.
432
430
 
433
431
  #### `CompilerInterface`
434
432
 
435
- | Method | Summary |
436
- | --------- | ---------------------------------------------------------------------------- |
437
- | `compile` | Compile a blueprint into a plan through the draft, gate, and pin stages. |
438
- | `audit` | Compile a blueprint and compare its plan to a target's current content. |
439
- | `destroy` | Tear the compiler down. Every later call throws, and teardown is idempotent. |
433
+ | Method | Summary |
434
+ | --------- | ----------------------------------------------------------------------------- |
435
+ | `compile` | Compiles a blueprint into a plan through the draft, gate, and pin stages. |
436
+ | `audit` | Compiles a blueprint and compares its plan to a target's current content. |
437
+ | `destroy` | Tears the compiler down. Every later call throws, and teardown is idempotent. |
440
438
 
441
439
  #### `MaterializerInterface`
442
440
 
443
- | Method | Summary |
444
- | ------------- | -------------------------------------------------------------------------------- |
445
- | `audit` | Compare a plan with a target through the vendored host that will repair it. |
446
- | `materialize` | Write a plan into a vacant target. |
447
- | `repair` | Write a plan into an existing target, guided by an audit of it. |
448
- | `mirror` | Write fetched dependency guides to their local mirrors. |
449
- | `catalog` | Rewrite the marker-bounded package table in the target's catalog agent file. |
450
- | `declare` | Rewrite the manifest regions the caller names: the ranges and the scripts. |
451
- | `remove` | Re-derive and delete the tracked files the plan does not own. |
452
- | `destroy` | Tear the materializer down. Every later call throws, and teardown is idempotent. |
441
+ | Method | Summary |
442
+ | ------------- | --------------------------------------------------------------------------------- |
443
+ | `audit` | Compares a plan with a target through the vendored host that will repair it. |
444
+ | `materialize` | Writes a plan into a vacant target. |
445
+ | `repair` | Writes a plan into an existing target, guided by an audit of it. |
446
+ | `mirror` | Writes fetched dependency guides to their local mirrors. |
447
+ | `catalog` | Rewrites the marker-bounded package table in the target's catalog agent file. |
448
+ | `declare` | Rewrites the manifest regions the caller names in the target's manifest. |
449
+ | `remove` | Re-derives and deletes the tracked files the plan does not own. |
450
+ | `destroy` | Tears the materializer down. Every later call throws, and teardown is idempotent. |
453
451
 
454
452
  #### `UpstreamInterface`
455
453
 
456
- | Method | Summary |
457
- | --------- | ------------------------------------------------------------------------------------------ |
458
- | `lookup` | Look up the newest release each declared range admits. |
459
- | `fetch` | Fetch each named package's guide, beside the local mirror it answers for. |
460
- | `read` | Read each named vendored file from the repository, beside the target bytes it answers for. |
461
- | `catalog` | Catalog the published fleet from the registry's organization package list. |
462
- | `destroy` | Tear the reader down, aborting every request in flight. |
454
+ | Method | Summary |
455
+ | --------- | ------------------------------------------------------------------------------------------- |
456
+ | `lookup` | Looks up the newest release each declared range admits. |
457
+ | `fetch` | Fetches each named package's guide, beside the local mirror it answers for. |
458
+ | `read` | Reads each named vendored file from the repository, beside the target bytes it answers for. |
459
+ | `catalog` | Catalogs the published fleet from the registry's organization package list. |
460
+ | `destroy` | Tears the reader down, aborting every request in flight. Teardown is idempotent. |
463
461
 
464
462
  #### `WriteTransaction`
465
463
 
466
- | Method | Summary |
467
- | ----------- | ---------------------------------------------------------------------------------- |
468
- | `write` | Stage one text file. |
469
- | `copy` | Stage one byte-for-byte copy in executable or non-executable destination mode. |
470
- | `establish` | Establish one directory inside the target, one segment at a time. |
471
- | `remove` | Mark one file for deletion at commit. |
472
- | `commit` | Promote every staged file and take every marked file, or roll the whole call back. |
473
- | `discard` | Abandon the transaction and remove everything it created. |
464
+ | Method | Summary |
465
+ | ----------- | ------------------------------------------------------------------------------------- |
466
+ | `write` | Stages one text file. |
467
+ | `copy` | Stages one byte-for-byte copy of a file that already exists on this host. |
468
+ | `establish` | Establishes one directory inside the target, one segment at a time. |
469
+ | `remove` | Marks one file for deletion at commit. |
470
+ | `commit` | Promotes every staged file and takes every marked file, or rolls the whole call back. |
471
+ | `discard` | Abandons the transaction and removes everything it created. |
474
472
 
475
473
  ## Command line
476
474
 
@@ -569,9 +567,10 @@ other structural facts do not need creation flags. Add a root `tests/setup*.test
569
567
  `setup`, `tests/guides.test.ts` for `guides`, `tests/integration.test.ts` for `integration`,
570
568
  `tests/conformance.test.ts` for `conformance`, `tests/setupService.ts` for `service`,
571
569
  `tests/setupGlobal.ts` for `global`, and `configs/app/vite.showcase.config.ts` for `showcase`;
572
- reading verbs detect each exact-case file and register its fixed machinery. Add `scripts/service.sh`
573
- for `vendors`. Reading verbs preserve and protect that birth-owned script, but do not infer its
574
- vendor list from edited text.
570
+ reading verbs detect each exact-case file and register its fixed machinery. An explicitly supplied
571
+ plan with `vendors` owns and protects the birth-owned `scripts/service.sh` inventory skeleton.
572
+ Reading verbs do not infer its vendor list from edited text and cannot preserve an arbitrary present
573
+ script on that basis.
575
574
 
576
575
  `distribution` is not on that list. Publishing at least one `src` environment is its whole
577
576
  condition, and scaffold writes `tests/distribution.test.ts` itself rather than waiting for you to.
@@ -590,10 +589,10 @@ and `configs/app/vite.showcase.config.ts` selects `showcase`. A containing direc
590
589
  the fact by itself. `tests/distribution.test.ts` selects nothing: the published `src` axis the
591
590
  target ships already decides the `distribution` project, and the file is planned from that.
592
591
 
593
- `vendors` is not reconstructed. Its only artifact, `scripts/service.sh`, is birth-owned, so edited
594
- script text is not a trustworthy declaration of a vendor list. A present script remains in the
595
- target and remains protected from deletion through the owned scripts inventory, but a reading verb
596
- does not infer vendors from it.
592
+ `vendors` is not reconstructed. Its artifact, `scripts/service.sh`, is a birth-owned inventory
593
+ skeleton rather than a working installer, so edited script text is not a trustworthy declaration of
594
+ a vendor list. A target-reading verb derives no vendor list from a present script. Only an
595
+ explicitly supplied plan with `vendors` owns that birth artifact.
597
596
 
598
597
  That is why the live-service project follows `service` rather than `vendors`. A reading verb has to
599
598
  plan the project before it can say anything about a target that runs one, and a vendor list it
@@ -605,8 +604,9 @@ The root Vite configuration defines and registers the fixed `guides` project onl
605
604
  blueprint carries `guides`. Reading verbs set that fact only when `tests/guides.test.ts` is a
606
605
  physical file with that exact path case. A directory or a case-folded spelling does not select it. A
607
606
  fresh workspace therefore carries no guides project or script. When a developer adds the proof,
608
- `audit` reports the exact `test:guides` script line until `repair` or `overwrite` appends it through
609
- the writable script region. The rest of the manifest remains birth-owned.
607
+ `audit` reports the exact `test:guides` script until `repair` or `overwrite` appends it through the
608
+ writable script region. That region accepts the prior generated Vitest-only value and preserves a
609
+ customized command. The rest of the manifest remains birth-owned.
610
610
 
611
611
  The plan-reading verbs compare the Vitest project set named by the target manifest with the
612
612
  project set the planned root configuration registers. Every planned proof project must also be
@@ -736,6 +736,13 @@ Limits states what that costs a target that keeps one at a canon path. The sweep
736
736
  directories its deletions emptied, so a swept target does not keep the shape of the set it no longer
737
737
  holds, and git records no directory to report that shape with.
738
738
 
739
+ Each git query streams raw NUL-delimited output and retains only complete non-empty records. The
740
+ reader applies `MAX_INVENTORY_PATHS` while it collects them and bounds an unfinished record by
741
+ `MAX_PATH_LENGTH` plus git's porcelain prefix. The worktree guard validates every complete path
742
+ after that prefix is removed. A spawn fault, failed exit, signal, stream or listener fault, drain
743
+ cutoff, or incomplete final record refuses the target under `TARGET`; no partial inventory reaches
744
+ deletion.
745
+
739
746
  ### Machine-readable output
740
747
 
741
748
  `--json` replaces the report with one JSON value on standard output. Warnings and refusals go to
@@ -770,7 +777,7 @@ const blueprint = createBlueprint('router', {
770
777
  })
771
778
 
772
779
  blueprint.version // '0.0.1'
773
- blueprint.engines // '>=22.12.0'
780
+ blueprint.engines // '>=22.18.0'
774
781
  ```
775
782
 
776
783
  `src` selects published library environments and `app` selects private application environments.
@@ -842,12 +849,13 @@ is the one proof scaffold generates from the workspace's own shape.
842
849
 
843
850
  `service` says the workspace runs a live-service Vitest project over `tests/service`, and it alone
844
851
  registers that project, its `test:service` script, and the `tests/setupService.ts` readiness module
845
- the project names. A publishing workspace invokes it from `prepublishOnly`; a `private: true`
846
- workspace invokes it from `test`, which is the only gate it has. Its longer timeouts and disabled
847
- file parallelism are the same in both. `vendors` names each external service the workspace drives
848
- and emits `scripts/service.sh`, the provisioner that starts them. Neither is derivable from the
849
- other: a workspace may declare vendors before it writes a suite, and a suite may drive a service the
850
- skeleton does not start.
852
+ the project names. The caller prepares the external service before it invokes the project, and the
853
+ setup module verifies readiness. A publishing workspace invokes the project from `prepublishOnly`;
854
+ a `private: true` workspace invokes it from `test`, which is the only gate it has. Its longer
855
+ timeouts and disabled file parallelism are the same in each workspace form. `vendors` names each external service the
856
+ workspace drives and emits `scripts/service.sh`, an inventory skeleton that starts nothing. The
857
+ vendor inventory and live-service setup are independent: a workspace may declare vendors before it
858
+ writes a suite, and a suite may drive a service the skeleton does not start.
851
859
 
852
860
  `integration` projects a cross-environment composition proof for any workspace, independently of
853
861
  whether it has a published `src`. Its generated seed imports every selected `src` and `app`
@@ -897,7 +905,7 @@ one that answers it. So `new` refuses on any question, blocking or not, before i
897
905
  `audit` and `repair` carry the same questions through, because a target that already has that shape
898
906
  still has to be described and restored.
899
907
 
900
- A library caller creating a fresh workspace applies `new`'s rule itself:
908
+ A library caller creating a fresh workspace itself applies the rule the `new` command follows:
901
909
 
902
910
  ```ts
903
911
  import { Compiler, createBlueprint } from '@orkestrel/scaffold'
@@ -1011,6 +1019,54 @@ each of which selects its project by being written. Scaffold content-owns `tests
1011
1019
  `tests/policy.test.ts`, and `tests/config.test.ts`; `repair` and `overwrite` restore those files when
1012
1020
  their bytes drift or the files are missing.
1013
1021
 
1022
+ `tests/policy.test.ts` proves the path- and text-shaped laws, and the vendored oxlint plugin
1023
+ `configs/policy.ts` carries the syntax-shaped ones: `policy/no-malformed-summary` reads the doc
1024
+ block preceding each export, and `policy/no-banned-term` reads every comment for a term
1025
+ `.claude/rules/writing.md` § Substitutions bans unconditionally. The prose sweep in
1026
+ `tests/setupPolicy.ts` reads every authored Markdown file for the same terms through the
1027
+ `POLICY_BANNED_TERMS` denylist the rule and the sweep share, and `tests/policy.test.ts` proves that
1028
+ denylist against the table wherever the workspace authors it. The sweep skips a top-level guide the
1029
+ package catalog in `.claude/agents/orkestrel.md` registers to another package, because a mirror is
1030
+ fetched bytes rather than prose this workspace wrote, and it reports a top-level guide that is
1031
+ neither this package's own, nor `guides/README.md`, nor a catalog row, so an exclusion always
1032
+ carries its evidence.
1033
+
1034
+ `tests/guides.test.ts` invokes the public `GuideCommand` class with this package's inventory policy,
1035
+ the Guide reader, and the real Vitest runner. Its anonymous worker callback owns the package
1036
+ assertions: a guide's `Summary` cell against its export's description paragraph, a titled guide
1037
+ fence against the `@example` block of that title, and the README pitch against the guide tagline.
1038
+ With no arguments, the command launches only the real `guides` Vitest project. Its assertions report
1039
+ parity failures. With an explicit direction, `GuideCommand` reads the source, tests, guides, and
1040
+ root Markdown; indexes `guides/README.md`; rewrites the selected side; and reports each remaining
1041
+ disagreement with its guide, compared key, side text or `absent`, and reason. It also reports the
1042
+ pitch pair when those values differ: the `README.md` blockquote against the tagline of the guide the
1043
+ manifest's own bare name selects,
1044
+ `guides/<name>.md`. A workspace whose manifest declares no name, whose index carries no row for that
1045
+ guide, or which carries no `README.md` reports no pitch line. It exits `1` when explicit-write drift
1046
+ remains, the project fails, the project collects no module, Vitest reports an unhandled error, or a
1047
+ module state is not `passed`. Default parity failures come from the guides project. An invalid
1048
+ option exits `2` before Vitest starts. On an explicit-direction run, a missing `guides/README.md` or
1049
+ an indexed spec the workspace does not carry also exits `2` before startup.
1050
+
1051
+ The test file is package-owned and stays outside `HOST_PATHS`. The `test:guides` script and
1052
+ `guides` project are emitted only with `guides`. The generated command requires that authored file
1053
+ to invoke `GuideCommand` directly and register the package assertions. Scaffold neither synthesizes
1054
+ nor overwrites the authored proof.
1055
+
1056
+ `npm run test:guides -- --to guide` rewrites reachable `Summary` cells and titled fences from
1057
+ source text. `npm run test:guides -- --to source` rewrites reachable description paragraphs and
1058
+ titled `@example` bodies from guide text. The README pitch remains authored by hand. A shared
1059
+ source file accumulates each selected edit before it is written. After writing changed paths,
1060
+ the entry rereads the inventory and reports remaining drift with the reason its requested rewrite
1061
+ could not resolve it. The guides project starts from those fresh bytes. The entry never formats;
1062
+ after a write it prints `next: npm run format`.
1063
+
1064
+ Scaffold owns the `scripts` directory. An audit for the orchestration group reports every unplanned
1065
+ member as foreign. `overwrite` deletes an unplanned tracked member only when the tree is clean, its
1066
+ observed bytes still match, and the path is not protected. An unplanned tracked
1067
+ `scripts/service.sh` is retired on that basis. An explicitly planned birth-owned script survives
1068
+ that deletion pass.
1069
+
1014
1070
  `tests/distribution.test.ts` is the one proof scaffold generates, and the one test artifact it
1015
1071
  claims by presence. Generation is the line, not writing: scaffold writes the vendored
1016
1072
  `tests/policy.test.ts` and `tests/config.test.ts` proofs too, and restores them, but those are the
@@ -1083,11 +1139,14 @@ The region holds a table with these columns:
1083
1139
  | `Version` | The registry's `dist-tags.latest`, or the cause when the lookup found none |
1084
1140
  | `Layer` | The publish round the edges place the package in, as `L0`, `L1`, … |
1085
1141
  | `Runtime dependencies` | Each declared runtime edge, as name and range |
1142
+ | `Peer dependencies` | Each declared peer edge, as name and range |
1086
1143
 
1087
1144
  The edge-bearing columns come from the same abbreviated packument the version came from, so a
1088
- catalog costs one request per package and no more. Only `dependencies` is read. `devDependencies`
1089
- reaches no consumer of the published package, so it constrains nothing about publish order, and
1090
- reading it would place packages in rounds that do not exist.
1145
+ catalog costs one request per package and no more. `dependencies` and `peerDependencies` are read.
1146
+ `devDependencies` reaches no consumer of the published package, so it constrains nothing about
1147
+ publish order, and reading it would place packages in rounds that do not exist. A peer edge orders
1148
+ a dependent the same way a runtime edge does, because a caret peer range at `0.0.x` pins one exact
1149
+ release.
1091
1150
 
1092
1151
  The layer is not stored on a row. `catalogToLayers` derives it from the rows' own edges, in the same
1093
1152
  call that writes them, so the layer and the rows cannot disagree:
@@ -1194,10 +1253,33 @@ The vendored data root is the shared file set, staged into the published package
1194
1253
  Staging walks `HOST_PATHS` and `CANON_PATHS`, and a release ships what both name.
1195
1254
 
1196
1255
  `HOST_PATHS` is the vendored set, and a target receives a copy of each path it selects: the
1197
- licence, the harness permission file, the session-start hooks, the shared policy register, the
1198
- shared policy proof, the shared policy plugin, the shared configuration leaf and its proof, the
1199
- byte-identical root dotfiles, and the guide mirrors a generated workspace starts from. It is a
1200
- candidate list rather than a plan, because a workspace never mirrors its own guide.
1256
+ licence, the harness permission file, the scaffold-owned `scripts` directory, the
1257
+ shared policy register, the shared policy proof, the shared policy plugin, the shared configuration
1258
+ leaf and its proof, the byte-identical root dotfiles, and the guide mirrors a generated workspace
1259
+ starts from. It is a candidate list rather than a plan, because a workspace never mirrors its own
1260
+ guide. The session-start hooks inside `scripts` split by job. The bench probe reports whether a
1261
+ bench CLI resolves, and the dependency hook installs the lockfile's closure in a remote session.
1262
+ The Ollama hook invokes `scripts/ollama.sh` only when `CLAUDE_CODE_REMOTE=true`; direct invocation
1263
+ remains available for live-service setup. What wires a bench stays in the canon, and a session reads
1264
+ it at its primary root.
1265
+
1266
+ `scripts/ollama.sh` defaults to `http://127.0.0.1:11434` and `qwen3.5:2b-q4_K_M`. It requires Node
1267
+ for native URL and JSON handling and curl for the HTTP protocol. The script accepts an HTTP or HTTPS
1268
+ origin without credentials, path, query, or fragment. It reuses any reachable daemon without
1269
+ requiring a local Ollama executable. It inspects the selected model through `/api/show`, pulls only
1270
+ after a `404` absence response, and warms the model through a completed non-streaming `/api/chat`
1271
+ request with a 30-minute keep-alive. Version readiness, pull completion, and warm completion each
1272
+ require a `2xx` HTTP status; redirects and error statuses fail even when their bodies report
1273
+ completion.
1274
+
1275
+ When an HTTP loopback endpoint is unreachable, the script may start an installed Ollama executable
1276
+ in an owned POSIX process group. A failure sends that owned group `TERM`, then sends `KILL` if it
1277
+ does not stop within 5 seconds; a reused daemon remains untouched. Direct reuse works from Git Bash on Windows, but local startup there fails because Bash
1278
+ cannot safely terminate the Windows process tree. Automatic installation is limited to Linux cloud
1279
+ or CI automation. The official installer download follows only HTTPS redirects, must be nonempty,
1280
+ and runs within the remaining setup deadline. The installer may require root or `sudo`, and its own
1281
+ platform prerequisites remain authoritative. The full setup deadline is 590 seconds, including a
1282
+ 60-second local startup allowance, within the hook's 600-second timeout.
1201
1283
 
1202
1284
  `CANON_PATHS` is the instruction canon, staged for reading instead: the `AGENTS.md` coding contract,
1203
1285
  the `CLAUDE.md` harness bridge, the `.agents/orchestration.md` agent-operation contract, the rules
@@ -1218,9 +1300,10 @@ sits beneath a member of the other. Staging depends on that, because the walk co
1218
1300
  path it discovers twice claims one storage name twice, which refuses the stage. `isCanonPath` is the
1219
1301
  one reading of canon membership, matching a member and anything beneath a member that is a directory,
1220
1302
  so staging, the live overlay, and the executable's fetch list never disagree about what a path is.
1221
- Membership says where a path's bytes are staged, not whether a plan claims it: `nameToHostArtifacts`
1222
- appends `CATALOG_AGENT_PATH` to what `HOST_PATHS` selects rather than listing it there, which is what
1223
- keeps the file planned without putting a canon path in the vendored list.
1303
+ Membership says where a path's bytes are staged, not whether a plan claims it:
1304
+ `blueprintToHostArtifacts` appends `CATALOG_AGENT_PATH` to what `HOST_PATHS` selects rather than
1305
+ listing it there, which is what keeps the file planned without putting a canon path in the vendored
1306
+ list.
1224
1307
 
1225
1308
  The `host.json` file at the repository root is the committed live inventory. Each entry carries the
1226
1309
  SHA-256 digest of its file content, and the inventory carries a membership digest over its declared
@@ -1324,7 +1407,14 @@ except the manifest.
1324
1407
  `--ignore-scripts` to `npm pack` so a suite never re-runs the build it already gates.
1325
1408
  - One template artifact per configuration file the selection needs: the root `tsconfig.json` and
1326
1409
  `vite.config.ts`, plus a Vite config and a scoped TypeScript config per selected environment and
1327
- for `bin` when it is set.
1410
+ for `bin` when it is set. The root `tsconfig.json` maps the `@src` and `@app` aliases the selection
1411
+ reaches, and beside them the workspace's own published specifiers — `@orkestrel/<name>` and one
1412
+ `@orkestrel/<name>/<environment>` entry per subpath the `exports` map publishes — each to its
1413
+ source entry. Without them the workspace's own name resolves through that `exports` map to
1414
+ `dist/`, and `npm run check` would wait on `npm run build`. Every subpath is written before the
1415
+ bare specifier, because `vite.config.ts` derives its `alias` record from these entries in order and
1416
+ a bare specifier also matches its own subpaths. An `app` environment publishes nothing and maps no
1417
+ such entry.
1328
1418
  - One template artifact, `configs/browsers.ts`, for a workspace selecting `browser` on either axis.
1329
1419
  It resolves the Chromium the Playwright provider launches, and the root `vite.config.ts` calls it
1330
1420
  once into `browserOptions` and passes that to every `playwright()` provider it configures. The
@@ -1358,6 +1448,36 @@ except the manifest.
1358
1448
  - One host artifact per vendored path the workspace selects. A vendored directory is one planned
1359
1449
  path that expands into the files the data root stores beneath it.
1360
1450
 
1451
+ Every generated manifest declares the toolchain it is gated on. The `engines.node` field carries
1452
+ the blueprint's `engines` value, which defaults to the `>=22.18.0` range. The
1453
+ `devEngines.packageManager` record names npm at the `>=11.6.0` range with its `onFail` key set to
1454
+ the `error` value, and no blueprint field varies that record. An npm at 10.9.0 or later reads that
1455
+ record. Such an npm earlier than 11.6.0 refuses the `npm install` command in a generated workspace
1456
+ with the `EBADDEVENGINES` code, before resolving the dependency graph.
1457
+ npm 10.9.7 refuses an `npm run` command in such a workspace with the same code. The releases
1458
+ measured earlier than 10.9.0, npm 10.5.0 and npm 10.8.3, ignore the record and fail inside
1459
+ dependency resolution instead. Every Node release at 22.18.0 or later bundles an npm at 10.9.0 or
1460
+ later. A generated workspace on Node 22.18.0 or later therefore meets an npm that ignores the record
1461
+ only under an npm other than the bundled one. Run a generated workspace on npm 11.6.0 or later:
1462
+ every release from 10.9.0 up to 11.6.0 refuses it, and 11.6.0 installs it. Read the ambient
1463
+ version with the `npm --version` command. Raise it with the `npm install --global npm@11.6.0`
1464
+ command before the first install; that command installs an npm that reports
1465
+ 11.6.0. The npm readings come from a Linux host on Node 22.22.2, on 2026-09-13, and the bundled
1466
+ versions come from the Node release index read that day.
1467
+
1468
+ A workspace publishing a `src` environment rolls each published face's declarations up from that
1469
+ face's own Vite config. The seeded config calls `declarationRollup` from the vendored
1470
+ `configs/helpers.ts`, which runs the workspace's own compiler as a command —
1471
+ `--declaration --emitDeclarationOnly` into a scratch directory outside the tree — and hands the
1472
+ emitted entry declaration to API Extractor, which rolls the face into the one `index.d.ts` beside
1473
+ its bundle. The extractor analyses with the compiler engine it bundles rather than the one the
1474
+ workspace installs, so a publishing workspace declares `@microsoft/api-extractor` and imports no
1475
+ compiler API of its own. The browser and server faces pass `rewriteCoreSpecifier`: the compiler
1476
+ emits the `@src/core` specifier unrewritten and the extractor keeps it external, so the rewrite
1477
+ replaces it with the workspace's own published name and a consumer of the packed face reaches core
1478
+ through the root export the tarball declares. The seeded `bin` config calls no roll-up, because an
1479
+ executable ships no declarations.
1480
+
1361
1481
  `planToSummary` reports the tally rather than a number written down here:
1362
1482
 
1363
1483
  ```ts
@@ -1665,6 +1785,16 @@ one answered first. That is what drives a `require`-only subpath declaring its t
1665
1785
  `require`, and what admits a conventional subpath that publishes no `types` condition but ships the
1666
1786
  adjacent declaration TypeScript substitutes from its runtime target.
1667
1787
 
1788
+ An entry's published names are checked against its own declarations by the type system rather than
1789
+ by a walk the proof carries. Each drive writes the runtime's own key list into a generated consumer
1790
+ module as a literal and lets the workspace's compiler judge that module under the driver's own
1791
+ resolution, in both directions. `Record<keyof typeof entry, true>` takes the literal, so a name the
1792
+ declarations carry and the runtime does not lands there. `Record<keyof typeof published, true>`
1793
+ takes that record back, so a name the runtime carries and the declarations do not, and a name the
1794
+ declarations publish as a type alone, land there instead. One direction alone passes on a runtime
1795
+ key the declarations lack, which is why the consumer carries both, and each diagnostic names the
1796
+ member that moved.
1797
+
1668
1798
  A subpath is undeclared when it resolves no declaration and names a runtime target, which is a
1669
1799
  defect, because a consumer importing it compiles against nothing under `node16`. A target is a
1670
1800
  runtime target when its own file name carries no extension at all, or carries `.js`, `.mjs`,
@@ -1784,8 +1914,13 @@ port, so the run drives nothing external and stays in `test`.
1784
1914
  - [`tests/src/bin/helpers.test.ts`](../tests/src/bin/helpers.test.ts) — command-line reading, usage
1785
1915
  rendering, and the failure envelope.
1786
1916
  - [`tests/src/bin/main.test.ts`](../tests/src/bin/main.test.ts) — the process entry point.
1787
- - [`tests/policy.test.ts`](../tests/policy.test.ts) — the syntactic coding and placement law over
1788
- every source file.
1917
+ - [`tests/policy.test.ts`](../tests/policy.test.ts) — the path- and text-shaped policy laws:
1918
+ mirrors, suppressions, the rule map, filenames, manifest scripts, skills, bridges, and the prose
1919
+ sweep over every authored Markdown file. The syntax-shaped laws are the rules of the vendored
1920
+ oxlint plugin `configs/policy.ts`, proven in `tests/config.test.ts`.
1921
+ - [`tests/config.test.ts`](../tests/config.test.ts) — the root configuration's aliases, projects,
1922
+ and outputs, every plugin rule against a case pair drawn from inside and outside its membership
1923
+ boundary, and the declaration roll-up over a real face.
1789
1924
  - [`tests/guides.test.ts`](../tests/guides.test.ts) — this guide's bijection with the barrels.
1790
1925
 
1791
1926
  ## See also