coding-agent-harness 1.0.1 → 1.0.4

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 (262) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/CONTRIBUTING.md +98 -0
  3. package/README.en-US.md +14 -0
  4. package/README.md +230 -80
  5. package/README.zh-CN.md +290 -0
  6. package/SKILL.md +132 -198
  7. package/docs-release/README.md +80 -9
  8. package/docs-release/architecture/overview.md +298 -28
  9. package/docs-release/architecture/overview.zh-CN.md +292 -0
  10. package/docs-release/assets/dashboard-overview.png +0 -0
  11. package/docs-release/assets/harness-architecture.svg +163 -0
  12. package/docs-release/assets/harness-workflow.svg +64 -0
  13. package/docs-release/guides/agent-installation.en-US.md +237 -0
  14. package/docs-release/guides/agent-installation.md +149 -27
  15. package/docs-release/guides/contributing.md +100 -0
  16. package/docs-release/guides/contributing.zh-CN.md +99 -0
  17. package/docs-release/guides/document-audience-and-surfaces.en-US.md +113 -0
  18. package/docs-release/guides/document-audience-and-surfaces.md +113 -0
  19. package/docs-release/guides/full-legacy-migration-subagent-strategy.md +334 -0
  20. package/docs-release/guides/full-legacy-migration-subagent-strategy.zh-CN.md +334 -0
  21. package/docs-release/guides/legacy-migration-agent-prompt.md +373 -0
  22. package/docs-release/guides/legacy-migration-agent-prompt.zh-CN.md +350 -0
  23. package/docs-release/guides/migration-playbook.en-US.md +324 -0
  24. package/docs-release/guides/migration-playbook.md +328 -0
  25. package/docs-release/guides/parent-control-repository-pattern.en-US.md +254 -0
  26. package/docs-release/guides/parent-control-repository-pattern.md +254 -0
  27. package/docs-release/guides/preset-development.md +214 -0
  28. package/docs-release/guides/repository-operating-models.en-US.md +197 -0
  29. package/docs-release/guides/repository-operating-models.md +197 -0
  30. package/docs-release/guides/task-state-machine.en-US.md +207 -0
  31. package/docs-release/guides/task-state-machine.md +214 -0
  32. package/docs-release/intl/README.md +15 -0
  33. package/docs-release/intl/de-DE.md +18 -0
  34. package/docs-release/intl/en-US.md +18 -0
  35. package/docs-release/intl/es-ES.md +18 -0
  36. package/docs-release/intl/fr-FR.md +18 -0
  37. package/docs-release/intl/ja-JP.md +18 -0
  38. package/docs-release/intl/ko-KR.md +18 -0
  39. package/docs-release/intl/zh-CN.md +18 -0
  40. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/brief.md +13 -0
  41. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/findings.md +7 -0
  42. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/lesson_candidates.md +24 -0
  43. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/progress.md +1 -1
  44. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/task_plan.md +4 -2
  45. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/{visual_roadmap.md → visual_map.md} +9 -1
  46. package/package.json +10 -3
  47. package/presets/legacy-migration/checks/preset-check.mjs +3 -0
  48. package/presets/legacy-migration/preset.yaml +134 -0
  49. package/presets/legacy-migration/scripts/plan-work-queue.mjs +4 -0
  50. package/presets/legacy-migration/scripts/scaffold-task-contracts.mjs +4 -0
  51. package/presets/legacy-migration/templates/execution_strategy.append.md +18 -0
  52. package/presets/legacy-migration/templates/findings.seed.md +17 -0
  53. package/presets/legacy-migration/templates/review.seed.md +12 -0
  54. package/presets/legacy-migration/templates/task_plan.append.md +9 -0
  55. package/presets/legacy-migration/templates/visual_map.append.md +12 -0
  56. package/presets/legacy-migration/workbench/dashboard-panels.yaml +2 -0
  57. package/presets/legacy-migration/workbench/migration-queue.schema.json +23 -0
  58. package/presets/lesson-sedimentation/preset.yaml +23 -0
  59. package/presets/lesson-sedimentation/templates/prompt.md +23 -0
  60. package/presets/module/preset.yaml +25 -0
  61. package/presets/module/templates/execution_strategy.append.md +8 -0
  62. package/presets/module/templates/task_plan.append.md +17 -0
  63. package/presets/standard-task/preset.yaml +31 -0
  64. package/presets/standard-task/templates/task_plan.append.md +7 -0
  65. package/references/adversarial-review-standard.md +2 -2
  66. package/references/agents-md-pattern.md +5 -5
  67. package/references/delivery-operating-model-standard.md +3 -3
  68. package/references/docs-directory-standard.md +53 -10
  69. package/references/external-source-intake-standard.md +75 -0
  70. package/references/harness-ledger.md +53 -94
  71. package/references/legacy-12-phase-bootstrap.md +41 -0
  72. package/references/lessons-governance.md +100 -88
  73. package/references/module-parallel-standard.md +14 -14
  74. package/references/planning-loop.md +51 -7
  75. package/references/project-onboarding-audit.md +10 -0
  76. package/references/pull-request-standard.md +118 -0
  77. package/references/repo-governance-standard.md +12 -1
  78. package/references/review-routing-standard.md +7 -1
  79. package/references/ssot-governance.md +67 -59
  80. package/references/taskr-gap-analysis.md +600 -0
  81. package/references/testing-standard.md +50 -0
  82. package/references/walkthrough-closeout.md +10 -9
  83. package/scripts/check-harness.mjs +111 -331
  84. package/scripts/commands/dashboard-command.mjs +67 -0
  85. package/scripts/commands/migration-command.mjs +96 -0
  86. package/scripts/commands/preset-command.mjs +73 -0
  87. package/scripts/commands/task-command.mjs +327 -0
  88. package/scripts/harness.mjs +106 -20
  89. package/scripts/lib/capability-registry.mjs +591 -0
  90. package/scripts/lib/check-module-parallel.mjs +237 -0
  91. package/scripts/lib/check-profiles.mjs +418 -0
  92. package/scripts/lib/check-task-contracts.mjs +47 -0
  93. package/scripts/lib/core-shared.mjs +196 -0
  94. package/scripts/lib/dashboard-data.mjs +412 -0
  95. package/scripts/lib/dashboard-workbench.mjs +257 -0
  96. package/scripts/lib/dashboard-writer.mjs +107 -4
  97. package/scripts/lib/git-status-summary.mjs +46 -0
  98. package/scripts/lib/governance-index-generator.mjs +174 -0
  99. package/scripts/lib/governance-sync.mjs +514 -0
  100. package/scripts/lib/governance-table-boundary.mjs +175 -0
  101. package/scripts/lib/harness-core.mjs +15 -1318
  102. package/scripts/lib/lesson-maintenance.mjs +152 -0
  103. package/scripts/lib/markdown-utils.mjs +158 -0
  104. package/scripts/lib/migration-planner.mjs +478 -0
  105. package/scripts/lib/migration-support.mjs +312 -0
  106. package/scripts/lib/preset-audit-contracts.mjs +37 -0
  107. package/scripts/lib/preset-engine.mjs +497 -0
  108. package/scripts/lib/preset-registry.mjs +627 -0
  109. package/scripts/lib/preset-resource-contracts.mjs +83 -0
  110. package/scripts/lib/review-confirm-git-gate.mjs +248 -0
  111. package/scripts/lib/status-dashboard-renderer.mjs +102 -0
  112. package/scripts/lib/subagent-authorization-audit.mjs +196 -0
  113. package/scripts/lib/task-completion-consistency.mjs +16 -0
  114. package/scripts/lib/task-index.mjs +93 -0
  115. package/scripts/lib/task-lesson-candidates.mjs +242 -0
  116. package/scripts/lib/task-lesson-sedimentation.mjs +326 -0
  117. package/scripts/lib/task-lifecycle/review-confirm.mjs +101 -0
  118. package/scripts/lib/task-lifecycle/review-gates.mjs +70 -0
  119. package/scripts/lib/task-lifecycle/text-utils.mjs +24 -0
  120. package/scripts/lib/task-lifecycle.mjs +649 -0
  121. package/scripts/lib/task-review-model.mjs +469 -0
  122. package/scripts/lib/task-scanner.mjs +576 -0
  123. package/scripts/lib/task-tombstone-commands.mjs +140 -0
  124. package/scripts/postinstall.mjs +14 -0
  125. package/skills/preset-creator/SKILL.md +179 -0
  126. package/skills/preset-creator/references/complex-task-skeleton/README.md +31 -0
  127. package/skills/preset-creator/references/complex-task-skeleton/artifacts/INDEX.md +12 -0
  128. package/skills/preset-creator/references/complex-task-skeleton/brief.md +32 -0
  129. package/skills/preset-creator/references/complex-task-skeleton/execution_strategy.md +71 -0
  130. package/skills/preset-creator/references/complex-task-skeleton/findings.md +24 -0
  131. package/skills/preset-creator/references/complex-task-skeleton/lesson_candidates.md +70 -0
  132. package/skills/preset-creator/references/complex-task-skeleton/long-running-task-contract.md +76 -0
  133. package/skills/preset-creator/references/complex-task-skeleton/progress.md +33 -0
  134. package/skills/preset-creator/references/complex-task-skeleton/references/INDEX.md +13 -0
  135. package/skills/preset-creator/references/complex-task-skeleton/review.md +107 -0
  136. package/skills/preset-creator/references/complex-task-skeleton/task_plan.md +111 -0
  137. package/{templates/planning/visual_roadmap.md → skills/preset-creator/references/complex-task-skeleton/visual_map.md} +24 -2
  138. package/skills/preset-creator/references/preset-package-skeleton.md +296 -0
  139. package/templates/AGENTS.md.template +51 -36
  140. package/templates/architecture/Architecture-SSoT.md +21 -0
  141. package/templates/architecture/README.md +49 -0
  142. package/templates/architecture/critical-flows.md +22 -0
  143. package/templates/architecture/local-repo-context.md +20 -0
  144. package/templates/architecture/service-catalog.md +17 -0
  145. package/templates/architecture/services/service-template.md +31 -0
  146. package/templates/architecture/system-map.md +22 -0
  147. package/templates/dashboard/assets/app-src/00-state.js +42 -0
  148. package/templates/dashboard/assets/app-src/10-router.js +77 -0
  149. package/templates/dashboard/assets/app-src/20-overview.js +241 -0
  150. package/templates/dashboard/assets/app-src/30-tasks.js +409 -0
  151. package/templates/dashboard/assets/app-src/35-task-detail.js +246 -0
  152. package/templates/dashboard/assets/app-src/40-modules.js +58 -0
  153. package/templates/dashboard/assets/app-src/45-review.js +347 -0
  154. package/templates/dashboard/assets/app-src/50-migration.js +183 -0
  155. package/templates/dashboard/assets/app-src/60-shared.js +61 -0
  156. package/templates/dashboard/assets/app-src/90-bindings.js +524 -0
  157. package/templates/dashboard/assets/app.css +3107 -300
  158. package/templates/dashboard/assets/app.css.manifest.json +9 -0
  159. package/templates/dashboard/assets/app.js +2068 -306
  160. package/templates/dashboard/assets/app.manifest.json +12 -0
  161. package/templates/dashboard/assets/css-src/00-foundation.css +342 -0
  162. package/templates/dashboard/assets/css-src/10-panels-flow.css +236 -0
  163. package/templates/dashboard/assets/css-src/20-briefs-controls.css +398 -0
  164. package/templates/dashboard/assets/css-src/30-task-index.css +739 -0
  165. package/templates/dashboard/assets/css-src/35-review-workspace.css +507 -0
  166. package/templates/dashboard/assets/css-src/40-detail-modules-migration.css +427 -0
  167. package/templates/dashboard/assets/css-src/50-responsive-overrides.css +551 -0
  168. package/templates/dashboard/assets/i18n.js +531 -44
  169. package/templates/dashboard/assets/mermaid-renderer.js +58 -8
  170. package/templates/development/README.md +52 -0
  171. package/templates/development/codebase-map.md +11 -0
  172. package/templates/development/cross-repo-debugging.md +18 -0
  173. package/templates/development/external-context/service-template.md +33 -0
  174. package/templates/development/external-source-packs/README.md +24 -0
  175. package/templates/development/external-source-packs/digest-template.md +28 -0
  176. package/templates/development/local-setup.md +16 -0
  177. package/templates/development/stubs-and-mocks.md +11 -0
  178. package/templates/integrations/README.md +40 -0
  179. package/templates/integrations/api-contract.md +42 -0
  180. package/templates/integrations/event-contract.md +46 -0
  181. package/templates/integrations/third-party/vendor-template.md +42 -0
  182. package/templates/integrations/webhook-contract.md +41 -0
  183. package/templates/ledger/Harness-Ledger.md +13 -25
  184. package/templates/lessons/lesson-arch-process-change.md +1 -1
  185. package/templates/lessons/lesson-new-doc.md +1 -1
  186. package/templates/lessons/lesson-ref-change.md +1 -1
  187. package/templates/planning/brief.md +32 -0
  188. package/templates/planning/execution_strategy.md +31 -0
  189. package/templates/planning/lesson_candidates.md +70 -0
  190. package/templates/planning/long-running-task-contract.md +7 -0
  191. package/templates/planning/module_brief.md +25 -0
  192. package/templates/planning/module_session_prompt.md +6 -0
  193. package/templates/planning/optional/artifacts/INDEX.md +3 -3
  194. package/templates/planning/optional/references/INDEX.md +3 -3
  195. package/templates/planning/review.md +59 -0
  196. package/templates/planning/task_plan.md +40 -15
  197. package/templates/planning/visual_map.md +50 -0
  198. package/templates/reference/docs-library-standard.md +31 -0
  199. package/templates/reference/execution-workflow-standard.md +5 -2
  200. package/templates/reference/external-source-intake-standard.md +82 -0
  201. package/templates/reference/harness-ledger-standard.md +1 -0
  202. package/templates/reference/pull-request-standard.md +80 -0
  203. package/templates/reference/repo-governance-standard.md +8 -5
  204. package/templates/reference/review-routing-standard.md +6 -0
  205. package/templates/reference/walkthrough-standard.md +3 -1
  206. package/templates/verifier/verifier-output.md +1 -1
  207. package/templates/walkthrough/walkthrough-template.md +2 -2
  208. package/templates-zh-CN/AGENTS.md.template +73 -70
  209. package/templates-zh-CN/architecture/Architecture-SSoT.md +21 -0
  210. package/templates-zh-CN/architecture/README.md +51 -0
  211. package/templates-zh-CN/architecture/critical-flows.md +24 -0
  212. package/templates-zh-CN/architecture/local-repo-context.md +20 -0
  213. package/templates-zh-CN/architecture/service-catalog.md +17 -0
  214. package/templates-zh-CN/architecture/services/service-template.md +31 -0
  215. package/templates-zh-CN/architecture/system-map.md +22 -0
  216. package/templates-zh-CN/development/README.md +54 -0
  217. package/templates-zh-CN/development/codebase-map.md +11 -0
  218. package/templates-zh-CN/development/cross-repo-debugging.md +18 -0
  219. package/templates-zh-CN/development/external-context/service-template.md +33 -0
  220. package/templates-zh-CN/development/external-source-packs/README.md +24 -0
  221. package/templates-zh-CN/development/external-source-packs/digest-template.md +28 -0
  222. package/templates-zh-CN/development/local-setup.md +16 -0
  223. package/templates-zh-CN/development/stubs-and-mocks.md +11 -0
  224. package/templates-zh-CN/integrations/README.md +42 -0
  225. package/templates-zh-CN/integrations/api-contract.md +42 -0
  226. package/templates-zh-CN/integrations/event-contract.md +46 -0
  227. package/templates-zh-CN/integrations/third-party/vendor-template.md +42 -0
  228. package/templates-zh-CN/integrations/webhook-contract.md +41 -0
  229. package/templates-zh-CN/ledger/Harness-Ledger.md +17 -40
  230. package/templates-zh-CN/planning/brief.md +32 -0
  231. package/templates-zh-CN/planning/execution_strategy.md +30 -0
  232. package/templates-zh-CN/planning/lesson_candidates.md +70 -0
  233. package/templates-zh-CN/planning/long-running-task-contract.md +1 -1
  234. package/templates-zh-CN/planning/module_brief.md +25 -0
  235. package/templates-zh-CN/planning/module_plan.md +2 -2
  236. package/templates-zh-CN/planning/module_session_prompt.md +4 -3
  237. package/templates-zh-CN/planning/review.md +59 -1
  238. package/templates-zh-CN/planning/task_plan.md +37 -11
  239. package/templates-zh-CN/planning/{visual_roadmap.md → visual_map.md} +21 -2
  240. package/templates-zh-CN/reference/adversarial-review-standard.md +1 -1
  241. package/templates-zh-CN/reference/docs-library-standard.md +36 -1
  242. package/templates-zh-CN/reference/execution-workflow-standard.md +10 -2
  243. package/templates-zh-CN/reference/external-source-intake-standard.md +82 -0
  244. package/templates-zh-CN/reference/harness-ledger-standard.md +7 -4
  245. package/templates-zh-CN/reference/pull-request-standard.md +106 -0
  246. package/templates-zh-CN/reference/repo-governance-standard.md +4 -1
  247. package/templates-zh-CN/reference/review-routing-standard.md +8 -1
  248. package/templates-zh-CN/reference/walkthrough-standard.md +6 -5
  249. package/templates-zh-CN/walkthrough/Closeout-SSoT.md +2 -2
  250. package/templates-zh-CN/walkthrough/walkthrough-template.md +2 -2
  251. package/scripts/smoke-dashboard.mjs +0 -70
  252. package/scripts/test-harness.mjs +0 -483
  253. package/templates/ssot/Feature-SSoT.md +0 -43
  254. package/templates/ssot/Lessons-SSoT.md +0 -44
  255. package/templates-zh-CN/dashboard/assets/app.css +0 -399
  256. package/templates-zh-CN/dashboard/assets/app.js +0 -435
  257. package/templates-zh-CN/dashboard/assets/i18n.js +0 -47
  258. package/templates-zh-CN/dashboard/assets/markdown-reader.js +0 -116
  259. package/templates-zh-CN/dashboard/assets/mermaid-renderer.js +0 -59
  260. package/templates-zh-CN/dashboard/index.html +0 -18
  261. package/templates-zh-CN/ssot/Feature-SSoT.md +0 -49
  262. package/templates-zh-CN/ssot/Lessons-SSoT.md +0 -49
@@ -1,44 +0,0 @@
1
- # Lessons SSoT
2
-
3
- ## Purpose
4
-
5
- Track reusable lessons discovered during closeout and route them into standards, templates, checkers, or explicit no-action decisions.
6
-
7
- ## Status Legend
8
-
9
- | Status | Meaning | Required Next Step |
10
- | --- | --- | --- |
11
- | candidate | Lesson was proposed during review or walkthrough. | Decide whether it is reusable. |
12
- | accepted | Lesson is valid and needs a durable change. | Assign implementation target and owner. |
13
- | applied | Durable change has landed. | Link changed file, checker, or template. |
14
- | rejected | Lesson is not reusable or not worth adopting. | Record reason. |
15
- | superseded | A newer lesson replaces this one. | Link replacement. |
16
- | archived | Lesson is historical. | Keep detail doc and final disposition. |
17
-
18
- ## Active Lessons
19
-
20
- | ID | Lesson | Source | Type | Owner | Status | Target Change | Detail Doc | Evidence | Updated |
21
- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
22
- | L-YYYY-MM-DD-001 | Short lesson title | walkthrough, review, incident, or verifier | ref-change / new-doc / arch-process-change | owner | candidate | file, checker, template, or no-action | docs/01-GOVERNANCE/lessons/...md | source link | YYYY-MM-DD |
23
-
24
- ## Type Routing
25
-
26
- | Type | Use When | Required Artifact |
27
- | --- | --- | --- |
28
- | ref-change | Existing standard, template, or checker needs an update. | `templates/lessons/lesson-ref-change.md` detail doc. |
29
- | new-doc | A missing durable reference document is needed. | `templates/lessons/lesson-new-doc.md` detail doc. |
30
- | arch-process-change | Operating model, phase gate, ownership, or architecture process needs to change. | `templates/lessons/lesson-arch-process-change.md` detail doc. |
31
-
32
- ## Routing Rules
33
-
34
- 1. Walkthrough closeout must record whether a lessons check was performed.
35
- 2. Do not create a lesson for one-off trivia; create one only when a future agent could repeat the failure or benefit from the rule.
36
- 3. Accepted lessons must name the durable target: reference doc, template, checker, workflow, or operating model.
37
- 4. `applied` requires evidence of the durable change, not just agreement in chat.
38
- 5. Rejected lessons must explain why no durable change is needed.
39
-
40
- ## Archive Rules
41
-
42
- - Keep candidate and accepted lessons in this file until resolved.
43
- - Archive applied, rejected, or superseded lessons after the next closeout cycle.
44
- - Preserve the detail doc and source walkthrough link for every archived lesson.
@@ -1,399 +0,0 @@
1
- :root {
2
- color-scheme: light;
3
- --bg: #f4f6f3;
4
- --surface: #fbfcf8;
5
- --surface-2: #eef2ec;
6
- --ink: #182018;
7
- --muted: #627061;
8
- --line: #dce3d8;
9
- --accent: #2e6b4f;
10
- --accent-2: #9d6b2f;
11
- --danger: #a83f32;
12
- --warn: #9a6a13;
13
- --ok: #2f7b4f;
14
- --shadow: 0 18px 45px rgba(32, 43, 28, 0.10);
15
- font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
16
- }
17
-
18
- [data-theme="dark"] {
19
- color-scheme: dark;
20
- --bg: #151812;
21
- --surface: #1d2219;
22
- --surface-2: #252d20;
23
- --ink: #edf1e8;
24
- --muted: #a9b4a1;
25
- --line: #384230;
26
- --accent: #83c69d;
27
- --accent-2: #d3a15f;
28
- --danger: #e17668;
29
- --warn: #e0b456;
30
- --ok: #85cf9b;
31
- --shadow: 0 18px 45px rgba(0, 0, 0, 0.28);
32
- }
33
-
34
- * { box-sizing: border-box; }
35
- body {
36
- margin: 0;
37
- background: var(--bg);
38
- color: var(--ink);
39
- }
40
- button, select {
41
- font: inherit;
42
- }
43
- .layout {
44
- min-height: 100vh;
45
- display: grid;
46
- grid-template-columns: 248px minmax(0, 1fr);
47
- }
48
- .sidebar {
49
- border-right: 1px solid var(--line);
50
- background: var(--surface);
51
- padding: 22px 18px;
52
- position: sticky;
53
- top: 0;
54
- height: 100vh;
55
- }
56
- .brand {
57
- display: grid;
58
- gap: 4px;
59
- margin-bottom: 24px;
60
- }
61
- .brand strong { font-size: 18px; }
62
- .brand span { color: var(--muted); font-size: 13px; }
63
- .nav {
64
- display: grid;
65
- gap: 6px;
66
- }
67
- .nav button, .control button, .drawer-tabs button {
68
- border: 0;
69
- background: transparent;
70
- color: var(--muted);
71
- border-radius: 7px;
72
- padding: 9px 10px;
73
- text-align: left;
74
- cursor: pointer;
75
- }
76
- .nav button.active, .nav button:hover, .control button.active, .drawer-tabs button.active {
77
- background: var(--surface-2);
78
- color: var(--ink);
79
- }
80
- .main {
81
- padding: 24px clamp(18px, 4vw, 44px);
82
- min-width: 0;
83
- }
84
- .topbar {
85
- display: flex;
86
- justify-content: space-between;
87
- gap: 18px;
88
- align-items: flex-start;
89
- margin-bottom: 22px;
90
- }
91
- .eyebrow {
92
- color: var(--muted);
93
- font-size: 13px;
94
- margin: 0 0 6px;
95
- }
96
- h1, h2, h3, p { margin-top: 0; letter-spacing: 0; }
97
- h1 { font-size: clamp(26px, 4vw, 42px); line-height: 1.04; max-width: 760px; }
98
- h2 { font-size: 20px; }
99
- h3 { font-size: 15px; }
100
- .controls {
101
- display: flex;
102
- flex-wrap: wrap;
103
- gap: 8px;
104
- justify-content: flex-end;
105
- }
106
- .control {
107
- display: inline-flex;
108
- border: 1px solid var(--line);
109
- border-radius: 8px;
110
- padding: 3px;
111
- background: var(--surface);
112
- }
113
- .status-grid {
114
- display: grid;
115
- grid-template-columns: minmax(260px, 1.4fr) repeat(3, minmax(150px, 0.7fr));
116
- gap: 12px;
117
- margin-bottom: 18px;
118
- }
119
- .panel, .metric, .table-panel, .drawer {
120
- background: var(--surface);
121
- border: 1px solid var(--line);
122
- border-radius: 8px;
123
- box-shadow: var(--shadow);
124
- }
125
- .metric {
126
- padding: 16px;
127
- min-height: 112px;
128
- }
129
- .metric strong {
130
- display: block;
131
- font-size: 30px;
132
- line-height: 1;
133
- }
134
- .metric span, .muted { color: var(--muted); }
135
- .readiness {
136
- padding: 18px;
137
- }
138
- .readiness .state {
139
- display: inline-flex;
140
- align-items: center;
141
- border-radius: 7px;
142
- padding: 6px 9px;
143
- font-weight: 700;
144
- margin-bottom: 14px;
145
- }
146
- .state.pass, .tag.pass { background: color-mix(in srgb, var(--ok) 18%, transparent); color: var(--ok); }
147
- .state.warn, .tag.warn { background: color-mix(in srgb, var(--warn) 18%, transparent); color: var(--warn); }
148
- .state.fail, .tag.fail, .tag.open { background: color-mix(in srgb, var(--danger) 18%, transparent); color: var(--danger); }
149
- .page-grid {
150
- display: grid;
151
- grid-template-columns: minmax(0, 1fr) 410px;
152
- gap: 16px;
153
- align-items: start;
154
- }
155
- .page-grid > * {
156
- min-width: 0;
157
- }
158
- .table-panel {
159
- overflow: hidden;
160
- min-width: 0;
161
- }
162
- .panel-head {
163
- display: flex;
164
- justify-content: space-between;
165
- gap: 12px;
166
- padding: 14px 16px;
167
- border-bottom: 1px solid var(--line);
168
- }
169
- .table-wrap { overflow: auto; }
170
- table {
171
- width: 100%;
172
- border-collapse: collapse;
173
- font-size: 14px;
174
- }
175
- [data-density="compact"] table { font-size: 13px; }
176
- th, td {
177
- padding: 11px 12px;
178
- border-bottom: 1px solid var(--line);
179
- vertical-align: top;
180
- text-align: left;
181
- }
182
- [data-density="compact"] th, [data-density="compact"] td { padding: 7px 9px; }
183
- th {
184
- color: var(--muted);
185
- font-size: 12px;
186
- font-weight: 700;
187
- text-transform: uppercase;
188
- }
189
- tr {
190
- cursor: pointer;
191
- }
192
- tr:hover td {
193
- background: color-mix(in srgb, var(--accent) 8%, transparent);
194
- }
195
- .linklike {
196
- border: 0;
197
- padding: 0;
198
- background: transparent;
199
- color: var(--accent);
200
- font: inherit;
201
- text-align: left;
202
- cursor: pointer;
203
- overflow-wrap: anywhere;
204
- }
205
- .linklike:hover { text-decoration: underline; }
206
- .tag {
207
- display: inline-flex;
208
- border-radius: 999px;
209
- padding: 4px 8px;
210
- font-size: 12px;
211
- font-weight: 700;
212
- background: var(--surface-2);
213
- }
214
- .bar {
215
- height: 7px;
216
- border-radius: 999px;
217
- background: var(--surface-2);
218
- overflow: hidden;
219
- margin-top: 6px;
220
- }
221
- .bar i {
222
- display: block;
223
- height: 100%;
224
- background: var(--accent);
225
- }
226
- .drawer {
227
- position: sticky;
228
- top: 18px;
229
- min-width: 0;
230
- max-height: calc(100vh - 36px);
231
- overflow: hidden;
232
- display: grid;
233
- grid-template-rows: auto auto auto minmax(0, 1fr);
234
- }
235
- .drawer-head {
236
- padding: 15px 16px;
237
- border-bottom: 1px solid var(--line);
238
- }
239
- .drawer-tabs {
240
- display: flex;
241
- gap: 4px;
242
- overflow-x: auto;
243
- padding: 8px;
244
- border-bottom: 1px solid var(--line);
245
- }
246
- .drawer-mode {
247
- display: flex;
248
- gap: 6px;
249
- padding: 8px 12px;
250
- border-bottom: 1px solid var(--line);
251
- }
252
- .drawer-mode button {
253
- border: 1px solid var(--line);
254
- background: transparent;
255
- color: var(--muted);
256
- border-radius: 7px;
257
- padding: 6px 9px;
258
- cursor: pointer;
259
- }
260
- .drawer-mode button.active {
261
- color: var(--ink);
262
- background: var(--surface-2);
263
- }
264
- .drawer-tabs button {
265
- white-space: nowrap;
266
- font-size: 13px;
267
- }
268
- .drawer-body {
269
- padding: 16px;
270
- overflow: auto;
271
- }
272
- .markdown {
273
- line-height: 1.55;
274
- color: var(--ink);
275
- }
276
- .markdown h1 { font-size: 24px; }
277
- .markdown h2 { font-size: 18px; margin-top: 18px; }
278
- .markdown pre {
279
- white-space: pre-wrap;
280
- background: var(--surface-2);
281
- border-radius: 7px;
282
- padding: 10px;
283
- overflow: auto;
284
- }
285
- .rendered-table-wrap {
286
- overflow: auto;
287
- margin: 12px 0;
288
- border: 1px solid var(--line);
289
- border-radius: 7px;
290
- }
291
- .rendered-table {
292
- min-width: 520px;
293
- background: var(--surface);
294
- }
295
- .md-table {
296
- margin: 0 0 2px;
297
- box-shadow: none;
298
- }
299
- .mermaid-fallback {
300
- margin: 12px 0;
301
- border: 1px solid var(--line);
302
- border-radius: 8px;
303
- padding: 10px;
304
- background: var(--surface-2);
305
- }
306
- .mermaid-rendered {
307
- margin: 12px 0;
308
- border: 1px solid var(--line);
309
- border-radius: 8px;
310
- padding: 10px;
311
- background: var(--surface-2);
312
- overflow-x: auto;
313
- }
314
- .mermaid-rendered figcaption {
315
- font-weight: 700;
316
- color: var(--accent);
317
- margin-bottom: 8px;
318
- }
319
- .mermaid-rendered svg {
320
- min-width: 360px;
321
- width: 100%;
322
- height: auto;
323
- }
324
- .mermaid-node rect {
325
- fill: var(--surface);
326
- stroke: var(--accent);
327
- stroke-width: 1.5;
328
- }
329
- .mermaid-node text {
330
- fill: var(--ink);
331
- font-size: 11px;
332
- }
333
- .mermaid-edge {
334
- stroke: var(--accent);
335
- stroke-width: 1.5;
336
- fill: none;
337
- }
338
- .mermaid-arrow {
339
- fill: var(--accent);
340
- }
341
- .graph-panel {
342
- margin-bottom: 16px;
343
- overflow: hidden;
344
- }
345
- .graph-lanes {
346
- display: grid;
347
- grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
348
- gap: 10px;
349
- padding: 14px;
350
- }
351
- .lane {
352
- display: grid;
353
- gap: 5px;
354
- min-height: 88px;
355
- border: 1px solid var(--line);
356
- border-radius: 8px;
357
- padding: 10px;
358
- background: var(--surface-2);
359
- }
360
- .lane span, .lane small {
361
- color: var(--muted);
362
- overflow-wrap: anywhere;
363
- }
364
- .mermaid-fallback figcaption {
365
- font-weight: 700;
366
- color: var(--accent);
367
- margin-bottom: 8px;
368
- }
369
- .risk-list {
370
- display: grid;
371
- gap: 8px;
372
- }
373
- .risk-item {
374
- border-left: 3px solid var(--accent-2);
375
- padding: 8px 10px;
376
- background: var(--surface-2);
377
- border-radius: 6px;
378
- }
379
- .empty {
380
- color: var(--muted);
381
- padding: 18px;
382
- }
383
- @media (max-width: 980px) {
384
- .layout { grid-template-columns: 1fr; }
385
- .sidebar {
386
- position: static;
387
- height: auto;
388
- border-right: 0;
389
- border-bottom: 1px solid var(--line);
390
- }
391
- .nav { grid-template-columns: repeat(4, minmax(0, 1fr)); }
392
- .status-grid, .page-grid { grid-template-columns: 1fr; }
393
- .drawer { position: static; max-height: none; }
394
- }
395
- @media (max-width: 620px) {
396
- .topbar { display: block; }
397
- .controls { justify-content: flex-start; }
398
- .nav { grid-template-columns: repeat(2, minmax(0, 1fr)); }
399
- }