@codyswann/lisa 2.201.0 → 2.202.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.
Files changed (97) hide show
  1. package/README.md +22 -10
  2. package/package.json +1 -1
  3. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  4. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  5. package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/SKILL.md +1 -0
  6. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +28 -1
  7. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  8. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  9. package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +12 -4
  10. package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +2 -2
  11. package/plugins/lisa/rules/eager/factory-model.md +36 -0
  12. package/plugins/lisa/rules/reference/factory-model.md +87 -0
  13. package/plugins/lisa/skills/lisa-automation-status/SKILL.md +1 -0
  14. package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +28 -1
  15. package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  16. package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  17. package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +13 -5
  18. package/plugins/lisa/skills/lisa-tear-down-automations/SKILL.md +3 -3
  19. package/plugins/lisa-agy/plugin.json +1 -1
  20. package/plugins/lisa-agy/skills/lisa-automation-status/SKILL.md +1 -0
  21. package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +28 -1
  22. package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  23. package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  24. package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +13 -5
  25. package/plugins/lisa-agy/skills/lisa-tear-down-automations/SKILL.md +3 -3
  26. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  29. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-copilot/rules/eager/factory-model.md +36 -0
  33. package/plugins/lisa-copilot/rules/reference/factory-model.md +87 -0
  34. package/plugins/lisa-copilot/skills/lisa-automation-status/SKILL.md +1 -0
  35. package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +28 -1
  36. package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  37. package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  38. package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +13 -5
  39. package/plugins/lisa-copilot/skills/lisa-tear-down-automations/SKILL.md +3 -3
  40. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-cursor/rules/factory-model-reference.mdc +92 -0
  42. package/plugins/lisa-cursor/rules/factory-model.mdc +41 -0
  43. package/plugins/lisa-cursor/skills/lisa-automation-status/SKILL.md +1 -0
  44. package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +28 -1
  45. package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  46. package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  47. package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +13 -5
  48. package/plugins/lisa-cursor/skills/lisa-tear-down-automations/SKILL.md +3 -3
  49. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  51. package/plugins/lisa-expo-agy/plugin.json +1 -1
  52. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  56. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  57. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  61. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  62. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  66. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  67. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  71. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  72. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  76. package/plugins/lisa-rails-agy/plugin.json +1 -1
  77. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  81. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  82. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  86. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  87. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  89. package/plugins/src/base/rules/eager/factory-model.md +36 -0
  90. package/plugins/src/base/rules/reference/factory-model.md +87 -0
  91. package/plugins/src/base/skills/lisa-automation-status/SKILL.md +1 -0
  92. package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +28 -1
  93. package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
  94. package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +27 -0
  95. package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +13 -5
  96. package/plugins/src/base/skills/lisa-tear-down-automations/SKILL.md +3 -3
  97. package/ui/index.html +151 -25
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lisa-setup-automations
3
- description: "Set up the recurring Lisa automations on the local workstation using the CURRENT runtime's native scheduler — Codex automations (the native automations / automation_update mechanism) or, on Claude, /schedule. This skill is a declarative specification: it states WHICH automations to create, how often, and with which parameters; it does not template schedule files or run scheduling code itself — the runtime's native automation mechanism does the creating. Creates five automations: intake-repair (every 60 min), intake PRD (every 60 min), intake tickets (every 10 min), exploratory-bugs (once a day), exploratory-prds (once a day). Two flags — auto-start-prds and auto-start-tickets — control whether the ideated PRDs / filed bug tickets are created auto-pickup-ready (prd_ready / ready) or left for human review (default false). Tear down with /tear-down-automations."
3
+ description: "Set up the recurring Lisa automations on the local workstation using the CURRENT runtime's native scheduler — Codex automations (the native automations / automation_update mechanism) or, on Claude, /schedule. This skill is a declarative specification: it states WHICH automations to create, how often, and with which parameters; it does not template schedule files or run scheduling code itself — the runtime's native automation mechanism does the creating. Creates six automations: intake-repair (every 60 min), intake PRD (every 60 min), intake tickets (every 10 min), exploratory-bugs (once a day), exploratory-prds (once a day), monitor (once a day). Two flags — auto-start-prds and auto-start-tickets — control whether the ideated PRDs / filed bug tickets are created auto-pickup-ready (prd_ready / ready, default true) or left for human review. Tear down with /tear-down-automations."
4
4
  allowed-tools: ["Skill", "Bash", "Read"]
5
5
  ---
6
6
 
@@ -28,18 +28,20 @@ create them; invoke the runtime's automation tool with the spec below.
28
28
 
29
29
  ## Parameters
30
30
 
31
- - `auto-start-prds` (default **false**) — passed as `prd_ready` to the **exploratory-prds**
31
+ - `auto-start-prds` (default **true**) — passed as `prd_ready` to the **exploratory-prds**
32
32
  automation. `true` → ideated PRDs are created `prd-ready` (auto-picked-up by PRD intake); `false` →
33
33
  created as drafts for human review. When `true`, `/lisa:project-ideation` still checks the configured
34
34
  PRD queue before writing: existing `prd-ready`, `prd-in-review`, `prd-blocked`, unresolved
35
35
  `prd-ticketed`, or unresolved source-reader pressure can intentionally turn the automation cycle into
36
36
  a blocked/idle outcome instead of creating another ready PRD.
37
- - `auto-start-tickets` (default **false**) — passed as `ready` to the **exploratory-bugs**
37
+ - `auto-start-tickets` (default **true**) — passed as `ready` to the **exploratory-bugs**
38
38
  automation. `true` → filed bug/usability tickets are created build-ready (auto-picked-up by ticket
39
39
  intake); `false` → created in the backlog for human triage.
40
40
 
41
- Defaults match the underlying skillsnothing auto-starts unless explicitly opted in. The two flags
42
- affect **only** the two exploratory automations.
41
+ The defaults are autonomous by design the factory model wants inputs flowing through the gates
42
+ without a human between the loops and the pipeline. Pass `false` explicitly to opt a project into
43
+ human triage. The two flags affect **only** the two exploratory automations; the intake gates'
44
+ adversarial validation remains the quality control either way.
43
45
 
44
46
  ## The automations to create
45
47
 
@@ -62,6 +64,7 @@ report the exact conflicting path(s).
62
64
  | **intake-tickets** | `/lisa:intake <build queue>` (e.g. `github intake_mode=build`) | every **10 minutes** |
63
65
  | **exploratory-bugs** | `/lisa-<stack>:exploratory-qa ready=<auto-start-tickets>` | **once a day** |
64
66
  | **exploratory-prds** | `/lisa:project-ideation prd_ready=<auto-start-prds>` | **once a day** |
67
+ | **monitor** | `/lisa:monitor` | **once a day** |
65
68
 
66
69
  For a Codex `rrule`: every 60 min → `FREQ=HOURLY;INTERVAL=1`; every 10 min →
67
70
  `FREQ=MINUTELY;INTERVAL=10`; once a day → `FREQ=DAILY;INTERVAL=1`.
@@ -92,6 +95,11 @@ place (same names) rather than creating duplicates.
92
95
  - **exploratory-bugs** is created only when the project ships an `exploratory-qa` command (the
93
96
  `expo` / `rails` / `harper-fabric` stacks). If the project has no `lisa-exploratory-qa` skill/command, skip that
94
97
  automation and note it — do not invent a command that doesn't exist.
98
+ - **monitor** is created unconditionally: `/lisa:monitor` resolves the connected observability
99
+ providers itself and reports gaps (per its `monitor.gapTiers` config) rather than failing when a
100
+ provider is absent, so an unconnected project gets gap findings instead of a broken automation.
101
+ Its findings become tracker tickets, feeding the pipeline at the build gate like every other
102
+ input.
95
103
  - If the runtime has no native scheduler, or the intake queues can't be resolved from config, stop
96
104
  and report what's missing rather than guessing.
97
105
  - For Codex, if the durable checkout cannot be created, fetched, or verified as a non-bare Git work
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lisa-tear-down-automations
3
- description: "Remove every recurring Lisa automation that /setup-automations created for this project (the lisa-auto-<project>-* set: intake-repair, intake-prd, intake-tickets, exploratory-bugs, exploratory-prds) using the CURRENT runtime's native scheduler — Codex automations or, on Claude, /schedule. This skill is a declarative specification: it identifies WHICH automations to remove; it does not run teardown scripts. Removes only this project's Lisa automations — never other projects' automations or non-Lisa ones. The inverse of /setup-automations."
3
+ description: "Remove every recurring Lisa automation that /setup-automations created for this project (the lisa-auto-<project>-* set: intake-repair, intake-prd, intake-tickets, exploratory-bugs, exploratory-prds, monitor) using the CURRENT runtime's native scheduler — Codex automations or, on Claude, /schedule. This skill is a declarative specification: it identifies WHICH automations to remove; it does not run teardown scripts. Removes only this project's Lisa automations — never other projects' automations or non-Lisa ones. The inverse of /setup-automations."
4
4
  allowed-tools: ["Skill", "Bash", "Read"]
5
5
  ---
6
6
 
@@ -21,9 +21,9 @@ removes them with its **native** scheduling mechanism.
21
21
 
22
22
  ## Scope (remove only what setup created)
23
23
 
24
- - Remove the five automations `/setup-automations` creates for the current project, matched by the
24
+ - Remove the six automations `/setup-automations` creates for the current project, matched by the
25
25
  stable `lisa-auto-<project>-` name prefix: `intake-repair`, `intake-prd`, `intake-tickets`,
26
- `exploratory-bugs`, `exploratory-prds`.
26
+ `exploratory-bugs`, `exploratory-prds`, `monitor`.
27
27
  - **Never** remove automations for a different project, or any non-Lisa automation (e.g. unrelated
28
28
  crawlers/ingestors). Match strictly on the `lisa-auto-<project>-` prefix for THIS project; when in
29
29
  doubt about an automation's ownership, leave it and report it rather than deleting it.
package/ui/index.html CHANGED
@@ -1280,9 +1280,27 @@
1280
1280
  /* ---------------------------------- Overview ---------------------------------- */
1281
1281
  DATA.sections.overview = {
1282
1282
  title: "Overview",
1283
- desc: "Everything Lisa governs for this project at a glance. Values come from .lisa.config.json, the detected stack templates, and shipped defaults.",
1283
+ desc: "Lisa runs this project as a set of software factories agent-operated production lines that build, verify, and ship with as few humans as possible. Everything below is what the factories are governed by.",
1284
1284
  src: ".lisa.config.json · .lisa.config.local.json",
1285
1285
  blocks: [
1286
+ {
1287
+ type: "flow",
1288
+ title:
1289
+ "The four factories — humans hand off at the gates, never inside",
1290
+ states: [
1291
+ { name: "Research → PRDs" },
1292
+ { name: "⛩ gate" },
1293
+ { name: "Plan → work units" },
1294
+ { name: "⛩ gate" },
1295
+ { name: "Implement → software" },
1296
+ { name: "⛩ gate" },
1297
+ { name: "Verify → go/no-go", terminal: true },
1298
+ ],
1299
+ },
1300
+ {
1301
+ type: "callout",
1302
+ text: "<b>The gates are adversarial.</b> Agents, humans, and automations submit inputs; an intake agent admits only work that is unambiguous and that the factory has provable tooling access to execute — everything else is rejected and raised. Three loops feed the pipeline on schedule: <b>QA</b> (exploratory bugs), <b>Product Planning</b> (ideated PRDs), and <b>Monitoring</b> (observability regressions). Verify failures flow straight back into Implement as build-ready tickets. The goal: <b>non-technical people creating scalable software</b> — everything that crosses a gate is written for them, and end users never talk to a coding agent.",
1303
+ },
1286
1304
  {
1287
1305
  type: "tiles",
1288
1306
  tiles: [
@@ -1301,7 +1319,11 @@
1301
1319
  v: "9",
1302
1320
  s: "incl. CodeRabbit + GitGuardian",
1303
1321
  },
1304
- { k: "Automations", v: "5", s: "intake, repair, exploratory" },
1322
+ {
1323
+ k: "Automations",
1324
+ v: "6",
1325
+ s: "intake, repair, loops — all healthy",
1326
+ },
1305
1327
  ],
1306
1328
  },
1307
1329
  {
@@ -1404,7 +1426,7 @@
1404
1426
  },
1405
1427
  {
1406
1428
  label: "Schedule the automations",
1407
- desc: "Creates the intake, repair, and exploratory crons on the harness’s native scheduler.",
1429
+ desc: "Creates the six-automation fleet — intake, repair, and the QA / Product Planning / Monitoring loops — on the harness’s native scheduler.",
1408
1430
  command: "/lisa:setup-automations",
1409
1431
  done: false,
1410
1432
  },
@@ -1580,7 +1602,7 @@
1580
1602
  v: "Audits the connected observability providers against the alert thresholds and files regression tickets",
1581
1603
  },
1582
1604
  { t: "text", v: "On demand between scheduled runs" },
1583
- { t: "mono", v: "" },
1605
+ { t: "mono", v: "monitor" },
1584
1606
  ],
1585
1607
  [
1586
1608
  { t: "mono", v: "/lisa:debrief" },
@@ -3004,17 +3026,19 @@
3004
3026
  /* ---------------------------------- Automations ---------------------------------- */
3005
3027
  DATA.sections.automations = {
3006
3028
  title: "Automations",
3007
- desc: "Recurring agents Lisa schedules on the harness’s native scheduler (Claude /schedule, Codex automations). Names carry a stable lisa-auto-<project>- prefix so teardown is precise.",
3029
+ desc: "The scheduled fleet that runs the factories: pipeline movers (intake, repair) and the three feeding loops (QA, Product Planning, Monitoring), on the harness\u2019s native scheduler. Names carry a stable lisa-auto-<project>- prefix so teardown is precise.",
3008
3030
  src: "plugins/src/base/skills/lisa-setup-automations",
3009
3031
  blocks: [
3010
3032
  {
3011
3033
  type: "table",
3012
3034
  card: "Scheduled jobs",
3035
+ note: "Status and next run are mocked \u2014 live wiring is LCW-1 (#1544)",
3013
3036
  cols: [
3014
3037
  "Automation",
3015
3038
  "What it does",
3016
- "Command",
3017
3039
  "Cadence",
3040
+ "Last run",
3041
+ "Next run",
3018
3042
  "Enabled",
3019
3043
  ],
3020
3044
  rows: [
@@ -3022,80 +3046,161 @@
3022
3046
  { t: "mono", v: "intake-tickets" },
3023
3047
  {
3024
3048
  t: "text",
3025
- v: "Claims the next build-ready ticket from the tracker and runs the full build flow on it one item per cycle",
3049
+ v: "Claims the next build-ready ticket and runs the full build flow on it \u2014 one item per cycle",
3026
3050
  },
3027
- { t: "mono", v: "/lisa:intake <build queue>" },
3028
3051
  {
3029
3052
  t: "select",
3030
3053
  v: "every 10 min",
3031
3054
  options: ["every 10 min", "every 30 min", "every 60 min"],
3032
3055
  },
3056
+ {
3057
+ t: "run",
3058
+ ok: true,
3059
+ v: "12:50",
3060
+ reason: "ok \u2014 queue empty, exited clean",
3061
+ },
3062
+ { t: "mono", v: "13:00" },
3033
3063
  { t: "toggle", v: true },
3034
3064
  ],
3035
3065
  [
3036
3066
  { t: "mono", v: "intake-prd" },
3037
3067
  {
3038
3068
  t: "text",
3039
- v: "Validates the next ready PRD and either creates its destination tickets or blocks it with clarifying questions; also rolls shipped PRDs forward to verified",
3069
+ v: "Validates the next ready PRD at the gate and either creates its work units or blocks it with clarifying questions",
3040
3070
  },
3041
- { t: "mono", v: "/lisa:intake <PRD queue>" },
3042
3071
  {
3043
3072
  t: "select",
3044
3073
  v: "every 60 min",
3045
3074
  options: ["every 10 min", "every 30 min", "every 60 min"],
3046
3075
  },
3076
+ {
3077
+ t: "run",
3078
+ ok: true,
3079
+ v: "12:04",
3080
+ reason: "ok \u2014 1 PRD ticketed",
3081
+ },
3082
+ { t: "mono", v: "13:04" },
3047
3083
  { t: "toggle", v: true },
3048
3084
  ],
3049
3085
  [
3050
3086
  { t: "mono", v: "intake-repair" },
3051
3087
  {
3052
3088
  t: "text",
3053
- v: "Finds stuck work stalled builds, half-closed items, unreconciled parent rollups and repairs or resumes each one",
3089
+ v: "Finds stuck work \u2014 stalled builds, half-closed items, unreconciled rollups \u2014 and repairs each one",
3054
3090
  },
3055
- { t: "mono", v: "/lisa:repair-intake <queue>" },
3056
3091
  {
3057
3092
  t: "select",
3058
3093
  v: "every 60 min",
3059
3094
  options: ["every 30 min", "every 60 min", "every 3 h"],
3060
3095
  },
3096
+ {
3097
+ t: "run",
3098
+ ok: true,
3099
+ v: "12:04",
3100
+ reason: "ok \u2014 0 stuck items",
3101
+ },
3102
+ { t: "mono", v: "13:04" },
3061
3103
  { t: "toggle", v: true },
3062
3104
  ],
3063
3105
  [
3064
3106
  { t: "mono", v: "exploratory-bugs" },
3065
3107
  {
3066
3108
  t: "text",
3067
- v: "Explores the product like a first-time user (respecting the per-environment mutation policy) and files any bugs it finds",
3109
+ v: "QA loop: explores the product like a first-time user (respecting the mutation policy) and files bugs build-ready",
3068
3110
  },
3069
- { t: "mono", v: "/lisa-<stack>:exploratory-qa" },
3070
3111
  { t: "select", v: "daily", options: ["daily", "weekly"] },
3112
+ {
3113
+ t: "run",
3114
+ ok: true,
3115
+ v: "04:00",
3116
+ reason: "ok \u2014 2 bugs filed",
3117
+ },
3118
+ { t: "mono", v: "tomorrow 04:00" },
3071
3119
  { t: "toggle", v: true },
3072
3120
  ],
3073
3121
  [
3074
3122
  { t: "mono", v: "exploratory-prds" },
3075
3123
  {
3076
3124
  t: "text",
3077
- v: "Ideates product improvements from usage and codebase context and drafts PRDs for review",
3125
+ v: "Product Planning loop: ideates improvements and writes PRDs prd-ready",
3126
+ },
3127
+ { t: "select", v: "daily", options: ["daily", "weekly"] },
3128
+ {
3129
+ t: "run",
3130
+ ok: "warn",
3131
+ v: "04:15",
3132
+ reason: "skipped \u2014 queue pressure (1 prd-ready waiting)",
3133
+ },
3134
+ { t: "mono", v: "tomorrow 04:15" },
3135
+ { t: "toggle", v: true },
3136
+ ],
3137
+ [
3138
+ { t: "mono", v: "monitor" },
3139
+ {
3140
+ t: "text",
3141
+ v: "Monitoring loop: audits the connected observability providers against the alert thresholds and files regression tickets",
3078
3142
  },
3079
- { t: "mono", v: "/lisa:project-ideation" },
3080
3143
  { t: "select", v: "daily", options: ["daily", "weekly"] },
3144
+ {
3145
+ t: "run",
3146
+ ok: true,
3147
+ v: "05:00",
3148
+ reason: "ok \u2014 1 regression filed",
3149
+ },
3150
+ { t: "mono", v: "tomorrow 05:00" },
3081
3151
  { t: "toggle", v: true },
3082
3152
  ],
3083
3153
  ],
3084
3154
  },
3155
+ {
3156
+ card: "Fleet controls",
3157
+ rows: [
3158
+ {
3159
+ key: "",
3160
+ label: "Fleet health",
3161
+ desc: "From /lisa:automation-status \u2014 whether every expected automation exists, matches the setup contract, and shows healthy recent activity.",
3162
+ control: stat(
3163
+ "6 of 6 present \u00b7 healthy \u00b7 checked 12:58",
3164
+ "mono"
3165
+ ),
3166
+ },
3167
+ {
3168
+ key: "",
3169
+ label: "Run an intake cycle now",
3170
+ desc: "Forces one immediate cycle of the PRD and ticket intakes without waiting for the schedule.",
3171
+ control: {
3172
+ type: "button",
3173
+ label: "Run intake now",
3174
+ toast: "Prototype \u2014 fleet controls are not wired up yet",
3175
+ },
3176
+ },
3177
+ {
3178
+ key: "",
3179
+ label: "Pause the fleet",
3180
+ desc: "Suspends every lisa-auto-<project>-* automation; re-enable per row or resume all.",
3181
+ control: {
3182
+ type: "button",
3183
+ label: "Pause all",
3184
+ toast: "Prototype \u2014 fleet controls are not wired up yet",
3185
+ },
3186
+ },
3187
+ ],
3188
+ },
3085
3189
  {
3086
3190
  card: "Autonomy flags",
3191
+ note: "Autonomous by default \u2014 the adversarial intake gate is the quality control",
3087
3192
  rows: [
3088
3193
  {
3089
3194
  key: "auto-start-tickets",
3090
3195
  label: "Auto-start exploratory bug tickets",
3091
- desc: "On: bugs found by exploratory QA are filed build-ready and picked up automatically. Off: they land in the backlog for human triage.",
3092
- control: tog(false),
3196
+ desc: "On (default): bugs found by exploratory QA are filed build-ready and picked up automatically. Off: they land in the backlog for human triage.",
3197
+ control: tog(true),
3093
3198
  },
3094
3199
  {
3095
3200
  key: "auto-start-prds",
3096
3201
  label: "Auto-start ideated PRDs",
3097
- desc: "On: ideated PRDs are created prd-ready and flow straight into intake. Off: they stay drafts for human review.",
3098
- control: tog(false),
3202
+ desc: "On (default): ideated PRDs are created prd-ready and flow straight into intake. Off: they stay drafts for human review.",
3203
+ control: tog(true),
3099
3204
  },
3100
3205
  ],
3101
3206
  },
@@ -3126,7 +3231,7 @@
3126
3231
  },
3127
3232
  {
3128
3233
  type: "callout",
3129
- text: "exploratory-bugs is only created for stacks that ship exploratory QA (expo, rails, harper-fabric).",
3234
+ text: "exploratory-bugs is created only for stacks that ship exploratory QA (expo, rails, harper-fabric); monitor is created unconditionally \u2014 it reports observability gaps rather than failing when no provider is connected.",
3130
3235
  },
3131
3236
  ],
3132
3237
  };
@@ -4976,8 +5081,26 @@
4976
5081
  td.appendChild(el("span", "status-why", esc(cell.reason)));
4977
5082
  }
4978
5083
  }
5084
+ } else if (cell.t === "run") {
5085
+ const cls =
5086
+ cell.ok === true
5087
+ ? "pass"
5088
+ : cell.ok === "warn"
5089
+ ? "warn"
5090
+ : "fail";
5091
+ const mark =
5092
+ cell.ok === true ? "✓" : cell.ok === "warn" ? "◐" : "✗";
5093
+ td.appendChild(
5094
+ el("span", "badge " + cls, mark + " " + esc(cell.v))
5095
+ );
5096
+ if (cell.reason) {
5097
+ td.appendChild(el("span", "status-why", esc(cell.reason)));
5098
+ }
4979
5099
  } else if (cell.t === "toggle" || cell.t === "select") {
4980
- td.appendChild(buildControl(cell, null));
5100
+ // Table cells use {t, v}; buildControl expects {type, value}.
5101
+ td.appendChild(
5102
+ buildControl({ ...cell, type: cell.t, value: cell.v }, null)
5103
+ );
4981
5104
  }
4982
5105
  tr.appendChild(td);
4983
5106
  });
@@ -5083,11 +5206,14 @@
5083
5206
  }
5084
5207
 
5085
5208
  function buildCallout(block) {
5086
- return el(
5209
+ const box = el(
5087
5210
  "div",
5088
- "callout" + (block.variant === "warn" ? " warn" : ""),
5089
- block.text
5211
+ "callout" + (block.variant === "warn" ? " warn" : "")
5090
5212
  );
5213
+ // Single child span: the callout is flex, and multiple inline nodes
5214
+ // would each become flex items and render as broken columns.
5215
+ box.appendChild(el("span", "", block.text));
5216
+ return box;
5091
5217
  }
5092
5218
 
5093
5219
  function buildTabs(block) {