@codyswann/lisa 2.294.0 → 2.295.1
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/gate-commands.d.ts +1 -3
- package/dist/cli/gate-commands.d.ts.map +1 -1
- package/dist/cli/gate-commands.js +0 -26
- package/dist/cli/gate-commands.js.map +1 -1
- package/dist/cli/index.d.ts +7 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +43 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/update-check.d.ts +0 -8
- package/dist/cli/update-check.d.ts.map +1 -1
- package/dist/cli/update-check.js +2 -4
- package/dist/cli/update-check.js.map +1 -1
- package/dist/core/project-config.d.ts +0 -3
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +40 -4
- package/dist/core/project-config.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +2 -28
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/sync/registry.d.ts.map +1 -1
- package/dist/sync/registry.js +6 -3
- package/dist/sync/registry.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/rules/eager/config-resolution.md +0 -9
- package/plugins/lisa/rules/reference/config-resolution.md +0 -59
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/rules/eager/config-resolution.md +0 -9
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +0 -59
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +0 -59
- package/plugins/lisa-cursor/rules/config-resolution.mdc +0 -9
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/rules/eager/config-resolution.md +0 -9
- package/plugins/src/base/rules/reference/config-resolution.md +0 -59
- package/dist/cli/deploy-status-adapter-github.d.ts +0 -20
- package/dist/cli/deploy-status-adapter-github.d.ts.map +0 -1
- package/dist/cli/deploy-status-adapter-github.js +0 -167
- package/dist/cli/deploy-status-adapter-github.js.map +0 -1
- package/dist/cli/deploy-status-adapter-jira.d.ts +0 -18
- package/dist/cli/deploy-status-adapter-jira.d.ts.map +0 -1
- package/dist/cli/deploy-status-adapter-jira.js +0 -215
- package/dist/cli/deploy-status-adapter-jira.js.map +0 -1
- package/dist/cli/deploy-status-adapter-linear.d.ts +0 -16
- package/dist/cli/deploy-status-adapter-linear.d.ts.map +0 -1
- package/dist/cli/deploy-status-adapter-linear.js +0 -204
- package/dist/cli/deploy-status-adapter-linear.js.map +0 -1
- package/dist/cli/deploy-status-adapter-shared.d.ts +0 -57
- package/dist/cli/deploy-status-adapter-shared.d.ts.map +0 -1
- package/dist/cli/deploy-status-adapter-shared.js +0 -62
- package/dist/cli/deploy-status-adapter-shared.js.map +0 -1
- package/dist/cli/deploy-status-adapter.d.ts +0 -49
- package/dist/cli/deploy-status-adapter.d.ts.map +0 -1
- package/dist/cli/deploy-status-adapter.js +0 -87
- package/dist/cli/deploy-status-adapter.js.map +0 -1
- package/dist/cli/deploy-status-refs.d.ts +0 -70
- package/dist/cli/deploy-status-refs.d.ts.map +0 -1
- package/dist/cli/deploy-status-refs.js +0 -195
- package/dist/cli/deploy-status-refs.js.map +0 -1
- package/dist/cli/deploy-status-sync-cmd.d.ts +0 -23
- package/dist/cli/deploy-status-sync-cmd.d.ts.map +0 -1
- package/dist/cli/deploy-status-sync-cmd.js +0 -75
- package/dist/cli/deploy-status-sync-cmd.js.map +0 -1
- package/dist/cli/deploy-status-sync-engine.d.ts +0 -49
- package/dist/cli/deploy-status-sync-engine.d.ts.map +0 -1
- package/dist/cli/deploy-status-sync-engine.js +0 -214
- package/dist/cli/deploy-status-sync-engine.js.map +0 -1
- package/dist/cli/deploy-status-sync-exec.d.ts +0 -73
- package/dist/cli/deploy-status-sync-exec.d.ts.map +0 -1
- package/dist/cli/deploy-status-sync-exec.js +0 -95
- package/dist/cli/deploy-status-sync-exec.js.map +0 -1
- package/dist/cli/kane-commands.d.ts +0 -21
- package/dist/cli/kane-commands.d.ts.map +0 -1
- package/dist/cli/kane-commands.js +0 -44
- package/dist/cli/kane-commands.js.map +0 -1
- package/dist/core/config-field-validation.d.ts +0 -19
- package/dist/core/config-field-validation.d.ts.map +0 -1
- package/dist/core/config-field-validation.js +0 -69
- package/dist/core/config-field-validation.js.map +0 -1
- package/dist/core/deploy-status-sync.d.ts +0 -103
- package/dist/core/deploy-status-sync.d.ts.map +0 -1
- package/dist/core/deploy-status-sync.js +0 -339
- package/dist/core/deploy-status-sync.js.map +0 -1
- package/dist/core/deploy-status-transition.d.ts +0 -97
- package/dist/core/deploy-status-transition.d.ts.map +0 -1
- package/dist/core/deploy-status-transition.js +0 -134
- package/dist/core/deploy-status-transition.js.map +0 -1
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure transition planner for deploy-status-sync (DSS-2).
|
|
3
|
-
*
|
|
4
|
-
* Given the resolved deploy ladder, a target environment, and the fetched
|
|
5
|
-
* tracker item states, decide — with zero IO — what should happen to each
|
|
6
|
-
* item: promote to the rung's done status (closing natively only at the
|
|
7
|
-
* universe's terminal env), skip items at-or-beyond the rung (never moving
|
|
8
|
-
* anything backward), skip containers per `leaf-only-lifecycle`, and turn an
|
|
9
|
-
* unconfigured environment into an explanatory no-op naming the exact
|
|
10
|
-
* missing config key. All status vocabulary is config-sourced via the DSS-1
|
|
11
|
-
* resolver's ladder; this module never invents status names.
|
|
12
|
-
* @module core/deploy-status-transition
|
|
13
|
-
*/
|
|
14
|
-
import { doneMapPath, } from "./deploy-status-sync.js";
|
|
15
|
-
/** Marker prefixing every managed comment the engine writes. */
|
|
16
|
-
export const DEPLOY_STATUS_SYNC_MARKER = "[lisa-deploy-status-sync]";
|
|
17
|
-
const PROD_SPELLINGS = new Set(["prod", "production"]);
|
|
18
|
-
/**
|
|
19
|
-
* Find the ladder rung for an environment, honoring the sole
|
|
20
|
-
* `prod` ↔ `production` alias (a ladder built from `branches.prod` may be
|
|
21
|
-
* addressed as `production` and vice versa).
|
|
22
|
-
* @param ladder - Resolved deploy ladder
|
|
23
|
-
* @param env - Requested environment name
|
|
24
|
-
* @returns The matching rung, or undefined when unconfigured
|
|
25
|
-
*/
|
|
26
|
-
function findRung(ladder, env) {
|
|
27
|
-
const exact = ladder.rungs.find(rung => rung.env === env);
|
|
28
|
-
if (exact !== undefined || !PROD_SPELLINGS.has(env))
|
|
29
|
-
return exact;
|
|
30
|
-
return ladder.rungs.find(rung => PROD_SPELLINGS.has(rung.env));
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Build the deterministic promotion comment body. No timestamps — a re-run
|
|
34
|
-
* of the same event must produce a byte-identical body so the managed
|
|
35
|
-
* comment upsert resolves to `unchanged` with zero edit calls.
|
|
36
|
-
* @param input - Planner input (env, branch, head)
|
|
37
|
-
* @param rung - Target rung
|
|
38
|
-
* @param close - Whether terminal closure applies
|
|
39
|
-
* @returns Marker-prefixed comment body
|
|
40
|
-
*/
|
|
41
|
-
function promotionBody(input, rung, close) {
|
|
42
|
-
const closure = close
|
|
43
|
-
? "\nTerminal environment reached; item closed natively (leaf-only-lifecycle)."
|
|
44
|
-
: "";
|
|
45
|
-
return `${DEPLOY_STATUS_SYNC_MARKER}\nDeploy status sync: "${input.env}" deploy of branch "${input.branch}" (head ${input.headSha}) → "${rung.doneStatus}".${closure}`;
|
|
46
|
-
}
|
|
47
|
-
/** Deterministic rollup body for skipped containers (env-independent). */
|
|
48
|
-
const CONTAINER_ROLLUP_BODY = `${DEPLOY_STATUS_SYNC_MARKER}\nRollup: container skipped per leaf-only-lifecycle — containers are never transitioned by deploy events; leaf items advance individually.`;
|
|
49
|
-
/**
|
|
50
|
-
* Whether an item is a container (epic-typed or has open children), per the
|
|
51
|
-
* assertLeaf semantics of the work-item contract.
|
|
52
|
-
* @param item - Fetched item state
|
|
53
|
-
* @returns True when the item must not be transitioned
|
|
54
|
-
*/
|
|
55
|
-
function isContainer(item) {
|
|
56
|
-
const normalizedType = (item.type ?? "")
|
|
57
|
-
.replace(/^type:/i, "")
|
|
58
|
-
.trim()
|
|
59
|
-
.toLowerCase();
|
|
60
|
-
return normalizedType === "epic" || item.openChildren > 0;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Plan the action for one item against the target rung.
|
|
64
|
-
* @param item - Fetched item state
|
|
65
|
-
* @param input - Planner input
|
|
66
|
-
* @param rung - Target rung
|
|
67
|
-
* @param close - Whether terminal closure applies at this rung
|
|
68
|
-
* @param doneStatuses - Ladder done statuses, lowest rung first
|
|
69
|
-
* @returns The planned action
|
|
70
|
-
*/
|
|
71
|
-
function planItem(item, input, rung, close, doneStatuses) {
|
|
72
|
-
if (isContainer(item)) {
|
|
73
|
-
return {
|
|
74
|
-
kind: "skip-container",
|
|
75
|
-
ref: item.ref,
|
|
76
|
-
reason: `container (type "${item.type ?? "unknown"}", ${String(item.openChildren)} open children) skipped per leaf-only-lifecycle`,
|
|
77
|
-
commentBody: CONTAINER_ROLLUP_BODY,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
const currentIndex = item.currentStatus === undefined
|
|
81
|
-
? -1
|
|
82
|
-
: doneStatuses.indexOf(item.currentStatus);
|
|
83
|
-
if (item.closed) {
|
|
84
|
-
if (currentIndex === -1) {
|
|
85
|
-
return {
|
|
86
|
-
kind: "skip-unrecognized-status",
|
|
87
|
-
ref: item.ref,
|
|
88
|
-
reason: `closed at status "${item.currentStatus ?? "(none)"}", which is outside the configured ${doneMapPath(input.tracker)} vocabulary; not moving (config-bound vocabulary)`,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
return {
|
|
92
|
-
kind: "skip-at-or-beyond",
|
|
93
|
-
ref: item.ref,
|
|
94
|
-
reason: `already closed at "${item.currentStatus ?? ""}"`,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
const targetIndex = doneStatuses.indexOf(rung.doneStatus);
|
|
98
|
-
if (currentIndex >= targetIndex) {
|
|
99
|
-
return {
|
|
100
|
-
kind: "skip-at-or-beyond",
|
|
101
|
-
ref: item.ref,
|
|
102
|
-
reason: `current status "${item.currentStatus ?? ""}" is at or beyond "${rung.doneStatus}"`,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
return {
|
|
106
|
-
kind: "promote",
|
|
107
|
-
ref: item.ref,
|
|
108
|
-
doneStatus: rung.doneStatus,
|
|
109
|
-
close,
|
|
110
|
-
commentBody: promotionBody(input, rung, close),
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Plan all transitions for a deploy event. Pure — performs no IO; callers
|
|
115
|
-
* fetch item states through an adapter and execute the returned actions.
|
|
116
|
-
* @param input - Ladder, env, tracker, range context, and item states
|
|
117
|
-
* @returns Explanatory no-op or per-item action plan
|
|
118
|
-
*/
|
|
119
|
-
export function planTransitions(input) {
|
|
120
|
-
const rung = findRung(input.ladder, input.env);
|
|
121
|
-
if (rung === undefined) {
|
|
122
|
-
return {
|
|
123
|
-
kind: "no-op",
|
|
124
|
-
env: input.env,
|
|
125
|
-
reason: `no-op: environment "${input.env}" has no configured done status — .lisa.config.json is missing ${doneMapPath(input.tracker)}.${input.env}. No transitions attempted.`,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
const close = input.ladder.terminalEnv !== undefined &&
|
|
129
|
-
rung.env === input.ladder.terminalEnv;
|
|
130
|
-
const doneStatuses = input.ladder.rungs.map(entry => entry.doneStatus);
|
|
131
|
-
const actions = input.items.map(item => planItem(item, input, rung, close, doneStatuses));
|
|
132
|
-
return { kind: "plan", env: input.env, rung, actions };
|
|
133
|
-
}
|
|
134
|
-
//# sourceMappingURL=deploy-status-transition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-status-transition.js","sourceRoot":"","sources":["../../src/core/deploy-status-transition.ts"],"names":[],"mappings":"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"}
|