@orkestrel/scaffold 0.0.62 → 0.0.64
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.
- package/README.md +18 -103
- package/dist/bin/main.js +95 -27
- package/dist/bin/main.js.map +1 -1
- package/dist/host/AGENTS.md +2 -2
- package/dist/host/CLAUDE.md +6 -0
- package/dist/host/agents/orchestration.md +23 -15
- package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +16 -16
- package/dist/host/agents/skills/enterprise-bootstrap/references/frontend-design.md +6 -6
- package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +4 -4
- package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +5 -5
- package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +1 -1
- package/dist/host/agents/skills/orkestrel-publish/SKILL.md +15 -15
- package/dist/host/agents/skills/orkestrel-publish/references/wave.md +43 -17
- package/dist/host/agents/skills/orkestrel-publish/references/window.md +41 -16
- package/dist/host/claude/agents/orkestrel.md +56 -56
- package/dist/host/claude/agents/reviewer.md +13 -0
- package/dist/host/claude/rules/architecture.md +51 -45
- package/dist/host/claude/rules/documentation.md +18 -1
- package/dist/host/claude/rules/portability.md +2 -0
- package/dist/host/claude/rules/quality.md +1 -1
- package/dist/host/claude/rules/tests.md +12 -11
- package/dist/host/claude/rules/typescript.md +5 -0
- package/dist/host/claude/rules/workspace.md +23 -18
- package/dist/host/claude/rules/writing.md +4 -0
- package/dist/host/codex/agents/orkestrel.toml +3 -3
- package/dist/host/codex/agents/reviewer.toml +4 -2
- package/dist/host/configs/helpers.ts +311 -2
- package/dist/host/configs/policy.ts +1100 -51
- package/dist/host/dotfiles/oxlintrc.json +72 -1
- package/dist/host/guides/guide.md +749 -222
- package/dist/host/guides/scaffold.md +472 -378
- package/dist/host/manifest.json +34 -33
- package/dist/host/scripts/codex.sh +0 -0
- package/dist/host/scripts/cursor.sh +0 -0
- package/dist/host/scripts/deps.sh +0 -0
- package/dist/host/scripts/ollama.sh +0 -0
- package/dist/host/tests/config.test.ts +1200 -16
- package/dist/host/tests/policy.test.ts +157 -173
- package/dist/host/tests/setupPolicy.ts +522 -1007
- package/dist/src/core/index.cjs +373 -279
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +130 -120
- package/dist/src/core/index.d.ts +130 -120
- package/dist/src/core/index.js +373 -278
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +28 -21
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.d.cts +38 -33
- package/dist/src/server/index.d.ts +38 -33
- package/dist/src/server/index.js +28 -21
- package/dist/src/server/index.js.map +1 -1
- package/package.json +17 -18
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Audit } from '@orkestrel/scaffold';
|
|
2
|
-
import { CatalogEntry } from '@orkestrel/scaffold';
|
|
3
|
-
import { Dependency } from '@orkestrel/scaffold';
|
|
4
|
-
import { EmitterErrorHandler } from '@orkestrel/emitter';
|
|
5
|
-
import { EmitterHooks } from '@orkestrel/emitter';
|
|
6
|
-
import { EmitterInterface } from '@orkestrel/emitter';
|
|
7
|
-
import { Group } from '@orkestrel/scaffold';
|
|
8
|
-
import { Guard } from '@orkestrel/contract';
|
|
9
|
-
import { HostFile } from '@orkestrel/scaffold';
|
|
10
|
-
import { Lookup } from '@orkestrel/scaffold';
|
|
11
|
-
import { ManifestRegionSet } from '@orkestrel/scaffold';
|
|
12
|
-
import { Mirror } from '@orkestrel/scaffold';
|
|
13
|
-
import { Plan } from '@orkestrel/scaffold';
|
|
14
|
-
import { Release } from '@orkestrel/scaffold';
|
|
15
|
-
import { Snapshot } from '@orkestrel/scaffold';
|
|
1
|
+
import type { Audit } from '@orkestrel/scaffold';
|
|
2
|
+
import type { CatalogEntry } from '@orkestrel/scaffold';
|
|
3
|
+
import type { Dependency } from '@orkestrel/scaffold';
|
|
4
|
+
import type { EmitterErrorHandler } from '@orkestrel/emitter';
|
|
5
|
+
import type { EmitterHooks } from '@orkestrel/emitter';
|
|
6
|
+
import type { EmitterInterface } from '@orkestrel/emitter';
|
|
7
|
+
import type { Group } from '@orkestrel/scaffold';
|
|
8
|
+
import type { Guard } from '@orkestrel/contract';
|
|
9
|
+
import type { HostFile } from '@orkestrel/scaffold';
|
|
10
|
+
import type { Lookup } from '@orkestrel/scaffold';
|
|
11
|
+
import type { ManifestRegionSet } from '@orkestrel/scaffold';
|
|
12
|
+
import type { Mirror } from '@orkestrel/scaffold';
|
|
13
|
+
import type { Plan } from '@orkestrel/scaffold';
|
|
14
|
+
import type { Release } from '@orkestrel/scaffold';
|
|
15
|
+
import type { Snapshot } from '@orkestrel/scaffold';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Matches the Git branch syntax the repository endpoint accepts.
|
|
@@ -1052,7 +1052,9 @@ export declare function matchesSensitivePath(path: string): boolean;
|
|
|
1052
1052
|
* declare const plan: Plan
|
|
1053
1053
|
*
|
|
1054
1054
|
* const materializer = new Materializer({ host: './dist/host' })
|
|
1055
|
-
* materializer.materialize(plan, './packages/router')
|
|
1055
|
+
* const result = materializer.materialize(plan, './packages/router')
|
|
1056
|
+
*
|
|
1057
|
+
* result.written // every path created
|
|
1056
1058
|
* materializer.destroy()
|
|
1057
1059
|
* ```
|
|
1058
1060
|
*/
|
|
@@ -1093,8 +1095,7 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1093
1095
|
*
|
|
1094
1096
|
* @param plan - The compiled plan to compare.
|
|
1095
1097
|
* @param target - The directory to inspect.
|
|
1096
|
-
* @returns
|
|
1097
|
-
* beneath owned host roots and inside the instruction canon.
|
|
1098
|
+
* @returns Findings for hydrated planned paths and selected foreign candidates.
|
|
1098
1099
|
* @throws {@link ScaffoldError} coded `INVALID` when an argument is not the
|
|
1099
1100
|
* exact shape, `TARGET` when the host or target cannot be read within its
|
|
1100
1101
|
* bounds, and `DESTROYED` after teardown.
|
|
@@ -1102,10 +1103,10 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1102
1103
|
* @remarks
|
|
1103
1104
|
* Host directories expand before the target is read, so this method and
|
|
1104
1105
|
* {@link repair} compare the same paths with the same ownership. Foreign
|
|
1105
|
-
* candidates are files beneath those expanded roots and files the target holds
|
|
1106
|
-
*
|
|
1107
|
-
*
|
|
1108
|
-
* is selected.
|
|
1106
|
+
* candidates are files beneath those expanded roots and files the target holds at
|
|
1107
|
+
* a `CANON_PATHS` member. A
|
|
1108
|
+
* file outside these populations never becomes a deletion candidate merely
|
|
1109
|
+
* because its group is selected.
|
|
1109
1110
|
*
|
|
1110
1111
|
* The canon is staged for reading rather than for a target, so a copy of one of
|
|
1111
1112
|
* its paths sitting in a target is a superseded artifact and reports foreign. A
|
|
@@ -1238,13 +1239,12 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1238
1239
|
* recovery mechanism, so a path it cannot restore is not one this verb takes.
|
|
1239
1240
|
* A tree carrying uncommitted work is refused whole for the same reason.
|
|
1240
1241
|
*
|
|
1241
|
-
*
|
|
1242
|
-
*
|
|
1243
|
-
* the same transaction
|
|
1244
|
-
* never byte identity
|
|
1245
|
-
*
|
|
1246
|
-
*
|
|
1247
|
-
* is the seam a maintainer keeps a git-ignored file in.
|
|
1242
|
+
* The candidate list carries every foreign population {@link audit} reports. A
|
|
1243
|
+
* superseded instruction copy inside the canon and a stray beneath an owned root
|
|
1244
|
+
* therefore follow the same transaction rules.
|
|
1245
|
+
* Membership decides it, never byte identity. An untracked leftover stays in
|
|
1246
|
+
* place and remains a finding, which is the seam a maintainer uses to keep a
|
|
1247
|
+
* git-ignored file.
|
|
1248
1248
|
*
|
|
1249
1249
|
* The whole call refuses when the preview disagrees with the re-derivation on
|
|
1250
1250
|
* any foreign finding, including one the deletion itself would skip, because a
|
|
@@ -1312,7 +1312,11 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1312
1312
|
*
|
|
1313
1313
|
* @param plan - The compiled plan to compare.
|
|
1314
1314
|
* @param target - The directory to inspect.
|
|
1315
|
-
* @returns
|
|
1315
|
+
* @returns Findings for hydrated planned paths and selected foreign candidates.
|
|
1316
|
+
*
|
|
1317
|
+
* @remarks
|
|
1318
|
+
* Foreign candidates are files beneath expanded host roots and files held at a
|
|
1319
|
+
* selected instruction-canon path.
|
|
1316
1320
|
*/
|
|
1317
1321
|
audit(plan: Plan, target: string): Audit;
|
|
1318
1322
|
/**
|
|
@@ -1391,7 +1395,6 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1391
1395
|
* unlinked, so a failure part way through restores what it already took.
|
|
1392
1396
|
* The package's own source and application trees are never candidates,
|
|
1393
1397
|
* whatever the audit reports.
|
|
1394
|
-
*
|
|
1395
1398
|
* The whole audit is guarded before any of it is read, so an audit produced by
|
|
1396
1399
|
* an earlier version of this package is refused at runtime rather than only at
|
|
1397
1400
|
* compile time. Only foreign findings are candidates and those never carried
|
|
@@ -1987,11 +1990,11 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1987
1990
|
* such a path is skipped. A path either list names itself is curated data
|
|
1988
1991
|
* rather than discovery, so it is staged or the stage is refused.
|
|
1989
1992
|
*
|
|
1990
|
-
* @example
|
|
1993
|
+
* @example Vendored data root
|
|
1991
1994
|
* ```ts
|
|
1992
1995
|
* import { stageHost } from '@orkestrel/scaffold/server'
|
|
1993
1996
|
*
|
|
1994
|
-
* stageHost(process.cwd(), 'dist/host')
|
|
1997
|
+
* stageHost(process.cwd(), 'dist/host') // one ManifestEntry per file staged
|
|
1995
1998
|
* ```
|
|
1996
1999
|
*/
|
|
1997
2000
|
export declare function stageHost(checkout: string, host: string): readonly ManifestEntry[];
|
|
@@ -2079,6 +2082,8 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
2079
2082
|
*
|
|
2080
2083
|
* const upstream = new Upstream({ registry: { timeout: 5_000 } })
|
|
2081
2084
|
* const releases = await upstream.lookup([{ name: '@orkestrel/emitter', range: '^0.0.5' }])
|
|
2085
|
+
*
|
|
2086
|
+
* releases.filter((release) => release.lookup === 'found')
|
|
2082
2087
|
* upstream.destroy()
|
|
2083
2088
|
* ```
|
|
2084
2089
|
*/
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Audit } from '@orkestrel/scaffold';
|
|
2
|
-
import { CatalogEntry } from '@orkestrel/scaffold';
|
|
3
|
-
import { Dependency } from '@orkestrel/scaffold';
|
|
4
|
-
import { EmitterErrorHandler } from '@orkestrel/emitter';
|
|
5
|
-
import { EmitterHooks } from '@orkestrel/emitter';
|
|
6
|
-
import { EmitterInterface } from '@orkestrel/emitter';
|
|
7
|
-
import { Group } from '@orkestrel/scaffold';
|
|
8
|
-
import { Guard } from '@orkestrel/contract';
|
|
9
|
-
import { HostFile } from '@orkestrel/scaffold';
|
|
10
|
-
import { Lookup } from '@orkestrel/scaffold';
|
|
11
|
-
import { ManifestRegionSet } from '@orkestrel/scaffold';
|
|
12
|
-
import { Mirror } from '@orkestrel/scaffold';
|
|
13
|
-
import { Plan } from '@orkestrel/scaffold';
|
|
14
|
-
import { Release } from '@orkestrel/scaffold';
|
|
15
|
-
import { Snapshot } from '@orkestrel/scaffold';
|
|
1
|
+
import type { Audit } from '@orkestrel/scaffold';
|
|
2
|
+
import type { CatalogEntry } from '@orkestrel/scaffold';
|
|
3
|
+
import type { Dependency } from '@orkestrel/scaffold';
|
|
4
|
+
import type { EmitterErrorHandler } from '@orkestrel/emitter';
|
|
5
|
+
import type { EmitterHooks } from '@orkestrel/emitter';
|
|
6
|
+
import type { EmitterInterface } from '@orkestrel/emitter';
|
|
7
|
+
import type { Group } from '@orkestrel/scaffold';
|
|
8
|
+
import type { Guard } from '@orkestrel/contract';
|
|
9
|
+
import type { HostFile } from '@orkestrel/scaffold';
|
|
10
|
+
import type { Lookup } from '@orkestrel/scaffold';
|
|
11
|
+
import type { ManifestRegionSet } from '@orkestrel/scaffold';
|
|
12
|
+
import type { Mirror } from '@orkestrel/scaffold';
|
|
13
|
+
import type { Plan } from '@orkestrel/scaffold';
|
|
14
|
+
import type { Release } from '@orkestrel/scaffold';
|
|
15
|
+
import type { Snapshot } from '@orkestrel/scaffold';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Matches the Git branch syntax the repository endpoint accepts.
|
|
@@ -1052,7 +1052,9 @@ export declare function matchesSensitivePath(path: string): boolean;
|
|
|
1052
1052
|
* declare const plan: Plan
|
|
1053
1053
|
*
|
|
1054
1054
|
* const materializer = new Materializer({ host: './dist/host' })
|
|
1055
|
-
* materializer.materialize(plan, './packages/router')
|
|
1055
|
+
* const result = materializer.materialize(plan, './packages/router')
|
|
1056
|
+
*
|
|
1057
|
+
* result.written // every path created
|
|
1056
1058
|
* materializer.destroy()
|
|
1057
1059
|
* ```
|
|
1058
1060
|
*/
|
|
@@ -1093,8 +1095,7 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1093
1095
|
*
|
|
1094
1096
|
* @param plan - The compiled plan to compare.
|
|
1095
1097
|
* @param target - The directory to inspect.
|
|
1096
|
-
* @returns
|
|
1097
|
-
* beneath owned host roots and inside the instruction canon.
|
|
1098
|
+
* @returns Findings for hydrated planned paths and selected foreign candidates.
|
|
1098
1099
|
* @throws {@link ScaffoldError} coded `INVALID` when an argument is not the
|
|
1099
1100
|
* exact shape, `TARGET` when the host or target cannot be read within its
|
|
1100
1101
|
* bounds, and `DESTROYED` after teardown.
|
|
@@ -1102,10 +1103,10 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1102
1103
|
* @remarks
|
|
1103
1104
|
* Host directories expand before the target is read, so this method and
|
|
1104
1105
|
* {@link repair} compare the same paths with the same ownership. Foreign
|
|
1105
|
-
* candidates are files beneath those expanded roots and files the target holds
|
|
1106
|
-
*
|
|
1107
|
-
*
|
|
1108
|
-
* is selected.
|
|
1106
|
+
* candidates are files beneath those expanded roots and files the target holds at
|
|
1107
|
+
* a `CANON_PATHS` member. A
|
|
1108
|
+
* file outside these populations never becomes a deletion candidate merely
|
|
1109
|
+
* because its group is selected.
|
|
1109
1110
|
*
|
|
1110
1111
|
* The canon is staged for reading rather than for a target, so a copy of one of
|
|
1111
1112
|
* its paths sitting in a target is a superseded artifact and reports foreign. A
|
|
@@ -1238,13 +1239,12 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1238
1239
|
* recovery mechanism, so a path it cannot restore is not one this verb takes.
|
|
1239
1240
|
* A tree carrying uncommitted work is refused whole for the same reason.
|
|
1240
1241
|
*
|
|
1241
|
-
*
|
|
1242
|
-
*
|
|
1243
|
-
* the same transaction
|
|
1244
|
-
* never byte identity
|
|
1245
|
-
*
|
|
1246
|
-
*
|
|
1247
|
-
* is the seam a maintainer keeps a git-ignored file in.
|
|
1242
|
+
* The candidate list carries every foreign population {@link audit} reports. A
|
|
1243
|
+
* superseded instruction copy inside the canon and a stray beneath an owned root
|
|
1244
|
+
* therefore follow the same transaction rules.
|
|
1245
|
+
* Membership decides it, never byte identity. An untracked leftover stays in
|
|
1246
|
+
* place and remains a finding, which is the seam a maintainer uses to keep a
|
|
1247
|
+
* git-ignored file.
|
|
1248
1248
|
*
|
|
1249
1249
|
* The whole call refuses when the preview disagrees with the re-derivation on
|
|
1250
1250
|
* any foreign finding, including one the deletion itself would skip, because a
|
|
@@ -1312,7 +1312,11 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1312
1312
|
*
|
|
1313
1313
|
* @param plan - The compiled plan to compare.
|
|
1314
1314
|
* @param target - The directory to inspect.
|
|
1315
|
-
* @returns
|
|
1315
|
+
* @returns Findings for hydrated planned paths and selected foreign candidates.
|
|
1316
|
+
*
|
|
1317
|
+
* @remarks
|
|
1318
|
+
* Foreign candidates are files beneath expanded host roots and files held at a
|
|
1319
|
+
* selected instruction-canon path.
|
|
1316
1320
|
*/
|
|
1317
1321
|
audit(plan: Plan, target: string): Audit;
|
|
1318
1322
|
/**
|
|
@@ -1391,7 +1395,6 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1391
1395
|
* unlinked, so a failure part way through restores what it already took.
|
|
1392
1396
|
* The package's own source and application trees are never candidates,
|
|
1393
1397
|
* whatever the audit reports.
|
|
1394
|
-
*
|
|
1395
1398
|
* The whole audit is guarded before any of it is read, so an audit produced by
|
|
1396
1399
|
* an earlier version of this package is refused at runtime rather than only at
|
|
1397
1400
|
* compile time. Only foreign findings are candidates and those never carried
|
|
@@ -1987,11 +1990,11 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
1987
1990
|
* such a path is skipped. A path either list names itself is curated data
|
|
1988
1991
|
* rather than discovery, so it is staged or the stage is refused.
|
|
1989
1992
|
*
|
|
1990
|
-
* @example
|
|
1993
|
+
* @example Vendored data root
|
|
1991
1994
|
* ```ts
|
|
1992
1995
|
* import { stageHost } from '@orkestrel/scaffold/server'
|
|
1993
1996
|
*
|
|
1994
|
-
* stageHost(process.cwd(), 'dist/host')
|
|
1997
|
+
* stageHost(process.cwd(), 'dist/host') // one ManifestEntry per file staged
|
|
1995
1998
|
* ```
|
|
1996
1999
|
*/
|
|
1997
2000
|
export declare function stageHost(checkout: string, host: string): readonly ManifestEntry[];
|
|
@@ -2079,6 +2082,8 @@ export declare class Materializer implements MaterializerInterface {
|
|
|
2079
2082
|
*
|
|
2080
2083
|
* const upstream = new Upstream({ registry: { timeout: 5_000 } })
|
|
2081
2084
|
* const releases = await upstream.lookup([{ name: '@orkestrel/emitter', range: '^0.0.5' }])
|
|
2085
|
+
*
|
|
2086
|
+
* releases.filter((release) => release.lookup === 'found')
|
|
2082
2087
|
* upstream.destroy()
|
|
2083
2088
|
* ```
|
|
2084
2089
|
*/
|
package/dist/src/server/index.js
CHANGED
|
@@ -1834,11 +1834,11 @@ function stageBytes(host, root, destinations) {
|
|
|
1834
1834
|
* such a path is skipped. A path either list names itself is curated data
|
|
1835
1835
|
* rather than discovery, so it is staged or the stage is refused.
|
|
1836
1836
|
*
|
|
1837
|
-
* @example
|
|
1837
|
+
* @example Vendored data root
|
|
1838
1838
|
* ```ts
|
|
1839
1839
|
* import { stageHost } from '@orkestrel/scaffold/server'
|
|
1840
1840
|
*
|
|
1841
|
-
* stageHost(process.cwd(), 'dist/host')
|
|
1841
|
+
* stageHost(process.cwd(), 'dist/host') // one ManifestEntry per file staged
|
|
1842
1842
|
* ```
|
|
1843
1843
|
*/
|
|
1844
1844
|
function stageHost(checkout, host) {
|
|
@@ -2727,7 +2727,9 @@ var WriteTransaction = class {
|
|
|
2727
2727
|
* declare const plan: Plan
|
|
2728
2728
|
*
|
|
2729
2729
|
* const materializer = new Materializer({ host: './dist/host' })
|
|
2730
|
-
* materializer.materialize(plan, './packages/router')
|
|
2730
|
+
* const result = materializer.materialize(plan, './packages/router')
|
|
2731
|
+
*
|
|
2732
|
+
* result.written // every path created
|
|
2731
2733
|
* materializer.destroy()
|
|
2732
2734
|
* ```
|
|
2733
2735
|
*/
|
|
@@ -2802,8 +2804,7 @@ var Materializer = class {
|
|
|
2802
2804
|
*
|
|
2803
2805
|
* @param plan - The compiled plan to compare.
|
|
2804
2806
|
* @param target - The directory to inspect.
|
|
2805
|
-
* @returns
|
|
2806
|
-
* beneath owned host roots and inside the instruction canon.
|
|
2807
|
+
* @returns Findings for hydrated planned paths and selected foreign candidates.
|
|
2807
2808
|
* @throws {@link ScaffoldError} coded `INVALID` when an argument is not the
|
|
2808
2809
|
* exact shape, `TARGET` when the host or target cannot be read within its
|
|
2809
2810
|
* bounds, and `DESTROYED` after teardown.
|
|
@@ -2811,10 +2812,10 @@ var Materializer = class {
|
|
|
2811
2812
|
* @remarks
|
|
2812
2813
|
* Host directories expand before the target is read, so this method and
|
|
2813
2814
|
* {@link repair} compare the same paths with the same ownership. Foreign
|
|
2814
|
-
* candidates are files beneath those expanded roots and files the target holds
|
|
2815
|
-
*
|
|
2816
|
-
*
|
|
2817
|
-
* is selected.
|
|
2815
|
+
* candidates are files beneath those expanded roots and files the target holds at
|
|
2816
|
+
* a `CANON_PATHS` member. A
|
|
2817
|
+
* file outside these populations never becomes a deletion candidate merely
|
|
2818
|
+
* because its group is selected.
|
|
2818
2819
|
*
|
|
2819
2820
|
* The canon is staged for reading rather than for a target, so a copy of one of
|
|
2820
2821
|
* its paths sitting in a target is a superseded artifact and reports foreign. A
|
|
@@ -3019,13 +3020,12 @@ var Materializer = class {
|
|
|
3019
3020
|
* recovery mechanism, so a path it cannot restore is not one this verb takes.
|
|
3020
3021
|
* A tree carrying uncommitted work is refused whole for the same reason.
|
|
3021
3022
|
*
|
|
3022
|
-
*
|
|
3023
|
-
*
|
|
3024
|
-
* the same transaction
|
|
3025
|
-
* never byte identity
|
|
3026
|
-
*
|
|
3027
|
-
*
|
|
3028
|
-
* is the seam a maintainer keeps a git-ignored file in.
|
|
3023
|
+
* The candidate list carries every foreign population {@link audit} reports. A
|
|
3024
|
+
* superseded instruction copy inside the canon and a stray beneath an owned root
|
|
3025
|
+
* therefore follow the same transaction rules.
|
|
3026
|
+
* Membership decides it, never byte identity. An untracked leftover stays in
|
|
3027
|
+
* place and remains a finding, which is the seam a maintainer uses to keep a
|
|
3028
|
+
* git-ignored file.
|
|
3029
3029
|
*
|
|
3030
3030
|
* The whole call refuses when the preview disagrees with the re-derivation on
|
|
3031
3031
|
* any foreign finding, including one the deletion itself would skip, because a
|
|
@@ -3497,22 +3497,26 @@ var Materializer = class {
|
|
|
3497
3497
|
`\`${entry.name}\``,
|
|
3498
3498
|
this.#cell(entry.note),
|
|
3499
3499
|
"",
|
|
3500
|
+
"",
|
|
3500
3501
|
""
|
|
3501
3502
|
];
|
|
3502
3503
|
const layer = placed.get(entry.name);
|
|
3503
3504
|
const edges = entry.dependencies.map((dependency) => `\`${dependency.name}\` \`${dependency.range}\``).join(", ");
|
|
3505
|
+
const peers = entry.peers.map((dependency) => `\`${dependency.name}\` \`${dependency.range}\``).join(", ");
|
|
3504
3506
|
return [
|
|
3505
3507
|
`\`${entry.name}\``,
|
|
3506
3508
|
`\`${entry.version}\``,
|
|
3507
3509
|
layer === void 0 ? "" : `L${String(layer)}`,
|
|
3508
|
-
edges
|
|
3510
|
+
edges,
|
|
3511
|
+
peers
|
|
3509
3512
|
];
|
|
3510
3513
|
});
|
|
3511
3514
|
const headers = [
|
|
3512
3515
|
"Package",
|
|
3513
3516
|
"Version",
|
|
3514
3517
|
"Layer",
|
|
3515
|
-
"Runtime dependencies"
|
|
3518
|
+
"Runtime dependencies",
|
|
3519
|
+
"Peer dependencies"
|
|
3516
3520
|
];
|
|
3517
3521
|
const widths = headers.map((header, column) => {
|
|
3518
3522
|
let width = Math.max(3, header.length);
|
|
@@ -3603,6 +3607,8 @@ var Materializer = class {
|
|
|
3603
3607
|
*
|
|
3604
3608
|
* const upstream = new Upstream({ registry: { timeout: 5_000 } })
|
|
3605
3609
|
* const releases = await upstream.lookup([{ name: '@orkestrel/emitter', range: '^0.0.5' }])
|
|
3610
|
+
*
|
|
3611
|
+
* releases.filter((release) => release.lookup === 'found')
|
|
3606
3612
|
* upstream.destroy()
|
|
3607
3613
|
* ```
|
|
3608
3614
|
*/
|
|
@@ -3989,7 +3995,8 @@ var Upstream = class {
|
|
|
3989
3995
|
name,
|
|
3990
3996
|
lookup: "found",
|
|
3991
3997
|
version,
|
|
3992
|
-
dependencies: this.#edges(outcome.content, version)
|
|
3998
|
+
dependencies: this.#edges(outcome.content, version, "dependencies"),
|
|
3999
|
+
peers: this.#edges(outcome.content, version, "peerDependencies")
|
|
3993
4000
|
};
|
|
3994
4001
|
return {
|
|
3995
4002
|
name,
|
|
@@ -3997,14 +4004,14 @@ var Upstream = class {
|
|
|
3997
4004
|
note: outcome.lookup === "found" ? UNREADABLE_VERSION_NOTE : outcome.note
|
|
3998
4005
|
};
|
|
3999
4006
|
}
|
|
4000
|
-
#edges(content, version) {
|
|
4007
|
+
#edges(content, version, section) {
|
|
4001
4008
|
const parsed = parseJSON(content);
|
|
4002
4009
|
if (!isRecord(parsed)) return [];
|
|
4003
4010
|
const versions = parsed.versions;
|
|
4004
4011
|
if (!isRecord(versions)) return [];
|
|
4005
4012
|
const manifest = versions[version];
|
|
4006
4013
|
if (!isRecord(manifest)) return [];
|
|
4007
|
-
const declared = manifest
|
|
4014
|
+
const declared = manifest[section];
|
|
4008
4015
|
if (!isRecord(declared)) return [];
|
|
4009
4016
|
const edges = [];
|
|
4010
4017
|
for (const [name, range] of Object.entries(declared)) {
|