@codyswann/lisa 2.200.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.
- package/README.md +22 -10
- 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-automation-status/SKILL.md +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +56 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +12 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +2 -2
- package/plugins/lisa/rules/eager/factory-model.md +36 -0
- package/plugins/lisa/rules/reference/factory-model.md +87 -0
- package/plugins/lisa/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/lisa/skills/lisa-doctor/SKILL.md +56 -0
- package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/lisa/skills/lisa-tear-down-automations/SKILL.md +3 -3
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +56 -0
- package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/lisa-agy/skills/lisa-tear-down-automations/SKILL.md +3 -3
- 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/factory-model.md +36 -0
- package/plugins/lisa-copilot/rules/reference/factory-model.md +87 -0
- package/plugins/lisa-copilot/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +56 -0
- package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/lisa-copilot/skills/lisa-tear-down-automations/SKILL.md +3 -3
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/factory-model-reference.mdc +92 -0
- package/plugins/lisa-cursor/rules/factory-model.mdc +41 -0
- package/plugins/lisa-cursor/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +56 -0
- package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/lisa-cursor/skills/lisa-tear-down-automations/SKILL.md +3 -3
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/rules/eager/factory-model.md +36 -0
- package/plugins/src/base/rules/reference/factory-model.md +87 -0
- package/plugins/src/base/skills/lisa-automation-status/SKILL.md +1 -0
- package/plugins/src/base/skills/lisa-doctor/SKILL.md +56 -0
- package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +28 -1
- package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +28 -1
- package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +27 -0
- package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +13 -5
- package/plugins/src/base/skills/lisa-tear-down-automations/SKILL.md +3 -3
- package/ui/index.html +151 -25
package/ui/index.html
CHANGED
|
@@ -1280,9 +1280,27 @@
|
|
|
1280
1280
|
/* ---------------------------------- Overview ---------------------------------- */
|
|
1281
1281
|
DATA.sections.overview = {
|
|
1282
1282
|
title: "Overview",
|
|
1283
|
-
desc: "
|
|
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
|
-
{
|
|
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
|
|
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: "
|
|
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
|
|
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
|
|
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
|
|
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: "
|
|
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: "
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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) {
|