@codyswann/lisa 3.15.0 → 3.16.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 +3 -5
- package/all/copy-overwrite/scripts/lib/invoked-as-script.mjs +96 -0
- package/all/copy-overwrite/scripts/lisa-command-envelope.mjs +3 -5
- package/all/copy-overwrite/scripts/lisa-work-item.mjs +3 -5
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +19 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +32 -17
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/copy-overwrite/scripts/bdd/markdown-cell.mjs +128 -0
- package/expo/copy-overwrite/scripts/bdd/render.mjs +1 -14
- package/expo/copy-overwrite/scripts/bdd-matrix.mjs +3 -3
- package/expo/copy-overwrite/scripts/check-bdd-coverage.mjs +3 -3
- package/expo/copy-overwrite/scripts/check-e2e-coverage.mjs +3 -5
- package/expo/copy-overwrite/scripts/classify-maestro-failures.mjs +5 -15
- package/expo/copy-overwrite/scripts/lib/invoked-as-script.mjs +96 -0
- 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-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-cursor/.claude-plugin/plugin.json +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-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/scripts/build-plugins.sh +29 -0
- package/scripts/check-conflict-markers.mjs +4 -5
- package/scripts/detect-stale-workflow-inputs.mjs +4 -5
- package/scripts/lib/invoked-as-script.mjs +93 -0
- package/scripts/plugin-parity-drift.mjs +4 -5
- package/scripts/plugin-routing-validate.mjs +4 -5
- package/typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs +2 -5
- package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +3 -5
- package/typescript/copy-overwrite/scripts/check-verification-coverage.mjs +3 -5
- package/typescript/copy-overwrite/scripts/lib/invoked-as-script.mjs +96 -0
- package/ui/index.html +271 -12
package/ui/index.html
CHANGED
|
@@ -1535,12 +1535,31 @@
|
|
|
1535
1535
|
font-size: 13px;
|
|
1536
1536
|
color: var(--ink);
|
|
1537
1537
|
}
|
|
1538
|
-
.intake-
|
|
1539
|
-
|
|
1540
|
-
|
|
1538
|
+
.intake-control-detail {
|
|
1539
|
+
margin-top: 5px;
|
|
1540
|
+
max-width: 68ch;
|
|
1541
1541
|
font-size: 11px;
|
|
1542
1542
|
color: var(--muted);
|
|
1543
|
-
|
|
1543
|
+
}
|
|
1544
|
+
.intake-control-detail summary {
|
|
1545
|
+
width: fit-content;
|
|
1546
|
+
cursor: pointer;
|
|
1547
|
+
color: var(--accent);
|
|
1548
|
+
font-weight: 650;
|
|
1549
|
+
list-style-position: inside;
|
|
1550
|
+
}
|
|
1551
|
+
.intake-control-detail-body {
|
|
1552
|
+
display: grid;
|
|
1553
|
+
gap: 5px;
|
|
1554
|
+
margin-top: 6px;
|
|
1555
|
+
padding: 8px 10px;
|
|
1556
|
+
border-left: 2px solid var(--line-strong);
|
|
1557
|
+
background: var(--surface2);
|
|
1558
|
+
border-radius: 0 6px 6px 0;
|
|
1559
|
+
}
|
|
1560
|
+
.intake-control-detail-body b {
|
|
1561
|
+
color: var(--ink);
|
|
1562
|
+
font-weight: 650;
|
|
1544
1563
|
}
|
|
1545
1564
|
.intake-item .control {
|
|
1546
1565
|
justify-content: flex-end;
|
|
@@ -5097,7 +5116,7 @@
|
|
|
5097
5116
|
/* ---------------------------------- Readiness (intake) ---------------------------------- */
|
|
5098
5117
|
DATA.sections.readiness = {
|
|
5099
5118
|
title: "Readiness",
|
|
5100
|
-
desc: "The onboarding questionnaire — and the working Annex B self-assessment instrument of TASC (spec/tasc-0.1-draft.md). Answer
|
|
5119
|
+
desc: "The conversational onboarding questionnaire — and the working Annex B self-assessment instrument of TASC (spec/tasc-0.1-draft.md). Answer how you make each control real; expand Control detail for its formal requirement, criteria, and expected evidence. The meter shows how ready you are. Nothing is required all at once — an unanswered question is a known gap, not a failure.",
|
|
5101
5120
|
src: "intake · maps onto .lisa.config.json",
|
|
5102
5121
|
blocks: [
|
|
5103
5122
|
{
|
|
@@ -5207,6 +5226,30 @@
|
|
|
5207
5226
|
"Bare metal / VM",
|
|
5208
5227
|
],
|
|
5209
5228
|
},
|
|
5229
|
+
{
|
|
5230
|
+
q: "What durable scheduler keeps agents moving when nobody prompts them?",
|
|
5231
|
+
help: "Unattended work needs more than a place to run: a durable scheduler must claim the next eligible item, survive a closed laptop, record every trigger, and make missed-run behavior explicit.",
|
|
5232
|
+
criteria: "AC7.1",
|
|
5233
|
+
formal:
|
|
5234
|
+
"Factories MUST run from declared durable schedulers that claim eligible work without human prompting and define observable behavior for missed runs.",
|
|
5235
|
+
evidence:
|
|
5236
|
+
"Scheduler registration, trigger history, queue-claim record, an exercised missed-run recovery, and an independent liveness signal.",
|
|
5237
|
+
introduced: "0.7.0",
|
|
5238
|
+
kind: "select",
|
|
5239
|
+
options: [
|
|
5240
|
+
"Durable scheduler + automatic claims + exercised missed-run recovery",
|
|
5241
|
+
"Durable scheduler, claims or missed runs handled manually",
|
|
5242
|
+
"Laptop-dependent scheduler",
|
|
5243
|
+
"Humans start each run",
|
|
5244
|
+
],
|
|
5245
|
+
via: [
|
|
5246
|
+
"CI scheduler",
|
|
5247
|
+
"Vendor-hosted scheduler",
|
|
5248
|
+
"Self-hosted durable scheduler",
|
|
5249
|
+
"Local scheduler",
|
|
5250
|
+
"None",
|
|
5251
|
+
],
|
|
5252
|
+
},
|
|
5210
5253
|
{
|
|
5211
5254
|
q: "Which coding agents operate this project?",
|
|
5212
5255
|
help: "The staff that run the factories. More than one is normal — parity is maintained across all of them.",
|
|
@@ -5289,6 +5332,30 @@
|
|
|
5289
5332
|
"None",
|
|
5290
5333
|
],
|
|
5291
5334
|
},
|
|
5335
|
+
{
|
|
5336
|
+
q: "How are model, effort, and tool configuration assigned by task class?",
|
|
5337
|
+
help: "Qualification says a model can do work; routing decides which work it should do. Capability is heterogeneous, so a global leaderboard or whichever model an agent happens to choose is not an assignment policy.",
|
|
5338
|
+
criteria: "AC8.3 · AC8.7",
|
|
5339
|
+
formal:
|
|
5340
|
+
"Model, effort, and tool assignments MUST be declared per task class and supported by entity-owned, distributional qualification evidence no broader than the evaluated class.",
|
|
5341
|
+
evidence:
|
|
5342
|
+
"Versioned routing policy, task-class definitions, qualifying evaluation results, fallback behavior, and assignment records from actual runs.",
|
|
5343
|
+
introduced: "0.7.0",
|
|
5344
|
+
kind: "select",
|
|
5345
|
+
options: [
|
|
5346
|
+
"Evidence-based routing per task class, with qualified fallback",
|
|
5347
|
+
"One default configuration qualified across the complete work mix",
|
|
5348
|
+
"Informal routing by cost or reputation",
|
|
5349
|
+
"Each agent chooses",
|
|
5350
|
+
],
|
|
5351
|
+
via: [
|
|
5352
|
+
"Policy-as-code router",
|
|
5353
|
+
"Evaluation platform",
|
|
5354
|
+
"Workflow configuration",
|
|
5355
|
+
"In-house routing service",
|
|
5356
|
+
"None",
|
|
5357
|
+
],
|
|
5358
|
+
},
|
|
5292
5359
|
{
|
|
5293
5360
|
q: "Do agent-program and model qualifications report repeated-run distributions?",
|
|
5294
5361
|
help: "TASC P10, P11, AC8.2 and AC8.3. A single lucky run does not qualify a prompt, model or effort-level change. The evidence names the condition tested, number of repetitions, and distribution of outcomes.",
|
|
@@ -5488,6 +5555,55 @@
|
|
|
5488
5555
|
"None",
|
|
5489
5556
|
],
|
|
5490
5557
|
},
|
|
5558
|
+
{
|
|
5559
|
+
q: "Does every user-facing requirement and critical state map to an executable end-to-end journey?",
|
|
5560
|
+
help: "Owning an E2E tool proves no coverage. The governed artifact is a requirement-to-journey matrix covering critical paths plus loading, empty, error, permission, responsive, and accessibility states where applicable.",
|
|
5561
|
+
criteria: "SI4 · UX5",
|
|
5562
|
+
formal:
|
|
5563
|
+
"Every user-facing requirement and critical interaction state MUST map to an executable journey against a running build, with unmapped requirements reported as release-blocking gaps.",
|
|
5564
|
+
evidence:
|
|
5565
|
+
"Current requirement-to-journey matrix, executable journey identifiers, state and viewport inventory, and a seeded unmapped-requirement failure.",
|
|
5566
|
+
introduced: "0.7.0",
|
|
5567
|
+
kind: "select",
|
|
5568
|
+
options: [
|
|
5569
|
+
"Complete live matrix; unmapped requirements block release",
|
|
5570
|
+
"Critical journeys mapped, secondary states incomplete",
|
|
5571
|
+
"Tests exist without a coverage map",
|
|
5572
|
+
"No executable journey coverage",
|
|
5573
|
+
],
|
|
5574
|
+
via: [
|
|
5575
|
+
"Generated traceability matrix",
|
|
5576
|
+
"Test-management platform",
|
|
5577
|
+
"Requirements-linked test metadata",
|
|
5578
|
+
"In-house coverage registry",
|
|
5579
|
+
"None",
|
|
5580
|
+
],
|
|
5581
|
+
},
|
|
5582
|
+
{
|
|
5583
|
+
q: "How is end-to-end proof tiered without weakening the release gate?",
|
|
5584
|
+
help: "Running every journey serially on every commit wastes time; skipping slow journeys before release weakens the control. Tier by changed surface and risk, parallelize the required release suite, and move fresh exploration outside the per-change critical path.",
|
|
5585
|
+
criteria: "SI4 · SI9 · AC8.1",
|
|
5586
|
+
formal:
|
|
5587
|
+
"The ADS MUST select and parallelize E2E proof by declared change and risk rules while ensuring every applicable critical journey passes before release.",
|
|
5588
|
+
evidence:
|
|
5589
|
+
"Suite-tier policy, change-to-journey selector tests, shard aggregation proof, release-gate configuration, and scheduled exploratory-run history.",
|
|
5590
|
+
introduced: "0.7.0",
|
|
5591
|
+
kind: "select",
|
|
5592
|
+
options: [
|
|
5593
|
+
"Risk-selected per change + parallel full applicable release gate + continuous exploration",
|
|
5594
|
+
"Parallel full suite on every change",
|
|
5595
|
+
"Fast smoke in CI, slow coverage after release",
|
|
5596
|
+
"Slow tests are skipped when they become inconvenient",
|
|
5597
|
+
],
|
|
5598
|
+
via: [
|
|
5599
|
+
"Playwright projects / shards",
|
|
5600
|
+
"CI test selection",
|
|
5601
|
+
"Test-impact analysis",
|
|
5602
|
+
"Device-cloud matrix",
|
|
5603
|
+
"In-house orchestrator",
|
|
5604
|
+
"None",
|
|
5605
|
+
],
|
|
5606
|
+
},
|
|
5491
5607
|
{
|
|
5492
5608
|
q: "Do you run mutation testing?",
|
|
5493
5609
|
help: "Coverage proves a line ran; mutation proves a test would fail if that line were wrong — it keeps coverage honest.",
|
|
@@ -5762,6 +5878,30 @@
|
|
|
5762
5878
|
"None",
|
|
5763
5879
|
],
|
|
5764
5880
|
},
|
|
5881
|
+
{
|
|
5882
|
+
q: "When an agent crosses repositories, how are the destination repository's controls activated?",
|
|
5883
|
+
help: "Cross-repository work changes the authority boundary. The agent must re-resolve the destination's rules, hooks, skills, permissions, and evidence contract instead of carrying the originating repository's policy across or trusting a foreign instruction file automatically.",
|
|
5884
|
+
criteria: "AC3.2 · AC5.2–AC5.3 · AC5.9",
|
|
5885
|
+
formal:
|
|
5886
|
+
"At every repository boundary, the ADS MUST trust-gate local instructions, resolve the destination repository's declared controls, and prove equivalent enforcement before acting there.",
|
|
5887
|
+
evidence:
|
|
5888
|
+
"Boundary-transition log, destination control-register resolution, hook and skill activation proof, permission re-evaluation, and a seeded conflicting-policy exercise.",
|
|
5889
|
+
introduced: "0.7.0",
|
|
5890
|
+
kind: "select",
|
|
5891
|
+
options: [
|
|
5892
|
+
"Destination controls re-resolved and exercised at every boundary",
|
|
5893
|
+
"Destination instructions loaded, enforcement not re-proven",
|
|
5894
|
+
"Originating repository rules follow the agent",
|
|
5895
|
+
"No cross-repository governance",
|
|
5896
|
+
],
|
|
5897
|
+
via: [
|
|
5898
|
+
"Per-repository policy resolver",
|
|
5899
|
+
"Isolated workspaces / containers",
|
|
5900
|
+
"Control-register reconciliation",
|
|
5901
|
+
"Trust-gated instruction loader",
|
|
5902
|
+
"None",
|
|
5903
|
+
],
|
|
5904
|
+
},
|
|
5765
5905
|
{
|
|
5766
5906
|
q: "Can an agent add a new dependency unreviewed?",
|
|
5767
5907
|
help: "Models hallucinate plausible package names and attackers register them (slopsquatting), alongside classic typosquats. An agent that can install unreviewed is the softest supply-chain target there is.",
|
|
@@ -5901,6 +6041,11 @@
|
|
|
5901
6041
|
{
|
|
5902
6042
|
q: "Is your house coding style enforced automatically?",
|
|
5903
6043
|
help: "Whatever conventions you've chosen — immutability, functional patterns, error handling, naming. This is elective: having no house style is a valid answer. But a style you've decided on and don't enforce is the exposed case, because an agent will drift from what it was never made to follow.",
|
|
6044
|
+
criteria: "SI7",
|
|
6045
|
+
formal:
|
|
6046
|
+
"Declared coding philosophies and development methods — including immutability or test-first development where adopted — MUST be represented by executable controls or measured as advisory controls.",
|
|
6047
|
+
evidence:
|
|
6048
|
+
"Versioned standards declaration, enforcing rules or red-green test-first trace, advisory adherence measurement, and seeded conforming and violating examples.",
|
|
5904
6049
|
kind: "select",
|
|
5905
6050
|
options: [
|
|
5906
6051
|
"Codified and enforced",
|
|
@@ -6000,6 +6145,32 @@
|
|
|
6000
6145
|
"No UI in this project",
|
|
6001
6146
|
],
|
|
6002
6147
|
},
|
|
6148
|
+
{
|
|
6149
|
+
q: "Is every implemented screen mechanically compared with its source design?",
|
|
6150
|
+
help: "Design-system inputs constrain how a screen is built; they do not prove the rendered outcome matches. Compare the running implementation across declared viewports, themes, and interaction states, with reviewed tolerances rather than an agent's visual assertion.",
|
|
6151
|
+
criteria: "UX4 · §7",
|
|
6152
|
+
formal:
|
|
6153
|
+
"Implemented user interfaces MUST pass independent, mechanical visual conformance against the approved source design across the declared viewport and state matrix before release.",
|
|
6154
|
+
evidence:
|
|
6155
|
+
"Approved design reference, viewport and state matrix, visual-diff artifacts, declared tolerances, independent adjudication, and a seeded visual mismatch.",
|
|
6156
|
+
introduced: "0.7.0",
|
|
6157
|
+
kind: "select",
|
|
6158
|
+
options: [
|
|
6159
|
+
"Mechanical visual comparison across declared viewports and states, independently adjudicated",
|
|
6160
|
+
"Automated snapshots without an approved design reference",
|
|
6161
|
+
"Human or agent eyeballing",
|
|
6162
|
+
"No visual conformance check",
|
|
6163
|
+
"No UI in this project",
|
|
6164
|
+
],
|
|
6165
|
+
via: [
|
|
6166
|
+
"Playwright visual comparisons",
|
|
6167
|
+
"Chromatic",
|
|
6168
|
+
"Percy",
|
|
6169
|
+
"Applitools",
|
|
6170
|
+
"Design-tool comparison",
|
|
6171
|
+
"None",
|
|
6172
|
+
],
|
|
6173
|
+
},
|
|
6003
6174
|
],
|
|
6004
6175
|
},
|
|
6005
6176
|
{
|
|
@@ -6048,14 +6219,46 @@
|
|
|
6048
6219
|
],
|
|
6049
6220
|
},
|
|
6050
6221
|
{
|
|
6051
|
-
q: "When
|
|
6052
|
-
help: "
|
|
6222
|
+
q: "When CI or another gate rejects agent output, what happens next?",
|
|
6223
|
+
help: "A rejection should automatically return the failure evidence and original specification to a bounded remediation loop. The loop reruns the authoritative gate, obtains independent verification, and escalates with a decision-ready packet rather than retrying forever or waiting for a human to notice.",
|
|
6224
|
+
criteria: "AC8.1 · AC7.3 · §7",
|
|
6225
|
+
formal:
|
|
6226
|
+
"Rejected agent work MUST enter a bounded automatic repair, rerun, and independent-verification loop; exhaustion MUST produce a decision-ready escalation without weakening the gate.",
|
|
6227
|
+
evidence:
|
|
6228
|
+
"Repair-loop configuration, attempt bound, gate rerun history, independent success marker, and an exercised exhaustion-to-escalation path.",
|
|
6053
6229
|
kind: "select",
|
|
6054
|
-
value:
|
|
6230
|
+
value:
|
|
6231
|
+
"Bounded automatic repair, rerun, and independent verification",
|
|
6055
6232
|
options: [
|
|
6056
|
-
"
|
|
6057
|
-
"
|
|
6233
|
+
"Bounded automatic repair, rerun, and independent verification",
|
|
6234
|
+
"Regenerated from the spec once, then decision-ready escalation",
|
|
6235
|
+
"The agent patches once; a human notices further failure",
|
|
6058
6236
|
"A human patches it by hand",
|
|
6237
|
+
"Retries indefinitely or silently stalls",
|
|
6238
|
+
],
|
|
6239
|
+
},
|
|
6240
|
+
{
|
|
6241
|
+
q: "Which authoritative gates run before work reaches CI?",
|
|
6242
|
+
help: "CI remains the authority, but discovering formatting, structure, secret, test, or policy failures only after a remote run wastes the factory's slowest feedback loop. Agent and Git hooks should mirror the applicable server-side controls from the same source and be drift-checked.",
|
|
6243
|
+
criteria: "AC5.2 · AC5.8–AC5.9",
|
|
6244
|
+
formal:
|
|
6245
|
+
"Applicable authoritative controls MUST have equivalent pre-CI mirrors generated from the same declared obligations, with drift against the server-side enforcement detected automatically.",
|
|
6246
|
+
evidence:
|
|
6247
|
+
"Control-to-hook mapping, generated hook artifacts, parity test, seeded local rejection, seeded legitimate allowance, and server-side backstop proof.",
|
|
6248
|
+
introduced: "0.7.0",
|
|
6249
|
+
kind: "select",
|
|
6250
|
+
options: [
|
|
6251
|
+
"Agent hooks + Git hooks generated from authoritative controls and drift-checked",
|
|
6252
|
+
"Some local mirrors, configured separately",
|
|
6253
|
+
"Developer convention only",
|
|
6254
|
+
"Nothing — CI discovers every failure",
|
|
6255
|
+
],
|
|
6256
|
+
via: [
|
|
6257
|
+
"Agent pre-tool hooks",
|
|
6258
|
+
"pre-commit / pre-push hooks",
|
|
6259
|
+
"Policy-as-code generator",
|
|
6260
|
+
"Local CI runner",
|
|
6261
|
+
"None",
|
|
6059
6262
|
],
|
|
6060
6263
|
},
|
|
6061
6264
|
{
|
|
@@ -6180,6 +6383,30 @@
|
|
|
6180
6383
|
"None",
|
|
6181
6384
|
],
|
|
6182
6385
|
},
|
|
6386
|
+
{
|
|
6387
|
+
q: "When a deployment fails before reaching users, what heals it?",
|
|
6388
|
+
help: "A failed deployment is different from a successful release that later proves unhealthy. Classify the failure, retry only idempotent and transient operations, repair reproducible configuration or infrastructure defects through the normal change path, and stop at a declared bound.",
|
|
6389
|
+
criteria: "AC7.2–AC7.3 · AC8.5",
|
|
6390
|
+
formal:
|
|
6391
|
+
"Failed deployments MUST enter a bounded, idempotent recovery path that distinguishes transient retry from change-requiring repair and emits a decision-ready escalation when recovery is exhausted.",
|
|
6392
|
+
evidence:
|
|
6393
|
+
"Failure classifier, idempotency proof, retry bound, repair work-item history, deployment rerun evidence, and an exercised terminal escalation.",
|
|
6394
|
+
introduced: "0.7.0",
|
|
6395
|
+
kind: "select",
|
|
6396
|
+
options: [
|
|
6397
|
+
"Classified bounded retry or repair, redeployed and verified automatically",
|
|
6398
|
+
"Automatic blind retry",
|
|
6399
|
+
"Alert sent; a human repairs it",
|
|
6400
|
+
"Pipeline remains failed until someone notices",
|
|
6401
|
+
],
|
|
6402
|
+
via: [
|
|
6403
|
+
"Deployment orchestrator",
|
|
6404
|
+
"Workflow repair automation",
|
|
6405
|
+
"Infrastructure reconciliation",
|
|
6406
|
+
"Incident automation",
|
|
6407
|
+
"None",
|
|
6408
|
+
],
|
|
6409
|
+
},
|
|
6183
6410
|
{
|
|
6184
6411
|
q: "How do changes reach users?",
|
|
6185
6412
|
help: "Progressive delivery bounds the blast radius of an agent's mistake to a fraction of traffic.",
|
|
@@ -11311,8 +11538,40 @@
|
|
|
11311
11538
|
row.appendChild(el("span", "intake-dot"));
|
|
11312
11539
|
const text = el("div");
|
|
11313
11540
|
text.appendChild(el("div", "intake-q", esc(item.q)));
|
|
11314
|
-
|
|
11315
|
-
|
|
11541
|
+
const detail = el("details", "intake-control-detail");
|
|
11542
|
+
detail.appendChild(el("summary", "", "Control detail"));
|
|
11543
|
+
const detailBody = el("div", "intake-control-detail-body");
|
|
11544
|
+
const criteria =
|
|
11545
|
+
item.criteria ||
|
|
11546
|
+
group.criteria ||
|
|
11547
|
+
(group.label.match(/\(([^)]+)\)/) || [])[1];
|
|
11548
|
+
if (criteria) {
|
|
11549
|
+
const criterion = el("div");
|
|
11550
|
+
criterion.innerHTML = "<b>Criteria:</b> " + esc(String(criteria));
|
|
11551
|
+
detailBody.appendChild(criterion);
|
|
11552
|
+
}
|
|
11553
|
+
const requirement = item.formal || item.help;
|
|
11554
|
+
if (requirement) {
|
|
11555
|
+
const formal = el("div");
|
|
11556
|
+
formal.innerHTML =
|
|
11557
|
+
"<b>Requirement:</b> " + esc(String(requirement));
|
|
11558
|
+
detailBody.appendChild(formal);
|
|
11559
|
+
}
|
|
11560
|
+
if (item.formal && item.help) {
|
|
11561
|
+
const why = el("div");
|
|
11562
|
+
why.innerHTML = "<b>Why it matters:</b> " + esc(item.help);
|
|
11563
|
+
detailBody.appendChild(why);
|
|
11564
|
+
}
|
|
11565
|
+
const evidence = el("div");
|
|
11566
|
+
evidence.innerHTML =
|
|
11567
|
+
"<b>Evidence:</b> " +
|
|
11568
|
+
esc(
|
|
11569
|
+
item.evidence ||
|
|
11570
|
+
"Current configuration, its authoritative enforcement point, and recent exercised evidence that the control blocks or permits the intended case."
|
|
11571
|
+
);
|
|
11572
|
+
detailBody.appendChild(evidence);
|
|
11573
|
+
detail.appendChild(detailBody);
|
|
11574
|
+
text.appendChild(detail);
|
|
11316
11575
|
row.appendChild(text);
|
|
11317
11576
|
// Reuse buildControl so the answer widgets match the rest of the
|
|
11318
11577
|
// console and pick up dirty-state tracking.
|