@intentius/chant 0.29.0 → 0.31.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/codegen/generate.d.ts +16 -0
- package/dist/codegen/generate.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/kubectl-context.d.ts +18 -1
- package/dist/kubectl-context.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/codegen/generate.ts +25 -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/kubectl-context.ts +22 -2
- 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
CHANGED
|
@@ -12,8 +12,10 @@ import type { EmulatorCapability } from "./op/emulator-lifecycle.js";
|
|
|
12
12
|
import type { RuleMeta } from "./audit/catalog.js";
|
|
13
13
|
import type { ReferenceCatalog } from "./graph-refs.js";
|
|
14
14
|
import type { DescribeResourcesResult } from "./observation.js";
|
|
15
|
+
import type { DeepNormalizationHooks, DeepObservationResult } from "./deep-observation.js";
|
|
15
16
|
export type { ReferenceCatalog, IdentityRule, RefRule } from "./graph-refs.js";
|
|
16
17
|
export type { DescribeResourcesResult, ObservationResult, NormalizedObservation, UnobservedEntity, UnobservedReason, } from "./observation.js";
|
|
18
|
+
export type { DeepObservationResult, DeepResourceObservation, NormalizedDeepObservation, DeepNormalizationHooks, DeepNode, DeepArrayElement, DeepSide, } from "./deep-observation.js";
|
|
17
19
|
/**
|
|
18
20
|
* Manifest for a packaged lexicon — metadata embedded in the tarball.
|
|
19
21
|
*
|
|
@@ -515,6 +517,51 @@ export interface LexiconPlugin {
|
|
|
515
517
|
*/
|
|
516
518
|
owned?: boolean;
|
|
517
519
|
}): Promise<DescribeResourcesResult>;
|
|
520
|
+
/**
|
|
521
|
+
* Read the full live *property tree* for each declared entity (#1014). Opt-in,
|
|
522
|
+
* and strictly deeper than {@link describeResources}, which reports existence
|
|
523
|
+
* plus a handful of scrubbed outputs. A lexicon that implements neither, or
|
|
524
|
+
* only the thin one, is unaffected — `lifecycle diff --live` gains
|
|
525
|
+
* property-level entries only where this exists.
|
|
526
|
+
*
|
|
527
|
+
* The result is keyed by chant entity name, exactly like the thin read, and
|
|
528
|
+
* carries the same NOT-OBSERVED map. That is the composition rule with #1089:
|
|
529
|
+
* a deep read that fails for one entity says so with a total
|
|
530
|
+
* {@link UnobservedReason}. It never returns a thin-but-clean tree, because a
|
|
531
|
+
* clean tree is a claim that nothing drifted.
|
|
532
|
+
*
|
|
533
|
+
* Properties must be normalized before they are returned — run
|
|
534
|
+
* `normalizeDeepProperties` (../deep-observation.ts) with this lexicon's own
|
|
535
|
+
* {@link deepNormalizationHooks}, so the trees a consumer sees are already
|
|
536
|
+
* free of arns, timestamps, status subtrees and unstable orderings.
|
|
537
|
+
*
|
|
538
|
+
* Throwing is the whole-lexicon failure, same as the thin read: core turns it
|
|
539
|
+
* into `read-failed` for every declared entity.
|
|
540
|
+
*/
|
|
541
|
+
observeResourcesDeep?(options: {
|
|
542
|
+
environment: string;
|
|
543
|
+
buildOutput: string;
|
|
544
|
+
entityNames: string[];
|
|
545
|
+
entities: Map<string, {
|
|
546
|
+
entityType: string;
|
|
547
|
+
props: Record<string, unknown>;
|
|
548
|
+
}>;
|
|
549
|
+
/** Deployed stack to observe, for a multi-stack project (see `stacks` in {@link ChantConfig}). */
|
|
550
|
+
stack?: string;
|
|
551
|
+
/** Restrict to chant-owned resources (#119). A lexicon with no marker channel on this path says so. */
|
|
552
|
+
owned?: boolean;
|
|
553
|
+
}): Promise<DeepObservationResult>;
|
|
554
|
+
/**
|
|
555
|
+
* This lexicon's noise rules for deep observation (#1014): which fields are
|
|
556
|
+
* read-only / server-populated / controller-managed / provider-defaulted, and
|
|
557
|
+
* which arrays are sets. Data, not a method — core applies the same rules to
|
|
558
|
+
* the *declared* tree, which no reader ever touches, and the two sides have
|
|
559
|
+
* to be normalized identically to be comparable.
|
|
560
|
+
*
|
|
561
|
+
* Ships alongside {@link observeResourcesDeep}; a reader without hooks
|
|
562
|
+
* produces a diff made almost entirely of noise.
|
|
563
|
+
*/
|
|
564
|
+
deepNormalizationHooks?: DeepNormalizationHooks;
|
|
518
565
|
/**
|
|
519
566
|
* Report the live status of one deploy unit by its deployed name. Opt-in.
|
|
520
567
|
*
|
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)", () => {
|