@intentius/chant 0.29.0 → 0.30.0
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/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +14 -0
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/deep-observation.d.ts +257 -0
- package/dist/deep-observation.d.ts.map +1 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/fold/fold.d.ts +23 -3
- package/dist/fold/fold.d.ts.map +1 -1
- package/dist/fold/subset.d.ts +9 -0
- package/dist/fold/subset.d.ts.map +1 -1
- package/dist/graph-ir.d.ts +44 -0
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/lexicon.d.ts +47 -0
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/deep-diff.d.ts +103 -0
- package/dist/lifecycle/deep-diff.d.ts.map +1 -0
- package/dist/lifecycle/deep-observe.d.ts +62 -0
- package/dist/lifecycle/deep-observe.d.ts.map +1 -0
- package/dist/lifecycle/index.d.ts +3 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/observation-baseline.d.ts +118 -0
- package/dist/lifecycle/observation-baseline.d.ts.map +1 -0
- package/dist/lifecycle/snapshot.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/cli/handlers/graph.test.ts +86 -0
- package/src/cli/handlers/graph.ts +64 -3
- package/src/cli/handlers/lifecycle.test.ts +126 -1
- package/src/cli/handlers/lifecycle.ts +184 -3
- package/src/cli/main.test.ts +6 -0
- package/src/cli/main.ts +12 -0
- package/src/cli/registry.ts +14 -0
- package/src/deep-observation.test.ts +234 -0
- package/src/deep-observation.ts +489 -0
- package/src/discovery/fold-import.test.ts +372 -1
- package/src/discovery/fold-import.ts +235 -79
- package/src/fold/fold.test.ts +105 -0
- package/src/fold/fold.ts +88 -18
- package/src/fold/subset.test.ts +38 -7
- package/src/fold/subset.ts +9 -0
- package/src/graph-ir.ts +47 -0
- package/src/index.ts +1 -0
- package/src/lexicon.ts +59 -0
- package/src/lifecycle/deep-diff.test.ts +157 -0
- package/src/lifecycle/deep-diff.ts +213 -0
- package/src/lifecycle/deep-observe.test.ts +174 -0
- package/src/lifecycle/deep-observe.ts +173 -0
- package/src/lifecycle/index.ts +3 -0
- package/src/lifecycle/observation-baseline.test.ts +99 -0
- package/src/lifecycle/observation-baseline.ts +217 -0
- package/src/lifecycle/snapshot.ts +6 -11
package/dist/lexicon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicon.d.ts","sourceRoot":"","sources":["../src/lexicon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lexicon.d.ts","sourceRoot":"","sources":["../src/lexicon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property-level live drift (#1014) — declared vs live vs accepted baseline.
|
|
3
|
+
*
|
|
4
|
+
* The thin diff (./live-diff.ts) compares whole entities on status, physical id
|
|
5
|
+
* and a few outputs. This compares their property trees, path by path, which is
|
|
6
|
+
* where a console edit actually shows up. Pure function; the reading happens in
|
|
7
|
+
* ./deep-observe.ts and the CLI.
|
|
8
|
+
*
|
|
9
|
+
* Three axes, and all three matter:
|
|
10
|
+
*
|
|
11
|
+
* - **declared** — the property tree chant synthesized, normalized with the
|
|
12
|
+
* lexicon's own hooks so it is in the same shape as the live tree.
|
|
13
|
+
* - **live** — what the provider returned, normalized with the same hooks.
|
|
14
|
+
* - **baseline** — the value somebody accepted (./observation-baseline.ts). A
|
|
15
|
+
* deviation whose live value matches the accepted value is not drift; one
|
|
16
|
+
* that has moved away from the accepted value is drift again, and the
|
|
17
|
+
* report shows all three so the reader can see what changed and from what.
|
|
18
|
+
*
|
|
19
|
+
* A path is skipped entirely when the declared value is
|
|
20
|
+
* {@link UNRESOLVED} — an unevaluated intrinsic (`Fn::Sub`, `Ref`) has no
|
|
21
|
+
* source-side value to compare, and reporting one as drift would light up every
|
|
22
|
+
* interpolated property forever.
|
|
23
|
+
*/
|
|
24
|
+
import { type DeepNormalizationHooks, type NormalizedDeepObservation } from "../deep-observation.js";
|
|
25
|
+
import type { UnobservedResource } from "./live-diff.js";
|
|
26
|
+
import { type BaselineLexicon } from "./observation-baseline.js";
|
|
27
|
+
/**
|
|
28
|
+
* How a property differs.
|
|
29
|
+
*
|
|
30
|
+
* - `changed` — declared and live both have the path, with different values.
|
|
31
|
+
* - `undeclared` — live has it, source never did. cdk-real-drift's whole reason
|
|
32
|
+
* to exist: the console-added property CloudFormation itself will not report.
|
|
33
|
+
* - `absent` — source declares it and the live tree does not carry it. Weaker
|
|
34
|
+
* than the other two: a provider that omits a property it considers unset is
|
|
35
|
+
* common, which is what the lexicon's pruning hook is for.
|
|
36
|
+
*/
|
|
37
|
+
export type PropertyDriftKind = "changed" | "undeclared" | "absent";
|
|
38
|
+
/** One property-level difference. */
|
|
39
|
+
export interface PropertyDrift {
|
|
40
|
+
/** Path within the normalized property tree (`Tags[0].Value`). */
|
|
41
|
+
path: string;
|
|
42
|
+
kind: PropertyDriftKind;
|
|
43
|
+
/** Value in source. Absent for `undeclared`. */
|
|
44
|
+
declared?: unknown;
|
|
45
|
+
/** Value in the cloud. Absent for `absent`. */
|
|
46
|
+
live?: unknown;
|
|
47
|
+
/**
|
|
48
|
+
* The accepted value from the baseline, when this path has one. Present on a
|
|
49
|
+
* reported drift too — that is the "accepted X, now Y" case, and hiding the
|
|
50
|
+
* accepted value there would lose the most useful column in the report.
|
|
51
|
+
*/
|
|
52
|
+
baseline?: unknown;
|
|
53
|
+
}
|
|
54
|
+
/** Property-level drift for one declared entity. */
|
|
55
|
+
export interface DeepEntityDrift {
|
|
56
|
+
name: string;
|
|
57
|
+
type: string;
|
|
58
|
+
changes: PropertyDrift[];
|
|
59
|
+
}
|
|
60
|
+
export interface DeepDiffResult {
|
|
61
|
+
/** Entities with at least one reportable property difference. Sorted by name. */
|
|
62
|
+
drifted: DeepEntityDrift[];
|
|
63
|
+
/**
|
|
64
|
+
* Differences suppressed by the baseline — reported separately rather than
|
|
65
|
+
* dropped, so `--json` consumers and `--update-baseline` can see what is
|
|
66
|
+
* being held back and the count never silently changes meaning.
|
|
67
|
+
*/
|
|
68
|
+
accepted: DeepEntityDrift[];
|
|
69
|
+
/** Entities whose property trees matched. Sorted. */
|
|
70
|
+
unchanged: string[];
|
|
71
|
+
/** Declared entities whose *properties* could not be read (#1089). Sorted. */
|
|
72
|
+
unobserved: UnobservedResource[];
|
|
73
|
+
/** Entities the deep reader returned that were never declared. Sorted. */
|
|
74
|
+
undeclaredEntities: string[];
|
|
75
|
+
}
|
|
76
|
+
/** A declared entity's property tree, already normalized with the lexicon's hooks. */
|
|
77
|
+
export interface DeclaredDeepEntity {
|
|
78
|
+
type: string;
|
|
79
|
+
properties: Record<string, unknown>;
|
|
80
|
+
}
|
|
81
|
+
export interface DiffDeepInput {
|
|
82
|
+
/** Normalized declared property trees, keyed by chant entity name. */
|
|
83
|
+
declared: Record<string, DeclaredDeepEntity>;
|
|
84
|
+
/** Normalized live observation, as returned by `observeResourcesDeep()`. */
|
|
85
|
+
live: NormalizedDeepObservation;
|
|
86
|
+
/** Accepted deviations for this lexicon. Omit for "nothing accepted". */
|
|
87
|
+
baseline?: BaselineLexicon;
|
|
88
|
+
/**
|
|
89
|
+
* The lexicon's hooks, so set-like arrays are addressed by key rather than by
|
|
90
|
+
* position (see `flattenDeepProperties`). Omit and paths are positional,
|
|
91
|
+
* which still diffs correctly but shifts every path after an inserted
|
|
92
|
+
* element.
|
|
93
|
+
*/
|
|
94
|
+
hooks?: DeepNormalizationHooks;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Compare declared and live property trees path by path, subtracting accepted
|
|
98
|
+
* deviations. Deterministic: every list is sorted.
|
|
99
|
+
*/
|
|
100
|
+
export declare function diffDeep(input: DiffDeepInput): DeepDiffResult;
|
|
101
|
+
/** Total reported property differences across every entity. */
|
|
102
|
+
export declare function countPropertyDrift(result: DeepDiffResult): number;
|
|
103
|
+
//# sourceMappingURL=deep-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-diff.d.ts","sourceRoot":"","sources":["../../src/lifecycle/deep-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC/B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEjF;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEpE,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,qDAAqD;IACrD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,8EAA8E;IAC9E,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,0EAA0E;IAC1E,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,sFAAsF;AACtF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7C,4EAA4E;IAC5E,IAAI,EAAE,yBAAyB,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA8F7D;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep observation orchestration (#1014) — call one lexicon's
|
|
3
|
+
* `observeResourcesDeep()`, put the declared trees in the same shape, and diff.
|
|
4
|
+
*
|
|
5
|
+
* The sibling of ./observe.ts on the thin path, and it inherits that path's
|
|
6
|
+
* rules: a reader that throws does not vanish, it reports every declared entity
|
|
7
|
+
* NOT-OBSERVED with `read-failed` (#1089); a multi-stack read merges with
|
|
8
|
+
* present > not-observed > absent. A deep read that fails is a hole with a
|
|
9
|
+
* reason, never a thin-but-clean answer.
|
|
10
|
+
*
|
|
11
|
+
* The normalization is applied here, on both sides, with the lexicon's own
|
|
12
|
+
* hooks. The reader already normalized what it returned — that is the contract
|
|
13
|
+
* — but only core can normalize the *declared* tree, and only core knows which
|
|
14
|
+
* paths exist on the other side, which is what
|
|
15
|
+
* {@link import("../deep-observation.js").DeepNode.counterpart} needs for default
|
|
16
|
+
* subtraction. Re-running the pass over an already-normalized live tree is
|
|
17
|
+
* idempotent for every hook that does not consult `counterpart`.
|
|
18
|
+
*/
|
|
19
|
+
import type { ObservationLexicon } from "../lexicon.js";
|
|
20
|
+
import { type DeepNormalizationHooks, type NormalizedDeepObservation } from "../deep-observation.js";
|
|
21
|
+
import { type DeepDiffResult } from "./deep-diff.js";
|
|
22
|
+
import type { BaselineLexicon } from "./observation-baseline.js";
|
|
23
|
+
/** Declared entities for one lexicon, in the shape the observe paths pass around. */
|
|
24
|
+
export type DeclaredEntities = Map<string, {
|
|
25
|
+
entityType: string;
|
|
26
|
+
props: Record<string, unknown>;
|
|
27
|
+
}>;
|
|
28
|
+
export interface DeepObserveOptions {
|
|
29
|
+
environment: string;
|
|
30
|
+
buildOutput: string;
|
|
31
|
+
entities: DeclaredEntities;
|
|
32
|
+
/** Deployed stack for a multi-stack project (#932). */
|
|
33
|
+
stack?: string;
|
|
34
|
+
/** Component projects deploy one stack per component; read them all and merge. */
|
|
35
|
+
componentStacks?: string[];
|
|
36
|
+
owned?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Merge several deep observations of the same lexicon (the multi-stack read).
|
|
40
|
+
* Precedence matches the thin contract: present > not-observed > absent.
|
|
41
|
+
*/
|
|
42
|
+
export declare function mergeDeepObservations(parts: Iterable<NormalizedDeepObservation>): NormalizedDeepObservation;
|
|
43
|
+
/**
|
|
44
|
+
* Read one lexicon's live property trees. Never throws: a thrown reader becomes
|
|
45
|
+
* a NOT-OBSERVED verdict for every declared entity, with the error as the
|
|
46
|
+
* detail, so the caller sees a hole rather than an empty tree that reads as
|
|
47
|
+
* "no properties drifted".
|
|
48
|
+
*/
|
|
49
|
+
export declare function observeDeep(plugin: ObservationLexicon, opts: DeepObserveOptions): Promise<NormalizedDeepObservation>;
|
|
50
|
+
/**
|
|
51
|
+
* Normalize both sides into the same shape, then diff.
|
|
52
|
+
*
|
|
53
|
+
* Split out from {@link deepDiffForLexicon} so the pure half is testable
|
|
54
|
+
* without a plugin: given declared entities, a live observation and a baseline,
|
|
55
|
+
* this is a deterministic function.
|
|
56
|
+
*/
|
|
57
|
+
export declare function diffDeepObservation(entities: DeclaredEntities, live: NormalizedDeepObservation, hooks?: DeepNormalizationHooks, baseline?: BaselineLexicon): DeepDiffResult;
|
|
58
|
+
/** Read one lexicon deeply and diff it against source and the accepted baseline. */
|
|
59
|
+
export declare function deepDiffForLexicon(plugin: ObservationLexicon, opts: DeepObserveOptions & {
|
|
60
|
+
baseline?: BaselineLexicon;
|
|
61
|
+
}): Promise<DeepDiffResult>;
|
|
62
|
+
//# sourceMappingURL=deep-observe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-observe.d.ts","sourceRoot":"","sources":["../../src/lifecycle/deep-observe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAIL,KAAK,sBAAsB,EAE3B,KAAK,yBAAyB,EAC/B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAqC,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAEnG,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GACzC,yBAAyB,CAS3B;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,yBAAyB,CAAC,CA8BpC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,yBAAyB,EAC/B,KAAK,CAAC,EAAE,sBAAsB,EAC9B,QAAQ,CAAC,EAAE,eAAe,GACzB,cAAc,CA+ChB;AAED,oFAAoF;AACpF,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,kBAAkB,GAAG;IAAE,QAAQ,CAAC,EAAE,eAAe,CAAA;CAAE,GACxD,OAAO,CAAC,cAAc,CAAC,CAGzB"}
|
|
@@ -3,6 +3,9 @@ export * from "./git.js";
|
|
|
3
3
|
export * from "./digest.js";
|
|
4
4
|
export * from "./snapshot.js";
|
|
5
5
|
export * from "./live-diff.js";
|
|
6
|
+
export * from "./deep-diff.js";
|
|
7
|
+
export * from "./deep-observe.js";
|
|
8
|
+
export * from "./observation-baseline.js";
|
|
6
9
|
export * from "./change-set.js";
|
|
7
10
|
export * from "./affected.js";
|
|
8
11
|
export * from "./release-ledger.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The accepted-observation baseline (#1014) — a committed record of deviations
|
|
3
|
+
* somebody looked at and accepted, so they stop re-alerting.
|
|
4
|
+
*
|
|
5
|
+
* Deep observation reports every property that differs between source and
|
|
6
|
+
* cloud, including properties nobody ever declared. Some of those are real
|
|
7
|
+
* findings. Many are permanent facts of the account — a platform team's
|
|
8
|
+
* mandatory tag, a bucket setting an org policy flips on, a role an operator
|
|
9
|
+
* attached by hand and everyone agreed to keep. Without somewhere to record
|
|
10
|
+
* "yes, we know, leave it", a deep diff is a report nobody reads twice.
|
|
11
|
+
*
|
|
12
|
+
* The model is cdk-real-drift's `.cdkrd`: a snapshot of accepted *undeclared*
|
|
13
|
+
* values that the diff subtracts. Accepting is an explicit act with a git
|
|
14
|
+
* commit behind it, and the acceptance is value-bound — accept
|
|
15
|
+
* `VersioningConfiguration.Status = Enabled` and a later change to `Suspended`
|
|
16
|
+
* is drift again, because what was accepted was that value, not that path.
|
|
17
|
+
*
|
|
18
|
+
* ## What this is not
|
|
19
|
+
*
|
|
20
|
+
* Not state. The baseline never tells a deploy what to do and is never read on
|
|
21
|
+
* the write path; deleting it costs you noise suppression and nothing else.
|
|
22
|
+
* Which is also why it is safe for it to be incomplete or stale.
|
|
23
|
+
*
|
|
24
|
+
* ## Where it lives
|
|
25
|
+
*
|
|
26
|
+
* `<environment>/observation-baseline.json` on the `chant/lifecycle` orphan
|
|
27
|
+
* branch — the epic's named candidate home, and the same storage the snapshots
|
|
28
|
+
* (`<env>/<lexicon>.json`), the release ledger (`<env>/releases.jsonl`) and the
|
|
29
|
+
* build archive (`_builds/<digest>.json`) already use, through the same
|
|
30
|
+
* `writeBlobToPath`/`readBlobFromPath` plumbing. One env-keyed namespace for
|
|
31
|
+
* everything chant records *about* an environment rather than *for* it.
|
|
32
|
+
*
|
|
33
|
+
* The parse/serialize/update half below is pure and storage-free, so the
|
|
34
|
+
* decision is one function call deep if a repo-committed file (`.chant/`) turns
|
|
35
|
+
* out to be the better review surface.
|
|
36
|
+
*/
|
|
37
|
+
/** The file name under `<environment>/` on the orphan branch. */
|
|
38
|
+
export declare const OBSERVATION_BASELINE_FILE = "observation-baseline.json";
|
|
39
|
+
/** One deviation somebody accepted, bound to the value they accepted. */
|
|
40
|
+
export interface AcceptedDeviation {
|
|
41
|
+
/** Property path within the entity's normalized tree (`Tags[0].Value`, `Policy.Statement[1].Effect`). */
|
|
42
|
+
path: string;
|
|
43
|
+
/** The live value at the moment of acceptance. A different live value later is drift again. */
|
|
44
|
+
value: unknown;
|
|
45
|
+
/** Free-text justification, written by whoever accepted it. */
|
|
46
|
+
note?: string;
|
|
47
|
+
/** ISO timestamp of acceptance. */
|
|
48
|
+
recordedAt?: string;
|
|
49
|
+
}
|
|
50
|
+
/** Every accepted deviation for one declared entity. */
|
|
51
|
+
export interface BaselineEntity {
|
|
52
|
+
/** Entity type at acceptance time, for readability in the committed file. */
|
|
53
|
+
type?: string;
|
|
54
|
+
accepted: AcceptedDeviation[];
|
|
55
|
+
}
|
|
56
|
+
/** Accepted deviations for one lexicon, keyed by chant entity name. */
|
|
57
|
+
export type BaselineLexicon = Record<string, BaselineEntity>;
|
|
58
|
+
/** The committed baseline document for one environment. */
|
|
59
|
+
export interface ObservationBaseline {
|
|
60
|
+
/** Discriminant + wire version. */
|
|
61
|
+
readonly baseline: "v1";
|
|
62
|
+
environment: string;
|
|
63
|
+
/** ISO timestamp of the last `--update-baseline`. */
|
|
64
|
+
updated?: string;
|
|
65
|
+
/** lexicon → entity → accepted deviations. */
|
|
66
|
+
lexicons: Record<string, BaselineLexicon>;
|
|
67
|
+
}
|
|
68
|
+
/** An environment with nothing accepted yet. */
|
|
69
|
+
export declare function emptyBaseline(environment: string): ObservationBaseline;
|
|
70
|
+
/** True when `value` is a well-formed {@link ObservationBaseline}. */
|
|
71
|
+
export declare function isObservationBaseline(value: unknown): value is ObservationBaseline;
|
|
72
|
+
/**
|
|
73
|
+
* Parse a baseline document. Returns `null` for unparseable or unrecognized
|
|
74
|
+
* content — a corrupt baseline degrades to "nothing is accepted", which is
|
|
75
|
+
* noisy but never wrong. Silently treating garbage as a baseline would
|
|
76
|
+
* suppress real drift.
|
|
77
|
+
*/
|
|
78
|
+
export declare function parseBaseline(content: string | null | undefined): ObservationBaseline | null;
|
|
79
|
+
/** Deterministic on-disk form: sorted keys, trailing newline, reviewable diff. */
|
|
80
|
+
export declare function serializeBaseline(baseline: ObservationBaseline): string;
|
|
81
|
+
/** The accepted deviations for one lexicon, or an empty map. */
|
|
82
|
+
export declare function baselineForLexicon(baseline: ObservationBaseline | null | undefined, lexicon: string): BaselineLexicon;
|
|
83
|
+
/** Look up one accepted deviation by entity + path. */
|
|
84
|
+
export declare function acceptedDeviation(lexiconBaseline: BaselineLexicon, entity: string, path: string): AcceptedDeviation | undefined;
|
|
85
|
+
/** One deviation to record as accepted. */
|
|
86
|
+
export interface DeviationToAccept {
|
|
87
|
+
entity: string;
|
|
88
|
+
type?: string;
|
|
89
|
+
path: string;
|
|
90
|
+
/** The live value being accepted. */
|
|
91
|
+
value: unknown;
|
|
92
|
+
note?: string;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Record deviations as accepted, returning a new baseline (the input is not
|
|
96
|
+
* mutated). An existing acceptance for the same entity+path is replaced — that
|
|
97
|
+
* is how re-accepting after a deliberate change works, and it keeps the file
|
|
98
|
+
* from growing a second entry for every value a path has ever held.
|
|
99
|
+
*/
|
|
100
|
+
export declare function acceptDeviations(baseline: ObservationBaseline, lexicon: string, deviations: readonly DeviationToAccept[], opts?: {
|
|
101
|
+
now?: string;
|
|
102
|
+
}): ObservationBaseline;
|
|
103
|
+
/** Total accepted deviations across every lexicon — for the "N accepted" line. */
|
|
104
|
+
export declare function countAccepted(baseline: ObservationBaseline | null | undefined): number;
|
|
105
|
+
/**
|
|
106
|
+
* Read the accepted baseline for an environment. Returns `null` when the branch,
|
|
107
|
+
* the environment, or the file does not exist — every one of which means
|
|
108
|
+
* "nothing accepted yet", the normal state before anyone runs
|
|
109
|
+
* `--update-baseline`.
|
|
110
|
+
*/
|
|
111
|
+
export declare function readObservationBaseline(environment: string, opts?: {
|
|
112
|
+
cwd?: string;
|
|
113
|
+
}): Promise<ObservationBaseline | null>;
|
|
114
|
+
/** Write the accepted baseline to the orphan branch. Returns the new commit SHA. */
|
|
115
|
+
export declare function writeObservationBaseline(baseline: ObservationBaseline, opts?: {
|
|
116
|
+
cwd?: string;
|
|
117
|
+
}): Promise<string>;
|
|
118
|
+
//# sourceMappingURL=observation-baseline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observation-baseline.d.ts","sourceRoot":"","sources":["../../src/lifecycle/observation-baseline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/lifecycle/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAsC,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/lifecycle/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAsC,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA6DjD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,kBAAkB,EAAE,EAC7B,WAAW,EAAE,WAAW,EACxB,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC,OAAO,CAAC,kBAAkB,CAAC,CA0I7B"}
|
package/package.json
CHANGED
|
@@ -19,8 +19,10 @@ vi.mock("../commands/lint", () => ({
|
|
|
19
19
|
}));
|
|
20
20
|
|
|
21
21
|
const componentGraphMock = vi.fn();
|
|
22
|
+
const generatePipelineMock = vi.fn();
|
|
22
23
|
vi.mock("../../components/cli-support", () => ({
|
|
23
24
|
computeComponentGraph: () => componentGraphMock(),
|
|
25
|
+
generateComponentsPipeline: (...a: unknown[]) => generatePipelineMock(...a),
|
|
24
26
|
}));
|
|
25
27
|
|
|
26
28
|
// Avoid running a real layout engine in tests; the format dispatch + size/engine
|
|
@@ -106,6 +108,7 @@ describe("runGraph", () => {
|
|
|
106
108
|
lintMock.mockReset();
|
|
107
109
|
layoutMock.mockReset();
|
|
108
110
|
componentGraphMock.mockReset();
|
|
111
|
+
generatePipelineMock.mockReset();
|
|
109
112
|
discoverComponentsMock.mockReset();
|
|
110
113
|
// Default: no components — the single-stack --live path most tests exercise.
|
|
111
114
|
discoverComponentsMock.mockResolvedValue({ components: new Map(), sourceFiles: [], errors: [] });
|
|
@@ -325,6 +328,89 @@ describe("runGraph", () => {
|
|
|
325
328
|
expect(exit).toBe(1);
|
|
326
329
|
expect(stderrBuf.join("\n")).toContain("cycle: a ↔ b");
|
|
327
330
|
});
|
|
331
|
+
|
|
332
|
+
describe("CI/pipeline projection (--projection, #989)", () => {
|
|
333
|
+
test("rejects --projection without --components --format ir", async () => {
|
|
334
|
+
const exit = await runGraph({ args: makeArgs({ projection: "gitlab" }), plugins: [], serializers: [] });
|
|
335
|
+
expect(exit).toBe(1);
|
|
336
|
+
expect(stderrBuf.join("\n")).toMatch(/--projection needs --components --format ir/);
|
|
337
|
+
expect(componentGraphMock).not.toHaveBeenCalled();
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
test("rejects --projection with --components --format mermaid", async () => {
|
|
341
|
+
const exit = await runGraph({
|
|
342
|
+
args: makeArgs({ projection: "gitlab", components: true, format: "mermaid" }),
|
|
343
|
+
plugins: [],
|
|
344
|
+
serializers: [],
|
|
345
|
+
});
|
|
346
|
+
expect(exit).toBe(1);
|
|
347
|
+
expect(stderrBuf.join("\n")).toMatch(/--projection needs --components --format ir/);
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
test("--components --format ir --projection gitlab adds ir.pipeline, reusing generateComponentsPipeline", async () => {
|
|
351
|
+
lintMock.mockResolvedValue({ success: true });
|
|
352
|
+
componentGraphClean();
|
|
353
|
+
generatePipelineMock.mockResolvedValue({
|
|
354
|
+
success: true,
|
|
355
|
+
stages: ["wave-1", "wave-2", "wave-3"],
|
|
356
|
+
jobs: [
|
|
357
|
+
{ jobName: "shared-foundation", component: "shared-foundation", stage: "wave-1", needs: [] },
|
|
358
|
+
{ jobName: "loom-db", component: "loom-db", stage: "wave-2", needs: ["shared-foundation"] },
|
|
359
|
+
{ jobName: "loom-backend", component: "loom-backend", stage: "wave-3", needs: ["loom-db"] },
|
|
360
|
+
],
|
|
361
|
+
yaml: "stages: [...]\n",
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
const exit = await runGraph({
|
|
365
|
+
args: makeArgs({ format: "ir", components: true, projection: "gitlab" }),
|
|
366
|
+
plugins: [],
|
|
367
|
+
serializers: [],
|
|
368
|
+
});
|
|
369
|
+
expect(exit).toBe(0);
|
|
370
|
+
|
|
371
|
+
// Reuses the same generator `build --components --generate` calls —
|
|
372
|
+
// never re-derives stages/jobs/needs itself.
|
|
373
|
+
expect(generatePipelineMock).toHaveBeenCalledWith(expect.any(String), "gitlab", undefined, undefined);
|
|
374
|
+
|
|
375
|
+
const ir = JSON.parse(stdoutBuf.join("\n"));
|
|
376
|
+
// The component graph itself is untouched by the projection.
|
|
377
|
+
expect(ir.nodes.map((n: { id: string }) => n.id)).toEqual(["shared-foundation", "loom-db", "loom-backend"]);
|
|
378
|
+
expect(ir.groups.byWave["wave-2"]).toEqual(["loom-db"]);
|
|
379
|
+
|
|
380
|
+
// The CI/pipeline projection sits alongside it as first-class IR nodes/edges.
|
|
381
|
+
expect(ir.pipeline.provider).toBe("gitlab");
|
|
382
|
+
expect(ir.pipeline.stages).toEqual(["wave-1", "wave-2", "wave-3"]);
|
|
383
|
+
expect(ir.pipeline.nodes).toEqual([
|
|
384
|
+
{ id: "shared-foundation", kind: "CIJob", component: "shared-foundation", stage: "wave-1" },
|
|
385
|
+
{ id: "loom-db", kind: "CIJob", component: "loom-db", stage: "wave-2" },
|
|
386
|
+
{ id: "loom-backend", kind: "CIJob", component: "loom-backend", stage: "wave-3" },
|
|
387
|
+
]);
|
|
388
|
+
// `needs:` edges, consumer job → producer job (mirrors the component
|
|
389
|
+
// graph's consumer → producer convention).
|
|
390
|
+
expect(ir.pipeline.edges).toEqual([
|
|
391
|
+
{ from: "loom-db", to: "shared-foundation", kind: "needs" },
|
|
392
|
+
{ from: "loom-backend", to: "loom-db", kind: "needs" },
|
|
393
|
+
]);
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
test("an unsupported --projection lexicon fails the whole graph command", async () => {
|
|
397
|
+
lintMock.mockResolvedValue({ success: true });
|
|
398
|
+
componentGraphClean();
|
|
399
|
+
generatePipelineMock.mockResolvedValue({
|
|
400
|
+
success: false,
|
|
401
|
+
error: 'Lexicon "bogus" does not support generate mode (no generateComponentPipeline).',
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
const exit = await runGraph({
|
|
405
|
+
args: makeArgs({ format: "ir", components: true, projection: "bogus" }),
|
|
406
|
+
plugins: [],
|
|
407
|
+
serializers: [],
|
|
408
|
+
});
|
|
409
|
+
expect(exit).toBe(1);
|
|
410
|
+
expect(stderrBuf.join("\n")).toContain("does not support generate mode");
|
|
411
|
+
expect(stdoutBuf.join("\n")).toBe("");
|
|
412
|
+
});
|
|
413
|
+
});
|
|
328
414
|
});
|
|
329
415
|
|
|
330
416
|
describe("live graph (--live)", () => {
|
|
@@ -2,7 +2,7 @@ import { resolve } from "node:path";
|
|
|
2
2
|
import { discoverOps } from "../../op/discover";
|
|
3
3
|
import { discover } from "../../discovery/index";
|
|
4
4
|
import { partitionByLexicon, computeStackGraph, build } from "../../build";
|
|
5
|
-
import { buildGraphIr, buildLiveGraphIr, collectUnobserved, overlayGraphs, sourceOverlayGraphs, type GraphIR, type LiveObservation } from "../../graph-ir";
|
|
5
|
+
import { buildGraphIr, buildLiveGraphIr, collectUnobserved, overlayGraphs, sourceOverlayGraphs, type GraphIR, type IRPipeline, type LiveObservation } from "../../graph-ir";
|
|
6
6
|
import { reconstructEdges, mergeCatalogs, containmentGroups, type ReferenceCatalog, type ContainmentPair } from "../../graph-refs";
|
|
7
7
|
import { observeResources } from "../../lifecycle/observe";
|
|
8
8
|
import { loadChantConfig, environmentNames } from "../../config";
|
|
@@ -17,7 +17,7 @@ import { loadPlugins, resolveProjectLexicons } from "../plugins";
|
|
|
17
17
|
import { readFileSync } from "node:fs";
|
|
18
18
|
import { formatError, formatWarning, formatBold } from "../format";
|
|
19
19
|
import type { CommandContext } from "../registry";
|
|
20
|
-
import { computeComponentGraph } from "../../components/cli-support";
|
|
20
|
+
import { computeComponentGraph, generateComponentsPipeline } from "../../components/cli-support";
|
|
21
21
|
import { discoverComponents } from "../../components/discover";
|
|
22
22
|
import { cfnDeployStacks } from "./components";
|
|
23
23
|
|
|
@@ -34,6 +34,18 @@ import { cfnDeployStacks } from "./components";
|
|
|
34
34
|
export async function runGraph(ctx: CommandContext): Promise<number> {
|
|
35
35
|
const viewFormats = ["ir", "mermaid", "dot", "layout"] as const;
|
|
36
36
|
const isViewFormat = (viewFormats as readonly string[]).includes(ctx.args.format);
|
|
37
|
+
// `--projection <lexicon>` (#989) only means anything for the component
|
|
38
|
+
// graph's IR — it adds the CI/pipeline shape to `GraphIR.pipeline`, a field
|
|
39
|
+
// the other view formats' emitters (mermaid/dot/layout) don't read, and the
|
|
40
|
+
// plain (non-`--format`) `--components` text/`--json` modes don't build an
|
|
41
|
+
// IR at all. Reject every other combination up front rather than silently
|
|
42
|
+
// ignoring the flag.
|
|
43
|
+
if (ctx.args.projection && !(ctx.args.components && ctx.args.format === "ir")) {
|
|
44
|
+
console.error(formatError({
|
|
45
|
+
message: "--projection needs --components --format ir — the CI/pipeline projection extends the component-graph IR, the only mode that carries it.",
|
|
46
|
+
}));
|
|
47
|
+
return 1;
|
|
48
|
+
}
|
|
37
49
|
// `--live` graphs the provisioned (observed) infrastructure, not the declared
|
|
38
50
|
// source (epic #776). It only makes sense as a view format; default to `ir`.
|
|
39
51
|
if (ctx.args.live) {
|
|
@@ -281,6 +293,15 @@ async function runComponentGraph(ctx: CommandContext): Promise<number> {
|
|
|
281
293
|
* the CI pipeline. Distinct from `runGraphView`, which emits the AWS *entity*
|
|
282
294
|
* graph — the component projection has one node per component, not per resource.
|
|
283
295
|
*
|
|
296
|
+
* `--projection <lexicon>` (#989, `--format ir` only — validated in `runGraph`)
|
|
297
|
+
* adds the **CI/pipeline projection** alongside this component graph:
|
|
298
|
+
* `ir.pipeline` carries the stages/jobs/`needs` `<lexicon>`'s
|
|
299
|
+
* `generateComponentPipeline` synthesizes for `chant build --components
|
|
300
|
+
* --generate <lexicon>` (`generateComponentsPipeline`, ../../components/cli-support.ts)
|
|
301
|
+
* — reused wholesale, not re-derived, so a consumer (e.g. behold, epic #492/
|
|
302
|
+
* INTENTIUS/behold#54) gets the pipeline shape as first-class IR nodes/edges
|
|
303
|
+
* instead of re-deriving it from `dependsOn` or parsing generated CI YAML.
|
|
304
|
+
*
|
|
284
305
|
* Lint-gated like the entity view: the DAG stands for deployable source, so we
|
|
285
306
|
* refuse to emit it for source that does not pass lint.
|
|
286
307
|
*/
|
|
@@ -312,7 +333,7 @@ async function runComponentGraphView(
|
|
|
312
333
|
const waveOf = new Map<string, number>();
|
|
313
334
|
graph.waves.forEach((wave, i) => wave.forEach((name) => waveOf.set(name, i + 1)));
|
|
314
335
|
|
|
315
|
-
|
|
336
|
+
let ir: GraphIR = {
|
|
316
337
|
nodes: graph.order.map((name) => ({
|
|
317
338
|
id: name,
|
|
318
339
|
kind: "Component",
|
|
@@ -327,9 +348,49 @@ async function runComponentGraphView(
|
|
|
327
348
|
},
|
|
328
349
|
};
|
|
329
350
|
|
|
351
|
+
if (ctx.args.projection) {
|
|
352
|
+
const pipeline = await buildPipelineProjection(projectPath, ctx.args.projection, ctx.args.sandbox);
|
|
353
|
+
if (!pipeline.success) {
|
|
354
|
+
console.error(formatError({ message: pipeline.error ?? `Failed to generate ${ctx.args.projection} pipeline projection` }));
|
|
355
|
+
return 1;
|
|
356
|
+
}
|
|
357
|
+
ir = { ...ir, pipeline: pipeline.pipeline };
|
|
358
|
+
}
|
|
359
|
+
|
|
330
360
|
return emitIr(ir, ctx, format);
|
|
331
361
|
}
|
|
332
362
|
|
|
363
|
+
/**
|
|
364
|
+
* Reshape `generateComponentsPipeline`'s result (../../components/cli-support.ts
|
|
365
|
+
* — the exact function `chant build --components --generate <lexicon>` calls)
|
|
366
|
+
* into the IR's `IRPipeline` vocabulary (#989): one `IRPipelineNode` per
|
|
367
|
+
* generated CI job, one `IRPipelineEdge` per `needs:` dependency (consumer job
|
|
368
|
+
* → producer job, mirroring the component edges' consumer → producer
|
|
369
|
+
* direction). Every shape decision — job naming, one stage per wave,
|
|
370
|
+
* dependency resolution — stays owned by `lexicon`'s `generateComponentPipeline`;
|
|
371
|
+
* this only relabels its `{ stages, jobs }` output as IR nodes/edges, it never
|
|
372
|
+
* re-derives the graph.
|
|
373
|
+
*/
|
|
374
|
+
async function buildPipelineProjection(
|
|
375
|
+
projectPath: string,
|
|
376
|
+
lexicon: string,
|
|
377
|
+
sandbox?: boolean,
|
|
378
|
+
): Promise<{ success: true; pipeline: IRPipeline } | { success: false; error?: string }> {
|
|
379
|
+
const result = await generateComponentsPipeline(projectPath, lexicon, undefined, sandbox);
|
|
380
|
+
if (!result.success) return { success: false, error: result.error };
|
|
381
|
+
|
|
382
|
+
const jobs = result.jobs ?? [];
|
|
383
|
+
return {
|
|
384
|
+
success: true,
|
|
385
|
+
pipeline: {
|
|
386
|
+
provider: lexicon,
|
|
387
|
+
stages: result.stages ?? [],
|
|
388
|
+
nodes: jobs.map((j) => ({ id: j.jobName, kind: "CIJob" as const, component: j.component, stage: j.stage })),
|
|
389
|
+
edges: jobs.flatMap((j) => j.needs.map((dep) => ({ from: j.jobName, to: dep, kind: "needs" as const }))),
|
|
390
|
+
},
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
|
|
333
394
|
/**
|
|
334
395
|
* `chant graph --format ir|mermaid|dot|layout` — build the graph IR (honouring
|
|
335
396
|
* `--detail`) and emit it as JSON, a Mermaid flowchart, Graphviz DOT, or node
|