@codyswann/lisa 2.345.0 → 2.346.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/all/copy-overwrite/scripts/check-state-classification.mjs +609 -0
- package/all/copy-overwrite/scripts/lisa-command-envelope.mjs +194 -0
- package/all/copy-overwrite/scripts/lisa-schema-validate.mjs +208 -0
- package/all/copy-overwrite/scripts/schemas/lisa-command-envelope.v1.schema.json +119 -0
- package/all/copy-overwrite/scripts/schemas/lisa-state-contract.v1.schema.json +191 -0
- package/all/create-only/state/README.md +41 -0
- package/all/create-only/state/state-contract.example.json +46 -0
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +59 -12
- package/dist/core/upstream-evidence-manifest.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/.codex-plugin/skills/lisa-acceptance-criteria/SKILL.md +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/SKILL.md +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/SKILL.md +8 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +14 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/SKILL.md +5 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-research/SKILL.md +7 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/SKILL.md +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/lisa/rules/eager/reset-seed-coverage.md +48 -0
- package/plugins/lisa/rules/reference/reset-seed-coverage.md +231 -0
- package/plugins/lisa/skills/lisa-acceptance-criteria/SKILL.md +1 -0
- package/plugins/lisa/skills/lisa-codify-verification/SKILL.md +4 -0
- package/plugins/lisa/skills/lisa-implement/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-parity-safety-net-rules/SKILL.md +8 -3
- package/plugins/lisa/skills/lisa-parity-sentry-sdk-setup/SKILL.md +14 -2
- package/plugins/lisa/skills/lisa-parity-sentry-seer/SKILL.md +5 -3
- package/plugins/lisa/skills/lisa-research/SKILL.md +7 -1
- package/plugins/lisa/skills/lisa-task-decomposition/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-test-strategy/SKILL.md +1 -0
- package/plugins/lisa/skills/lisa-verification-lifecycle/SKILL.md +1 -0
- package/plugins/lisa/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-acceptance-criteria/SKILL.md +1 -0
- package/plugins/lisa-agy/skills/lisa-codify-verification/SKILL.md +4 -0
- package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-parity-safety-net-rules/SKILL.md +8 -3
- package/plugins/lisa-agy/skills/lisa-parity-sentry-sdk-setup/SKILL.md +14 -2
- package/plugins/lisa-agy/skills/lisa-parity-sentry-seer/SKILL.md +5 -3
- package/plugins/lisa-agy/skills/lisa-research/SKILL.md +7 -1
- package/plugins/lisa-agy/skills/lisa-task-decomposition/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-test-strategy/SKILL.md +1 -0
- package/plugins/lisa-agy/skills/lisa-verification-lifecycle/SKILL.md +1 -0
- package/plugins/lisa-agy/skills/lisa-verify/SKILL.md +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/reset-seed-coverage.md +48 -0
- package/plugins/lisa-copilot/rules/reference/reset-seed-coverage.md +231 -0
- package/plugins/lisa-copilot/skills/lisa-acceptance-criteria/SKILL.md +1 -0
- package/plugins/lisa-copilot/skills/lisa-codify-verification/SKILL.md +4 -0
- package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-parity-safety-net-rules/SKILL.md +8 -3
- package/plugins/lisa-copilot/skills/lisa-parity-sentry-sdk-setup/SKILL.md +14 -2
- package/plugins/lisa-copilot/skills/lisa-parity-sentry-seer/SKILL.md +5 -3
- package/plugins/lisa-copilot/skills/lisa-research/SKILL.md +7 -1
- package/plugins/lisa-copilot/skills/lisa-task-decomposition/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-test-strategy/SKILL.md +1 -0
- package/plugins/lisa-copilot/skills/lisa-verification-lifecycle/SKILL.md +1 -0
- package/plugins/lisa-copilot/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/reset-seed-coverage-reference.mdc +236 -0
- package/plugins/lisa-cursor/rules/reset-seed-coverage.mdc +53 -0
- package/plugins/lisa-cursor/skills/lisa-acceptance-criteria/SKILL.md +1 -0
- package/plugins/lisa-cursor/skills/lisa-codify-verification/SKILL.md +4 -0
- package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-parity-safety-net-rules/SKILL.md +8 -3
- package/plugins/lisa-cursor/skills/lisa-parity-sentry-sdk-setup/SKILL.md +14 -2
- package/plugins/lisa-cursor/skills/lisa-parity-sentry-seer/SKILL.md +5 -3
- package/plugins/lisa-cursor/skills/lisa-research/SKILL.md +7 -1
- package/plugins/lisa-cursor/skills/lisa-task-decomposition/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-test-strategy/SKILL.md +1 -0
- package/plugins/lisa-cursor/skills/lisa-verification-lifecycle/SKILL.md +1 -0
- package/plugins/lisa-cursor/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/SKILL.md +93 -2
- package/plugins/lisa-expo/skills/ops-db-ops/SKILL.md +94 -3
- package/plugins/lisa-expo/skills/ops-db-ops/agents/openai.yaml +2 -2
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-agy/skills/ops-db-ops/SKILL.md +94 -3
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/skills/ops-db-ops/SKILL.md +94 -3
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/skills/ops-db-ops/SKILL.md +94 -3
- 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/reset-seed-coverage.md +48 -0
- package/plugins/src/base/rules/reference/reset-seed-coverage.md +231 -0
- package/plugins/src/base/skills/lisa-acceptance-criteria/SKILL.md +1 -0
- package/plugins/src/base/skills/lisa-codify-verification/SKILL.md +4 -0
- package/plugins/src/base/skills/lisa-implement/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-parity-safety-net-rules/SKILL.md +8 -3
- package/plugins/src/base/skills/lisa-parity-sentry-sdk-setup/SKILL.md +14 -2
- package/plugins/src/base/skills/lisa-parity-sentry-seer/SKILL.md +5 -3
- package/plugins/src/base/skills/lisa-research/SKILL.md +7 -1
- package/plugins/src/base/skills/lisa-task-decomposition/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-test-strategy/SKILL.md +1 -0
- package/plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md +1 -0
- package/plugins/src/base/skills/lisa-verify/SKILL.md +1 -1
- package/plugins/src/expo/skills/ops-db-ops/SKILL.md +94 -3
- package/scripts/check-state-classification.mjs +27 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://lisa.codyswann.dev/schemas/lisa-state-contract.v1.schema.json",
|
|
4
|
+
"title": "Lisa state contract (v1)",
|
|
5
|
+
"description": "Per-project declaration of every persistent entity and the reset policy that governs it. Governed by the reset-seed-coverage rule. The check compares a runtime inventory against this document and fails closed on any entity the document does not classify.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schemaVersion", "contractVersion", "mode", "owner"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schemaVersion": {
|
|
11
|
+
"const": "lisa-state-contract-v1",
|
|
12
|
+
"description": "Pinned schema version. A bump is a deliberate migration."
|
|
13
|
+
},
|
|
14
|
+
"contractVersion": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"minLength": 1,
|
|
17
|
+
"description": "The project's own version for its declared state. Bump whenever a policy or ownership predicate changes, so evidence from one run cannot be read as evidence for a different contract."
|
|
18
|
+
},
|
|
19
|
+
"mode": {
|
|
20
|
+
"enum": ["contract", "declared-noop"],
|
|
21
|
+
"description": "contract = this project holds persistent state and classifies it below. declared-noop = this project holds no persistent state; the check verifies that claim against the repository rather than trusting it."
|
|
22
|
+
},
|
|
23
|
+
"owner": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"minLength": 1,
|
|
26
|
+
"description": "Team or role that answers questions about this file. Not an individual's personal account."
|
|
27
|
+
},
|
|
28
|
+
"noop": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"required": ["reason", "owner", "capabilityManifest"],
|
|
32
|
+
"description": "Required when mode is declared-noop. A bare exit 0 is indistinguishable from a successful destructive run and never satisfies the contract.",
|
|
33
|
+
"properties": {
|
|
34
|
+
"reason": { "type": "string", "minLength": 1 },
|
|
35
|
+
"owner": { "type": "string", "minLength": 1 },
|
|
36
|
+
"capabilityManifest": { "type": "string", "minLength": 1 }
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"environments": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"description": "Environments a reset may target. Each names how the environment identity is resolved server-side; a caller-supplied stage is only a request checked against it.",
|
|
42
|
+
"items": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"additionalProperties": true,
|
|
45
|
+
"required": ["name", "identitySource"],
|
|
46
|
+
"properties": {
|
|
47
|
+
"name": { "type": "string", "minLength": 1 },
|
|
48
|
+
"identitySource": { "type": "string", "minLength": 1 },
|
|
49
|
+
"resetAllowed": { "type": "boolean" }
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"fixtureIdentity": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": true,
|
|
56
|
+
"required": ["description"],
|
|
57
|
+
"description": "How fixture-owned records are recognized. The ownership predicate the entire safety model rests on: a reserved id shape, a reserved account or namespace, or a marker attribute.",
|
|
58
|
+
"properties": {
|
|
59
|
+
"description": { "type": "string", "minLength": 1 },
|
|
60
|
+
"idPattern": { "type": "string", "minLength": 1 },
|
|
61
|
+
"reservedPrincipals": { "type": "array", "items": { "type": "string" } }
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"detection": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"additionalProperties": false,
|
|
67
|
+
"description": "Tuning for the subtraction detectors. Detectors are a staleness signal, never the safety boundary.",
|
|
68
|
+
"properties": {
|
|
69
|
+
"sources": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": { "type": "string", "minLength": 1 },
|
|
72
|
+
"description": "Extra repository paths to scan for declared entities (migrations, schema files, model definitions)."
|
|
73
|
+
},
|
|
74
|
+
"ignore": {
|
|
75
|
+
"type": "array",
|
|
76
|
+
"items": { "type": "string", "minLength": 1 },
|
|
77
|
+
"description": "Entity names the detectors may find but that are not real persistent entities (framework bookkeeping, examples in docs)."
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"entities": {
|
|
82
|
+
"type": "array",
|
|
83
|
+
"description": "One entry per persistent entity. Rows are only one kind of state: identity-provider objects, object-storage prefixes, search indexes, queues, caches, derived views, scheduled jobs and outbound side effects all belong here too.",
|
|
84
|
+
"items": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"additionalProperties": true,
|
|
87
|
+
"required": ["id", "kind", "policy", "reason", "owner"],
|
|
88
|
+
"properties": {
|
|
89
|
+
"id": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"minLength": 1,
|
|
92
|
+
"description": "Stable, fully qualified identifier: namespace/schema plus name."
|
|
93
|
+
},
|
|
94
|
+
"kind": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"minLength": 1,
|
|
97
|
+
"description": "The project's own vocabulary for what sort of state this is (table, view, materialized-view, identity-group, object-prefix, search-index, queue, cache-namespace, scheduled-job, external-record, ...)."
|
|
98
|
+
},
|
|
99
|
+
"policy": {
|
|
100
|
+
"enum": [
|
|
101
|
+
"fixture-owned",
|
|
102
|
+
"preserve",
|
|
103
|
+
"derived-rebuild",
|
|
104
|
+
"forbidden"
|
|
105
|
+
],
|
|
106
|
+
"description": "fixture-owned = the reset may delete records it owns. preserve = untouched. derived-rebuild = recomputed from sources. forbidden = the reset must be structurally unable to touch it."
|
|
107
|
+
},
|
|
108
|
+
"reason": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"minLength": 1,
|
|
111
|
+
"description": "Why this policy, in one sentence a reviewer can check. Classify by provenance (who writes it, can anything put it back), never by an emptiness observation."
|
|
112
|
+
},
|
|
113
|
+
"owner": { "type": "string", "minLength": 1 },
|
|
114
|
+
"ownership": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"minLength": 1,
|
|
117
|
+
"description": "Required for fixture-owned: the predicate identifying which records the reset may delete. Never 'everything in this entity'."
|
|
118
|
+
},
|
|
119
|
+
"sweptBy": {
|
|
120
|
+
"type": "string",
|
|
121
|
+
"minLength": 1,
|
|
122
|
+
"description": "Required for fixture-owned: the routine that actually removes them. A fixture-owned entity nothing sweeps is the leak this contract exists to catch."
|
|
123
|
+
},
|
|
124
|
+
"rebuiltFrom": { "type": "string", "minLength": 1 },
|
|
125
|
+
"rebuiltBy": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"minLength": 1,
|
|
128
|
+
"description": "Required for derived-rebuild: the routine that recomputes it, and proves convergence."
|
|
129
|
+
},
|
|
130
|
+
"enforcedBy": {
|
|
131
|
+
"type": "string",
|
|
132
|
+
"minLength": 1,
|
|
133
|
+
"description": "Required for forbidden: a control OUTSIDE the reset process — a least-privilege role, a revoked grant, a separate credential boundary, a constraint. 'The script does not touch it' is not an enforcement."
|
|
134
|
+
},
|
|
135
|
+
"retiredAt": {
|
|
136
|
+
"type": "string",
|
|
137
|
+
"minLength": 1,
|
|
138
|
+
"description": "Set when the entity no longer exists. A classified entity absent from the inventory is stale and fails unless retired with a date."
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"assurances": {
|
|
144
|
+
"type": "object",
|
|
145
|
+
"additionalProperties": false,
|
|
146
|
+
"description": "The required properties of the reset, each pointing at the evidence that proves it. A declaration with no evidence pointer fails the check.",
|
|
147
|
+
"properties": {
|
|
148
|
+
"preserves-non-fixture-data": { "$ref": "#/$defs/assurance" },
|
|
149
|
+
"rejects-reserved-id-collision": { "$ref": "#/$defs/assurance" },
|
|
150
|
+
"rejects-foreign-references": { "$ref": "#/$defs/assurance" },
|
|
151
|
+
"requires-write-acknowledgment": { "$ref": "#/$defs/assurance" },
|
|
152
|
+
"converges-on-second-apply": { "$ref": "#/$defs/assurance" },
|
|
153
|
+
"verifies-exact-counts": { "$ref": "#/$defs/assurance" },
|
|
154
|
+
"production-fails-closed": { "$ref": "#/$defs/assurance" },
|
|
155
|
+
"guard-at-the-choke-point": { "$ref": "#/$defs/assurance" },
|
|
156
|
+
"enumerates-before-mutating": { "$ref": "#/$defs/assurance" }
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"waivers": {
|
|
160
|
+
"type": "array",
|
|
161
|
+
"description": "Dated IOUs for entities that genuinely cannot be classified yet. A waived entity is treated as preserve for safety and stays a visible finding; it never counts as classified.",
|
|
162
|
+
"items": {
|
|
163
|
+
"type": "object",
|
|
164
|
+
"additionalProperties": true,
|
|
165
|
+
"required": ["id", "reason", "owner", "ticket", "recordedAt"],
|
|
166
|
+
"properties": {
|
|
167
|
+
"id": { "type": "string", "minLength": 1 },
|
|
168
|
+
"reason": { "type": "string", "minLength": 1 },
|
|
169
|
+
"owner": { "type": "string", "minLength": 1 },
|
|
170
|
+
"ticket": { "type": "string", "minLength": 1 },
|
|
171
|
+
"recordedAt": { "type": "string", "minLength": 1 }
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"$defs": {
|
|
177
|
+
"assurance": {
|
|
178
|
+
"type": "object",
|
|
179
|
+
"additionalProperties": true,
|
|
180
|
+
"required": ["evidence"],
|
|
181
|
+
"properties": {
|
|
182
|
+
"evidence": {
|
|
183
|
+
"type": "string",
|
|
184
|
+
"minLength": 1,
|
|
185
|
+
"description": "Pointer to the test, guard, role, or grant that proves this property."
|
|
186
|
+
},
|
|
187
|
+
"note": { "type": "string", "minLength": 1 }
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# State contract
|
|
2
|
+
|
|
3
|
+
`state-contract.json` is this project's declaration of every persistent entity and the reset policy
|
|
4
|
+
that governs it, required by Lisa's `reset-seed-coverage` rule.
|
|
5
|
+
|
|
6
|
+
Copy `state-contract.example.json` to `state-contract.json` and fill it in. Until that file exists,
|
|
7
|
+
the state-classification check reports `not-adopted` — adoption is an explicit act, so no repo
|
|
8
|
+
silently passes a gate it never wired.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
node scripts/check-state-classification.mjs
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Schema: `scripts/schemas/lisa-state-contract.v1.schema.json`.
|
|
15
|
+
|
|
16
|
+
## The two things the template cannot do for you
|
|
17
|
+
|
|
18
|
+
**Classify by provenance, not by observation.** "The table looked empty" is not evidence it is
|
|
19
|
+
unused. Row-count statistics are approximations, and a table nobody has analyzed reports rows it
|
|
20
|
+
holds. Ask who writes it and whether anything can put it back. Prefer `preserve` when unsure — an
|
|
21
|
+
over-preserved entity leaks; an over-cleared one destroys.
|
|
22
|
+
|
|
23
|
+
**Include state that is not rows.** Identity-provider objects, object-storage prefixes, search
|
|
24
|
+
indexes, queues and dead-letter backlogs, caches with a persistence tier, derived and materialized
|
|
25
|
+
views, runtime-created jobs, and outbound side effects all belong in `entities`. Leaked test state is
|
|
26
|
+
most expensive exactly where nobody thought to look.
|
|
27
|
+
|
|
28
|
+
## The four policies
|
|
29
|
+
|
|
30
|
+
| Policy | Meaning |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `fixture-owned` | The reset may delete records it owns here. Requires an `ownership` predicate and a `sweptBy` routine — an entity the suite creates but nothing removes is the leak this contract exists to catch. |
|
|
33
|
+
| `preserve` | Left untouched. Catalog, reference data, anything a migration seeds, anything belonging to someone real. |
|
|
34
|
+
| `derived-rebuild` | Recomputed from its sources after the reset, then proven converged. |
|
|
35
|
+
| `forbidden` | The reset must be structurally unable to touch it. Requires `enforcedBy` naming a control outside the reset process — a role, a revoked grant, a credential boundary. "The script does not touch it" is not an enforcement. |
|
|
36
|
+
|
|
37
|
+
## No persistent state at all?
|
|
38
|
+
|
|
39
|
+
Set `"mode": "declared-noop"` and fill in the `noop` block (reason, owner, capability-manifest
|
|
40
|
+
reference) instead of `entities`. The check verifies that claim against the repository rather than
|
|
41
|
+
trusting it: a repo showing persistence signals may not declare a reset noop.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "lisa-state-contract-v1",
|
|
3
|
+
"contractVersion": "REPLACE-ME-state-v1",
|
|
4
|
+
"mode": "contract",
|
|
5
|
+
"owner": "REPLACE-ME-team-or-role",
|
|
6
|
+
"environments": [
|
|
7
|
+
{
|
|
8
|
+
"name": "dev",
|
|
9
|
+
"identitySource": "REPLACE-ME: how the environment identity is resolved SERVER-SIDE. A caller-supplied --stage, URL or public build-time variable is a request to check against this, never the answer.",
|
|
10
|
+
"resetAllowed": true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "production",
|
|
14
|
+
"identitySource": "REPLACE-ME",
|
|
15
|
+
"resetAllowed": false
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"fixtureIdentity": {
|
|
19
|
+
"description": "REPLACE-ME: how a fixture-owned record is recognized. Everything the reset may delete must match this; anything else belongs to someone real.",
|
|
20
|
+
"idPattern": "REPLACE-ME-or-remove",
|
|
21
|
+
"reservedPrincipals": []
|
|
22
|
+
},
|
|
23
|
+
"entities": [
|
|
24
|
+
{
|
|
25
|
+
"id": "REPLACE-ME.example_table",
|
|
26
|
+
"kind": "table",
|
|
27
|
+
"policy": "fixture-owned",
|
|
28
|
+
"reason": "REPLACE-ME: one sentence a reviewer can check.",
|
|
29
|
+
"owner": "REPLACE-ME",
|
|
30
|
+
"ownership": "REPLACE-ME: the predicate identifying records the reset may delete. Never 'everything in this entity'.",
|
|
31
|
+
"sweptBy": "REPLACE-ME: the routine that actually removes them. A fixture-owned entity nothing sweeps is the leak this contract exists to catch."
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"assurances": {
|
|
35
|
+
"preserves-non-fixture-data": { "evidence": "REPLACE-ME: test or role" },
|
|
36
|
+
"rejects-reserved-id-collision": { "evidence": "REPLACE-ME" },
|
|
37
|
+
"rejects-foreign-references": { "evidence": "REPLACE-ME" },
|
|
38
|
+
"requires-write-acknowledgment": { "evidence": "REPLACE-ME" },
|
|
39
|
+
"converges-on-second-apply": { "evidence": "REPLACE-ME" },
|
|
40
|
+
"verifies-exact-counts": { "evidence": "REPLACE-ME" },
|
|
41
|
+
"production-fails-closed": { "evidence": "REPLACE-ME" },
|
|
42
|
+
"guard-at-the-choke-point": { "evidence": "REPLACE-ME" },
|
|
43
|
+
"enumerates-before-mutating": { "evidence": "REPLACE-ME" }
|
|
44
|
+
},
|
|
45
|
+
"waivers": []
|
|
46
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgsEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAoyNjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
4
4
|
"all/copy-contents/.gitattributes": "9d3831007e681186a3673e1037ef3fc82980cab2fc04e27c0868e562912c9e9f",
|
|
5
5
|
"all/copy-contents/gitignore": "2dbf7fd2f2020fc7824c432342002d9ca3ebb57b2872e761b14e942b23479a11",
|
|
6
|
+
"all/copy-overwrite/scripts/check-state-classification.mjs": "94dc98e0bbfcf8d43cba035d4805a1c5d61a3a0db88faa791e8e06e34e741f46",
|
|
7
|
+
"all/copy-overwrite/scripts/lisa-command-envelope.mjs": "2011331056b1c86bd181649713a395dbfd2768f9fcd7e37b521d6ad2a9318ea9",
|
|
6
8
|
"all/copy-overwrite/scripts/lisa-enforcement-fallback.sh": "1bec5f3c284b3febdc471487ee6a23ffb72bd4e7b293f9e26b0188f32318c722",
|
|
7
9
|
"all/copy-overwrite/scripts/lisa-floor-collisions.mjs": "3c7a0234b4f5609fce49e44711d2ec86af8cf7fb82b0831e4450e3347ecefe45",
|
|
8
10
|
"all/copy-overwrite/scripts/lisa-hooks/block-instruction-file-edits.sh": "850cfc23852eb752114ae1e938a1c7bcf34bc50c85d3aaca0c02311cc8c0ef70",
|
|
@@ -10,11 +12,16 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
10
12
|
"all/copy-overwrite/scripts/lisa-hooks/block-shell-json-parsing.sh": "1934a15e154fda3c2a40979a5cd6225661b14fe7bc77328a69ce499bea85dba7",
|
|
11
13
|
"all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh": "d9ea58150aa27e7f0aa9a4ef155ed446d30bdfc932d01c64e2b8ca211aa0de7b",
|
|
12
14
|
"all/copy-overwrite/scripts/lisa-hooks/sonar-secrets.sh": "bf4132e49ba18e2f7e941520c299c15aeeacfd220e489f3d2eb8397f2048157b",
|
|
15
|
+
"all/copy-overwrite/scripts/lisa-schema-validate.mjs": "9dd145c0f9dac6ed252b13d32e130dbab964da6cd357981b58541780ecb2f981",
|
|
13
16
|
"all/copy-overwrite/scripts/lisa-work-item.mjs": "e30016a49deff1c3cd3ae7951262aeb2ef3d472bce76bbbe2a177db6017c7cad",
|
|
17
|
+
"all/copy-overwrite/scripts/schemas/lisa-command-envelope.v1.schema.json": "d153b7c2953a30f180e38f09e98240c63327f5196eeba9bdf545e5a1f125a879",
|
|
18
|
+
"all/copy-overwrite/scripts/schemas/lisa-state-contract.v1.schema.json": "6b7afe4ffeba8aaa53871d8855172f7eacde05953b1321145218ec638ff5c1c4",
|
|
14
19
|
"all/create-only/.claude/rules/PROJECT_RULES.md": "6e1c7923ad2a15356babc60c97e7f97be728d790af285b6a7cd7d1b4d39cd97f",
|
|
15
20
|
"all/create-only/.lisaignore": "3c9827e7e98daa46510b5357cd6dd9406da1821e64cc46d2eea9f311cd6d06b9",
|
|
16
21
|
"all/create-only/scripts/remote-agent-aws-setup.sh": "12d2204d34195ad4f81082e90a25dbbf7d2493debcc50c1cd37b32dc4648fc17",
|
|
17
22
|
"all/create-only/specs/.keep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
|
23
|
+
"all/create-only/state/README.md": "6e36aaa9dab171d7d4d6351042e7ddc44ec834bb7f140bbb70b83972c3181fe3",
|
|
24
|
+
"all/create-only/state/state-contract.example.json": "e7fd3cdc25b42c85a7e4d0e199d92b1442222f02cb9921b34334fb724625a6c2",
|
|
18
25
|
"all/deletions.json": "31af98085a56dd96d34d4b3cb42956e068fb492df7b1dd781987408c1b4b2ea3",
|
|
19
26
|
"all/github-rulesets/base.json": "58b9606f185cdca8b17218829aac333b7d8c08f0f2b4f86d7e360f7be1de4787",
|
|
20
27
|
"all/github-rulesets/prevent-delete.json": "e4fb26390a8bfee34b27be5b369f376a1a9a00b797fd8d3ce51cb71facb826a4",
|
|
@@ -349,6 +356,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
349
356
|
"plugins/src/base/rules/eager/rejection-detection.md": "e0a8e74f9b4eec378f7cc62072153b1a968af0e5e7a1af9473ab476d41c30211",
|
|
350
357
|
"plugins/src/base/rules/eager/repo-scope-split.md": "a1702d6d0e9d80abc118b7c32a97ba9a988b195d86363b2d7a35e71752d9bd2e",
|
|
351
358
|
"plugins/src/base/rules/eager/report-actionability.md": "7c4d5b2bea93b7cd5bb8694fa7c06f4ca8f94a19eb17832f1ccc5354b0207163",
|
|
359
|
+
"plugins/src/base/rules/eager/reset-seed-coverage.md": "d028c8709d7d3a05b2f9bb8209a0d6bf1aef99e88d5e7d7132909e8d0d4c19d9",
|
|
352
360
|
"plugins/src/base/rules/eager/security-audit-handling.md": "1f6effe92be66736a0c9fab634c5fdd6ad1e789865faa67bb783c67ddb4ad490",
|
|
353
361
|
"plugins/src/base/rules/eager/settled-decisions.md": "f5339c81b8d29f628830e6147314cbb941b9d9e6d87c3834d8fe7adc4b46ef4c",
|
|
354
362
|
"plugins/src/base/rules/eager/stale-state-claims.md": "faf5057f5910237b8d5048dbcccb73e0cd03762a8eefbeae43b5d0153104a85a",
|
|
@@ -388,6 +396,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
388
396
|
"plugins/src/base/rules/reference/rejection-detection.md": "afa1f187feabf4ef275c8d7e085452c76c5276356fe58d67a5360ed420a62873",
|
|
389
397
|
"plugins/src/base/rules/reference/repo-scope-split.md": "5df96b7a41a9c4102fd1f703f5ebf0f4dd86a07f142eb9b10088459c3d264ae6",
|
|
390
398
|
"plugins/src/base/rules/reference/report-actionability.md": "42fa86bb189467c7bc7ee64f6ebccd3926bb2aaf512ee5a498c232025b8a364b",
|
|
399
|
+
"plugins/src/base/rules/reference/reset-seed-coverage.md": "741c49e0544aecfa2c4aadf6a36ef496a1a5d974f71962ae8e33cc625651f0c2",
|
|
391
400
|
"plugins/src/base/rules/reference/security-audit-handling.md": "9633e11ac89af26444a272449f36fe03f26e61fab40ca16a0ab50464725f7d8c",
|
|
392
401
|
"plugins/src/base/rules/reference/settled-decisions.md": "6c84f309a1f765eba1648d6ace836387bd96b924f245c16cf3629f501ef6bb18",
|
|
393
402
|
"plugins/src/base/rules/reference/stale-state-claims.md": "6329e1a7629f9a12f10454c767842aecee4964df8b7bb4aebda9dde3c0959c2a",
|
|
@@ -415,7 +424,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
415
424
|
"plugins/src/base/scripts/queue-status-build-readers.mjs": "1e05181dc8fbe2a4f0c04ce73fdfe1c3a7fc1777cb66e95d7e9a593559c8ca27",
|
|
416
425
|
"plugins/src/base/scripts/queue-status-prd-readers.mjs": "32b4366fc292062c869793aeaf5b006ff400df5da09ee510f862e15d59a77770",
|
|
417
426
|
"plugins/src/base/scripts/remote-agent-aws-setup.sh": "e3fc922d9b868e0f5a72c7a16a4c32e4a1b3f5278b7c8563648e4f05c49072c5",
|
|
418
|
-
"plugins/src/base/skills/lisa-acceptance-criteria/SKILL.md": "
|
|
427
|
+
"plugins/src/base/skills/lisa-acceptance-criteria/SKILL.md": "ddcb4f10b092f27bbff67782cc4472c3a3c8b8fa08507ee67ca5d1ea4f0f1a20",
|
|
419
428
|
"plugins/src/base/skills/lisa-agent-design-best-practices/SKILL.md": "2c487df59f54682d744e71f78a2bccccf9e3a6510705b4ff6be7edfa4be2d43b",
|
|
420
429
|
"plugins/src/base/skills/lisa-agent-ready/SKILL.md": "13f2e0f50287a04ed9a036ef1c547563b5f6f6325b2b35f6746d46a5ed4d15df",
|
|
421
430
|
"plugins/src/base/skills/lisa-analyze-claude-remote/SKILL.md": "a5863836b8fa9d67825d048e1c2fc086d3df95de33cf110129488959b83cb4b5",
|
|
@@ -426,7 +435,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
426
435
|
"plugins/src/base/skills/lisa-bug-triage/SKILL.md": "bd5bae508a8f344d8b5cb46cfddcb178ff8368ca77936f9e2c63058e05f61af4",
|
|
427
436
|
"plugins/src/base/skills/lisa-capability-drift/SKILL.md": "9ef86e6caab6eaea87f6d32e67a77061ce8cccf09467bc5c36ee13a77a7f0199",
|
|
428
437
|
"plugins/src/base/skills/lisa-codebase-research/SKILL.md": "77dbc2d7e86e5027df486294de315bb539a2ece84bd4b38e47ccc108f8c2875e",
|
|
429
|
-
"plugins/src/base/skills/lisa-codify-verification/SKILL.md": "
|
|
438
|
+
"plugins/src/base/skills/lisa-codify-verification/SKILL.md": "72467a7fb8143ec5061db13df90d51d31da638535f5df4d4b9b655f37deb96a3",
|
|
430
439
|
"plugins/src/base/skills/lisa-confluence-prd-intake/SKILL.md": "a6a099abeb32940d44da7e9a6a62c3519f64efa85294c4b996789fa4fba97461",
|
|
431
440
|
"plugins/src/base/skills/lisa-confluence-to-tracker/SKILL.md": "373a545a19013306c68625f0b6cb01d9fdf36966f8a0539f63f02adcb70a7f7e",
|
|
432
441
|
"plugins/src/base/skills/lisa-confluence-write-prd/SKILL.md": "29fce0dce5f3d1b9cbe8705c8fc002e5885675e1807cf948b166aef88ddfd73a",
|
|
@@ -463,7 +472,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
463
472
|
"plugins/src/base/skills/lisa-github-write-issue/SKILL.md": "ee54b3d14cc5dd3a68a8c36590102dd02f49334c9493ad52fa8c7f35157073b1",
|
|
464
473
|
"plugins/src/base/skills/lisa-github-write-prd/SKILL.md": "262f8a1bcfad4c5dd4456cfaaf1b71abf9697a0da588966e58ff491acd3c17e8",
|
|
465
474
|
"plugins/src/base/skills/lisa-health/SKILL.md": "dfdb08a863e78bff42671793dcec29cfae0654db18ebf66a4aa77aeb56ddb775",
|
|
466
|
-
"plugins/src/base/skills/lisa-implement/SKILL.md": "
|
|
475
|
+
"plugins/src/base/skills/lisa-implement/SKILL.md": "594e48a89a2f4707531009a637fb9ddaabee14f133664c1e3a2c92a41a793c94",
|
|
467
476
|
"plugins/src/base/skills/lisa-improve-code-complexity/SKILL.md": "24ab5b193b409db6ee6bee981a1c0a48d08991782d7846116ad01658c8bc1ae8",
|
|
468
477
|
"plugins/src/base/skills/lisa-improve-harness/SKILL.md": "bafda5d2f9b86c48cd16bf0015528fdf5891675221d662fdc533aaad66aad669",
|
|
469
478
|
"plugins/src/base/skills/lisa-improve-max-lines-per-function/SKILL.md": "95c875950c9848fdaf520a18b9bbb264e33d7347be10170add768e01d9cd8e52",
|
|
@@ -517,9 +526,9 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
517
526
|
"plugins/src/base/skills/lisa-parity-code-review/SKILL.md": "5805254747c4ed9081fd514236f06e078be86d41694bf74b480bf7592cd58c1f",
|
|
518
527
|
"plugins/src/base/skills/lisa-parity-code-simplifier/SKILL.md": "c721ae772e73abff633c43d93267066afac188e911a77322fbb102db673849d7",
|
|
519
528
|
"plugins/src/base/skills/lisa-parity-coderabbit/SKILL.md": "ae882837d43741293d1b639c4516331fa6124fa1f5da234a74ecb31c5d7e52cd",
|
|
520
|
-
"plugins/src/base/skills/lisa-parity-safety-net-rules/SKILL.md": "
|
|
521
|
-
"plugins/src/base/skills/lisa-parity-sentry-sdk-setup/SKILL.md": "
|
|
522
|
-
"plugins/src/base/skills/lisa-parity-sentry-seer/SKILL.md": "
|
|
529
|
+
"plugins/src/base/skills/lisa-parity-safety-net-rules/SKILL.md": "f240857de2f14938009ddd212c56601269fd9e1aec33a766cd09da5bea5656e0",
|
|
530
|
+
"plugins/src/base/skills/lisa-parity-sentry-sdk-setup/SKILL.md": "edb513a9d29b3faeccce71d92596e12bc1f35e44fe3af1349bd7bd473fee98af",
|
|
531
|
+
"plugins/src/base/skills/lisa-parity-sentry-seer/SKILL.md": "ec09515906a55e98ac0f619f048f14c4a16db74c1cd5744dda0cdfa42ce7fed6",
|
|
523
532
|
"plugins/src/base/skills/lisa-parity-skill-creator/SKILL.md": "616e0493f75fe92c18137548d7c86a91a9b04d9844ca76fa3f14156e3e7814e5",
|
|
524
533
|
"plugins/src/base/skills/lisa-performance-review/SKILL.md": "351542c256e54940e6d672a70606b8414425c6435ae6f026841bcc02f9fce9c4",
|
|
525
534
|
"plugins/src/base/skills/lisa-persist-learning/SKILL.md": "41ffd8a415c6b1b98952061760e54837f3d6e6ea046e4d1c122dd53878af84de",
|
|
@@ -548,7 +557,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
548
557
|
"plugins/src/base/skills/lisa-remote-dispatch/scripts/dispatch.mjs": "475963ed64d9e72a6cbd6cbb61c8b57a419f2e1805e3ddfa76066047c590deeb",
|
|
549
558
|
"plugins/src/base/skills/lisa-repair-intake/SKILL.md": "1c07ec9e422f5bf6a624b63cc8c032894203d22642e77a2c51fc7209024b175a",
|
|
550
559
|
"plugins/src/base/skills/lisa-reproduce-bug/SKILL.md": "4d460993fac6021219ca23eee29b1b9afa7c37479dddc662b2fcfaca510edd68",
|
|
551
|
-
"plugins/src/base/skills/lisa-research/SKILL.md": "
|
|
560
|
+
"plugins/src/base/skills/lisa-research/SKILL.md": "9e2e7f3d02a18d9bb34f0b9e8c43d6b9b454d0f81987390839d40a84331b20f7",
|
|
552
561
|
"plugins/src/base/skills/lisa-review-implementation/SKILL.md": "42134253cca50e384f36eaa085c0a1e6b8772e9f3e912a8d1231f1cd69199858",
|
|
553
562
|
"plugins/src/base/skills/lisa-review-local/SKILL.md": "66defe83565ab3633a13e69ce394de64f17f2c2bddbf046bc12c8bbd0ca57f5c",
|
|
554
563
|
"plugins/src/base/skills/lisa-rework-triage/SKILL.md": "3389740fc0f162be0b684625424e716a0a3e4c99c8cdb4317ec82dcfcf7b57c7",
|
|
@@ -598,11 +607,11 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
598
607
|
"plugins/src/base/skills/lisa-sonarcloud-access/SKILL.md": "031acb01195ae59010a65335da98d46a1d6080e749823d6f6d157938d9e96648",
|
|
599
608
|
"plugins/src/base/skills/lisa-spec-conformance/SKILL.md": "50e79afcfabf16d36273325aabb58571c9a0e1cafe7a2865e2da10c6d46571eb",
|
|
600
609
|
"plugins/src/base/skills/lisa-sync-down/SKILL.md": "c32e6a4e3115ca32b7d335e90d0a73b243c6c631a2d192568423be0cb5944e84",
|
|
601
|
-
"plugins/src/base/skills/lisa-task-decomposition/SKILL.md": "
|
|
610
|
+
"plugins/src/base/skills/lisa-task-decomposition/SKILL.md": "eb78838e1f121a7a619a841333b1adfce124dad8881853d14107512ead09d30f",
|
|
602
611
|
"plugins/src/base/skills/lisa-task-triage/SKILL.md": "c6e11b6d195560e6bd7b51fede65c155567c35208801a700a26d95679b03484e",
|
|
603
612
|
"plugins/src/base/skills/lisa-tdd-implementation/SKILL.md": "366bcf52a538d4f2ac440dd2e9e6f7cf324450fd3cd03652127ab8c20f584fa9",
|
|
604
613
|
"plugins/src/base/skills/lisa-tear-down-automations/SKILL.md": "3f8215b691ce60a6efd63547b99b4d87760fe99d285f6fe153aaadd451e83731",
|
|
605
|
-
"plugins/src/base/skills/lisa-test-strategy/SKILL.md": "
|
|
614
|
+
"plugins/src/base/skills/lisa-test-strategy/SKILL.md": "8976e0056b65475fe69f4ed02c8d0d3ae898fd9ab5ff28bf632981a3293c9f6e",
|
|
606
615
|
"plugins/src/base/skills/lisa-ticket-triage/SKILL.md": "9d29652fb897568a60da35956f452627a81e57032bbcc3c673ae20dfc8a419f5",
|
|
607
616
|
"plugins/src/base/skills/lisa-track/SKILL.md": "35a3fd978c71d40f62849f903ae0291f8b3140354e53ba498ada4ffe4cd586f3",
|
|
608
617
|
"plugins/src/base/skills/lisa-tracker-add-journey/SKILL.md": "a3da2e0350bcdebcdcc05f2d7931af868382638d3a28d09d4718f2f458d4be0a",
|
|
@@ -620,10 +629,10 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
620
629
|
"plugins/src/base/skills/lisa-usage-accounting/SKILL.md": "838da4ca08fb6e6a4bc14b6cb5446be93c4565f468f169a1ec68435d275d1ef8",
|
|
621
630
|
"plugins/src/base/skills/lisa-use-the-product/SKILL.md": "ab3f3ab475b7c97c3409f502b80d688816b1ff4b8e3dfeec7715d93ca41e3fa0",
|
|
622
631
|
"plugins/src/base/skills/lisa-validate-tracker-mapping/SKILL.md": "ab45fdc00294c4ca9698093cb294a2aaf39a73d714fe1aa6ad686c6c34e157ba",
|
|
623
|
-
"plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md": "
|
|
632
|
+
"plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md": "3fbcb619281a91f229e4564549b7f7d0ea68e7fd2d874820515846f8cbd6e0e7",
|
|
624
633
|
"plugins/src/base/skills/lisa-verify-prd/SKILL.md": "fd4dc76c42c1083f5223e650f6c25d53694138860ebcb02588689f6eb6d0b416",
|
|
625
634
|
"plugins/src/base/skills/lisa-verify-workflow-change/SKILL.md": "d89740a4dc350a9ac0d26b1b955bf74f009775b60ee0275df3f9a50fe8be3048",
|
|
626
|
-
"plugins/src/base/skills/lisa-verify/SKILL.md": "
|
|
635
|
+
"plugins/src/base/skills/lisa-verify/SKILL.md": "f8650c75b17df54159e243d3443ef2098a1be2407887689e1501fe575bf54ca4",
|
|
627
636
|
"plugins/src/base/skills/lisa-wiki-install/SKILL.md": "9689e5080dfdeffcebd230a5c1cb1ae7b173172a060a603634058f91ca71c17b",
|
|
628
637
|
"plugins/src/cdk/commands/setup/aws.md": "b393a8181d783dad43a94510d3206ea7a0d9090bf3f84d595273e64bb40e1d8d",
|
|
629
638
|
"plugins/src/cdk/skills/setup-aws-accounts/SKILL.md": "a2eee104aecc34716137661f6f47c6e18105b3eadae84fddd29cbaf6ed756874",
|
|
@@ -728,7 +737,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
728
737
|
"plugins/src/expo/skills/native-data-fetching/references/expo-router-loaders.md": "dfae6f4d7116370d05f1423672cbafa1077ed338d1d5736dafc7a41439281dbe",
|
|
729
738
|
"plugins/src/expo/skills/ops-browser-uat/SKILL.md": "d24a96ed6ea3eeb3b1a89f73a15a8da82f8aeea6dba76b142a2f4973e50395f6",
|
|
730
739
|
"plugins/src/expo/skills/ops-check-logs/SKILL.md": "a5c53b0389be769f7096807c66774fac6f816c6786967536e92741eefa1ef193",
|
|
731
|
-
"plugins/src/expo/skills/ops-db-ops/SKILL.md": "
|
|
740
|
+
"plugins/src/expo/skills/ops-db-ops/SKILL.md": "a94ad3b9b757e738bfef9959dbf7acde087ccfd15f6531e81bc685d878ed1d04",
|
|
732
741
|
"plugins/src/expo/skills/ops-deploy/SKILL.md": "287264d7589bd6d40449c3c11c32ce649be58e020726e365a7ce586a8ea69e43",
|
|
733
742
|
"plugins/src/expo/skills/ops-monitor-errors/SKILL.md": "06fb960a925c1a9ddd078450fa4c22748cb71d63ba4491d5692b6417ec0d45cb",
|
|
734
743
|
"plugins/src/expo/skills/ops-performance/SKILL.md": "a799b52a80208a246c94b951da207839f694eefbdfc33cb562143457f5c588a7",
|
|
@@ -984,6 +993,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
984
993
|
"scripts/check-plugins-sync.sh": "3a99cbff0e8ec5e7c944690eae003a6d51b51c85436d77bd37faea4d553728af",
|
|
985
994
|
"scripts/check-rules-pairing.sh": "4d4a0d9e8d36794a22020f419c879d7336b1c5bfe883acdcc826d26764560c7a",
|
|
986
995
|
"scripts/check-security-floors.mjs": "0060a0f65885b54fc93bd3885ca249cbb1ac822c52813817aae640bc1303827b",
|
|
996
|
+
"scripts/check-state-classification.mjs": "26baaa85c0758fa41f1f66257f7d3a31ea4dd5cf17a9c0acaa3e89caaaf6265a",
|
|
987
997
|
"scripts/claude-remote-setup.sh": "0e33accf8aa057c70497f01c38bef9f9f3801d649272f583578d89201b242655",
|
|
988
998
|
"scripts/clean-dist.mjs": "04970d768464acbf96ebeb77c16a6a3b3da56c744eef0da64c573c6152ee0dc7",
|
|
989
999
|
"scripts/cleanup-amplify-branches.sh": "eb9db90b07818dd156dd48d04b6350a10b39be8ffe0267d72cc13705c8eb5350",
|
|
@@ -1259,6 +1269,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
1259
1269
|
"README.md": true,
|
|
1260
1270
|
"all/copy-contents/.gitattributes": true,
|
|
1261
1271
|
"all/copy-contents/gitignore": true,
|
|
1272
|
+
"all/copy-overwrite/scripts/check-state-classification.mjs": true,
|
|
1273
|
+
"all/copy-overwrite/scripts/lisa-command-envelope.mjs": true,
|
|
1262
1274
|
"all/copy-overwrite/scripts/lisa-enforcement-fallback.sh": true,
|
|
1263
1275
|
"all/copy-overwrite/scripts/lisa-floor-collisions.mjs": true,
|
|
1264
1276
|
"all/copy-overwrite/scripts/lisa-hooks/block-instruction-file-edits.sh": true,
|
|
@@ -1266,11 +1278,16 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
1266
1278
|
"all/copy-overwrite/scripts/lisa-hooks/block-shell-json-parsing.sh": true,
|
|
1267
1279
|
"all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh": true,
|
|
1268
1280
|
"all/copy-overwrite/scripts/lisa-hooks/sonar-secrets.sh": true,
|
|
1281
|
+
"all/copy-overwrite/scripts/lisa-schema-validate.mjs": true,
|
|
1269
1282
|
"all/copy-overwrite/scripts/lisa-work-item.mjs": true,
|
|
1283
|
+
"all/copy-overwrite/scripts/schemas/lisa-command-envelope.v1.schema.json": true,
|
|
1284
|
+
"all/copy-overwrite/scripts/schemas/lisa-state-contract.v1.schema.json": true,
|
|
1270
1285
|
"all/create-only/.claude/rules/PROJECT_RULES.md": true,
|
|
1271
1286
|
"all/create-only/.lisaignore": true,
|
|
1272
1287
|
"all/create-only/scripts/remote-agent-aws-setup.sh": true,
|
|
1273
1288
|
"all/create-only/specs/.keep": true,
|
|
1289
|
+
"all/create-only/state/README.md": true,
|
|
1290
|
+
"all/create-only/state/state-contract.example.json": true,
|
|
1274
1291
|
"all/deletions.json": true,
|
|
1275
1292
|
"all/github-rulesets/base.json": true,
|
|
1276
1293
|
"all/github-rulesets/prevent-delete.json": true,
|
|
@@ -2435,6 +2452,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
2435
2452
|
"plugins/lisa-copilot/rules/eager/rejection-detection.md": true,
|
|
2436
2453
|
"plugins/lisa-copilot/rules/eager/repo-scope-split.md": true,
|
|
2437
2454
|
"plugins/lisa-copilot/rules/eager/report-actionability.md": true,
|
|
2455
|
+
"plugins/lisa-copilot/rules/eager/reset-seed-coverage.md": true,
|
|
2438
2456
|
"plugins/lisa-copilot/rules/eager/security-audit-handling.md": true,
|
|
2439
2457
|
"plugins/lisa-copilot/rules/eager/settled-decisions.md": true,
|
|
2440
2458
|
"plugins/lisa-copilot/rules/eager/stale-state-claims.md": true,
|
|
@@ -2474,6 +2492,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
2474
2492
|
"plugins/lisa-copilot/rules/reference/rejection-detection.md": true,
|
|
2475
2493
|
"plugins/lisa-copilot/rules/reference/repo-scope-split.md": true,
|
|
2476
2494
|
"plugins/lisa-copilot/rules/reference/report-actionability.md": true,
|
|
2495
|
+
"plugins/lisa-copilot/rules/reference/reset-seed-coverage.md": true,
|
|
2477
2496
|
"plugins/lisa-copilot/rules/reference/security-audit-handling.md": true,
|
|
2478
2497
|
"plugins/lisa-copilot/rules/reference/settled-decisions.md": true,
|
|
2479
2498
|
"plugins/lisa-copilot/rules/reference/stale-state-claims.md": true,
|
|
@@ -2886,6 +2905,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
2886
2905
|
"plugins/lisa-cursor/rules/repo-scope-split.mdc": true,
|
|
2887
2906
|
"plugins/lisa-cursor/rules/report-actionability-reference.mdc": true,
|
|
2888
2907
|
"plugins/lisa-cursor/rules/report-actionability.mdc": true,
|
|
2908
|
+
"plugins/lisa-cursor/rules/reset-seed-coverage-reference.mdc": true,
|
|
2909
|
+
"plugins/lisa-cursor/rules/reset-seed-coverage.mdc": true,
|
|
2889
2910
|
"plugins/lisa-cursor/rules/security-audit-handling-reference.mdc": true,
|
|
2890
2911
|
"plugins/lisa-cursor/rules/security-audit-handling.mdc": true,
|
|
2891
2912
|
"plugins/lisa-cursor/rules/settled-decisions-reference.mdc": true,
|
|
@@ -5368,6 +5389,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
5368
5389
|
"plugins/lisa/rules/eager/rejection-detection.md": true,
|
|
5369
5390
|
"plugins/lisa/rules/eager/repo-scope-split.md": true,
|
|
5370
5391
|
"plugins/lisa/rules/eager/report-actionability.md": true,
|
|
5392
|
+
"plugins/lisa/rules/eager/reset-seed-coverage.md": true,
|
|
5371
5393
|
"plugins/lisa/rules/eager/security-audit-handling.md": true,
|
|
5372
5394
|
"plugins/lisa/rules/eager/settled-decisions.md": true,
|
|
5373
5395
|
"plugins/lisa/rules/eager/stale-state-claims.md": true,
|
|
@@ -5407,6 +5429,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
5407
5429
|
"plugins/lisa/rules/reference/rejection-detection.md": true,
|
|
5408
5430
|
"plugins/lisa/rules/reference/repo-scope-split.md": true,
|
|
5409
5431
|
"plugins/lisa/rules/reference/report-actionability.md": true,
|
|
5432
|
+
"plugins/lisa/rules/reference/reset-seed-coverage.md": true,
|
|
5410
5433
|
"plugins/lisa/rules/reference/security-audit-handling.md": true,
|
|
5411
5434
|
"plugins/lisa/rules/reference/settled-decisions.md": true,
|
|
5412
5435
|
"plugins/lisa/rules/reference/stale-state-claims.md": true,
|
|
@@ -5970,6 +5993,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
5970
5993
|
"plugins/src/base/rules/eager/rejection-detection.md": true,
|
|
5971
5994
|
"plugins/src/base/rules/eager/repo-scope-split.md": true,
|
|
5972
5995
|
"plugins/src/base/rules/eager/report-actionability.md": true,
|
|
5996
|
+
"plugins/src/base/rules/eager/reset-seed-coverage.md": true,
|
|
5973
5997
|
"plugins/src/base/rules/eager/security-audit-handling.md": true,
|
|
5974
5998
|
"plugins/src/base/rules/eager/settled-decisions.md": true,
|
|
5975
5999
|
"plugins/src/base/rules/eager/stale-state-claims.md": true,
|
|
@@ -6009,6 +6033,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
6009
6033
|
"plugins/src/base/rules/reference/rejection-detection.md": true,
|
|
6010
6034
|
"plugins/src/base/rules/reference/repo-scope-split.md": true,
|
|
6011
6035
|
"plugins/src/base/rules/reference/report-actionability.md": true,
|
|
6036
|
+
"plugins/src/base/rules/reference/reset-seed-coverage.md": true,
|
|
6012
6037
|
"plugins/src/base/rules/reference/security-audit-handling.md": true,
|
|
6013
6038
|
"plugins/src/base/rules/reference/settled-decisions.md": true,
|
|
6014
6039
|
"plugins/src/base/rules/reference/stale-state-claims.md": true,
|
|
@@ -6675,6 +6700,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
6675
6700
|
"scripts/check-plugins-sync.sh": true,
|
|
6676
6701
|
"scripts/check-rules-pairing.sh": true,
|
|
6677
6702
|
"scripts/check-security-floors.mjs": true,
|
|
6703
|
+
"scripts/check-state-classification.mjs": true,
|
|
6678
6704
|
"scripts/claude-remote-setup.sh": true,
|
|
6679
6705
|
"scripts/clean-dist.mjs": true,
|
|
6680
6706
|
"scripts/cleanup-amplify-branches.sh": true,
|
|
@@ -7034,6 +7060,9 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7034
7060
|
"src/utils/postinstall-trampoline.ts": true,
|
|
7035
7061
|
"src/utils/usage-accounting-rollup.ts": true,
|
|
7036
7062
|
"src/utils/usage-accounting.ts": true,
|
|
7063
|
+
"state/demo-project/README.md": true,
|
|
7064
|
+
"state/demo-project/state/inventory.json": true,
|
|
7065
|
+
"state/demo-project/state/state-contract.json": true,
|
|
7037
7066
|
"tests/e2e/fixtures/ui-live-status-server.ts": true,
|
|
7038
7067
|
"tests/e2e/ui-automations-scheduler.spec.ts": true,
|
|
7039
7068
|
"tests/e2e/ui-ci-quality-jobs.spec.ts": true,
|
|
@@ -7100,6 +7129,21 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7100
7129
|
"tests/fixtures/queue-status-prd-readers/github.json": true,
|
|
7101
7130
|
"tests/fixtures/queue-status-prd-readers/linear.json": true,
|
|
7102
7131
|
"tests/fixtures/queue-status-prd-readers/notion.json": true,
|
|
7132
|
+
"tests/fixtures/state-contract/adopter/migrations/0001_initial.sql": true,
|
|
7133
|
+
"tests/fixtures/state-contract/adopter/state/inventory.json": true,
|
|
7134
|
+
"tests/fixtures/state-contract/adopter/state/state-contract.json": true,
|
|
7135
|
+
"tests/fixtures/state-contract/inventory-incomplete/migrations/0001_initial.sql": true,
|
|
7136
|
+
"tests/fixtures/state-contract/inventory-incomplete/state/inventory.json": true,
|
|
7137
|
+
"tests/fixtures/state-contract/inventory-incomplete/state/state-contract.json": true,
|
|
7138
|
+
"tests/fixtures/state-contract/leaked-notes/state/inventory.json": true,
|
|
7139
|
+
"tests/fixtures/state-contract/leaked-notes/state/state-contract.json": true,
|
|
7140
|
+
"tests/fixtures/state-contract/noop-contradicted/migrations/0001_initial.sql": true,
|
|
7141
|
+
"tests/fixtures/state-contract/noop-contradicted/state/state-contract.json": true,
|
|
7142
|
+
"tests/fixtures/state-contract/noop-valid/state/state-contract.json": true,
|
|
7143
|
+
"tests/fixtures/state-contract/stale-classification/state/inventory.json": true,
|
|
7144
|
+
"tests/fixtures/state-contract/stale-classification/state/state-contract.json": true,
|
|
7145
|
+
"tests/fixtures/state-contract/unswept-fixture/state/inventory.json": true,
|
|
7146
|
+
"tests/fixtures/state-contract/unswept-fixture/state/state-contract.json": true,
|
|
7103
7147
|
"tests/fixtures/verification/artifact_mismatch.json": true,
|
|
7104
7148
|
"tests/fixtures/verification/evidence_digest_mismatch.json": true,
|
|
7105
7149
|
"tests/fixtures/verification/evidence_kind_mismatch.json": true,
|
|
@@ -7405,6 +7449,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7405
7449
|
"tests/unit/scripts/check-learnings-budget-helpers.ts": true,
|
|
7406
7450
|
"tests/unit/scripts/check-learnings-budget.test.ts": true,
|
|
7407
7451
|
"tests/unit/scripts/codex-hook-filter.test.ts": true,
|
|
7452
|
+
"tests/unit/scripts/command-envelope.test.ts": true,
|
|
7408
7453
|
"tests/unit/scripts/cross-pollinate.test.ts": true,
|
|
7409
7454
|
"tests/unit/scripts/cursor-artifact-helpers.ts": true,
|
|
7410
7455
|
"tests/unit/scripts/detect-stale-workflow-inputs-helpers.ts": true,
|
|
@@ -7430,6 +7475,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7430
7475
|
"tests/unit/scripts/plugin-sync-workflow.test.ts": true,
|
|
7431
7476
|
"tests/unit/scripts/security-floors.test.ts": true,
|
|
7432
7477
|
"tests/unit/scripts/setup-jira-cli-config.test.ts": true,
|
|
7478
|
+
"tests/unit/scripts/state-classification.test.ts": true,
|
|
7433
7479
|
"tests/unit/scripts/threshold-ratchet-gates.test.ts": true,
|
|
7434
7480
|
"tests/unit/scripts/threshold-ratchet-wiring.test.ts": true,
|
|
7435
7481
|
"tests/unit/scripts/threshold-ratchet.test.ts": true,
|
|
@@ -7634,6 +7680,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7634
7680
|
"tests/unit/strategies/remote-agent-aws-setup.test.ts": true,
|
|
7635
7681
|
"tests/unit/strategies/repair-intake-contract.test.ts": true,
|
|
7636
7682
|
"tests/unit/strategies/repo-scope-claim.test.ts": true,
|
|
7683
|
+
"tests/unit/strategies/reset-seed-coverage-rule.test.ts": true,
|
|
7637
7684
|
"tests/unit/strategies/rework-triage-skill.test.ts": true,
|
|
7638
7685
|
"tests/unit/strategies/security-two-bucket-contract.test.ts": true,
|
|
7639
7686
|
"tests/unit/strategies/setup-automations-readiness-warning.test.ts": true,
|