coding-agent-harness 1.0.2 → 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 (177) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/CONTRIBUTING.md +98 -0
  3. package/README.md +211 -86
  4. package/README.zh-CN.md +54 -34
  5. package/SKILL.md +25 -18
  6. package/docs-release/README.md +9 -5
  7. package/docs-release/architecture/overview.md +17 -5
  8. package/docs-release/architecture/overview.zh-CN.md +9 -5
  9. package/docs-release/assets/dashboard-overview.png +0 -0
  10. package/docs-release/guides/agent-installation.en-US.md +31 -8
  11. package/docs-release/guides/agent-installation.md +34 -9
  12. package/docs-release/guides/contributing.md +100 -0
  13. package/docs-release/guides/contributing.zh-CN.md +99 -0
  14. package/docs-release/guides/document-audience-and-surfaces.en-US.md +3 -2
  15. package/docs-release/guides/document-audience-and-surfaces.md +3 -2
  16. package/docs-release/guides/full-legacy-migration-subagent-strategy.md +2 -2
  17. package/docs-release/guides/full-legacy-migration-subagent-strategy.zh-CN.md +2 -2
  18. package/docs-release/guides/legacy-migration-agent-prompt.md +0 -11
  19. package/docs-release/guides/legacy-migration-agent-prompt.zh-CN.md +0 -11
  20. package/docs-release/guides/migration-playbook.en-US.md +14 -15
  21. package/docs-release/guides/migration-playbook.md +14 -15
  22. package/docs-release/guides/parent-control-repository-pattern.en-US.md +7 -5
  23. package/docs-release/guides/parent-control-repository-pattern.md +7 -5
  24. package/docs-release/guides/preset-development.md +214 -0
  25. package/docs-release/guides/repository-operating-models.en-US.md +5 -4
  26. package/docs-release/guides/repository-operating-models.md +5 -4
  27. package/docs-release/guides/task-state-machine.en-US.md +207 -0
  28. package/docs-release/guides/task-state-machine.md +214 -0
  29. package/docs-release/intl/en-US.md +1 -1
  30. package/docs-release/intl/zh-CN.md +1 -1
  31. package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/findings.md +7 -0
  32. package/package.json +8 -3
  33. package/presets/legacy-migration/checks/preset-check.mjs +3 -0
  34. package/presets/legacy-migration/preset.yaml +134 -0
  35. package/presets/legacy-migration/scripts/plan-work-queue.mjs +4 -0
  36. package/presets/legacy-migration/scripts/scaffold-task-contracts.mjs +4 -0
  37. package/presets/legacy-migration/templates/execution_strategy.append.md +18 -0
  38. package/presets/legacy-migration/templates/findings.seed.md +17 -0
  39. package/presets/legacy-migration/templates/review.seed.md +12 -0
  40. package/presets/legacy-migration/templates/task_plan.append.md +9 -0
  41. package/presets/legacy-migration/templates/visual_map.append.md +12 -0
  42. package/presets/legacy-migration/workbench/dashboard-panels.yaml +2 -0
  43. package/presets/legacy-migration/workbench/migration-queue.schema.json +23 -0
  44. package/presets/lesson-sedimentation/preset.yaml +23 -0
  45. package/presets/lesson-sedimentation/templates/prompt.md +23 -0
  46. package/presets/module/preset.yaml +25 -0
  47. package/presets/module/templates/execution_strategy.append.md +8 -0
  48. package/presets/module/templates/task_plan.append.md +17 -0
  49. package/presets/standard-task/preset.yaml +31 -0
  50. package/presets/standard-task/templates/task_plan.append.md +7 -0
  51. package/references/adversarial-review-standard.md +2 -2
  52. package/references/agents-md-pattern.md +2 -2
  53. package/references/delivery-operating-model-standard.md +3 -3
  54. package/references/docs-directory-standard.md +6 -7
  55. package/references/harness-ledger.md +53 -96
  56. package/references/lessons-governance.md +88 -93
  57. package/references/module-parallel-standard.md +14 -14
  58. package/references/planning-loop.md +12 -6
  59. package/references/pull-request-standard.md +118 -0
  60. package/references/repo-governance-standard.md +11 -2
  61. package/references/review-routing-standard.md +7 -1
  62. package/references/ssot-governance.md +67 -59
  63. package/references/taskr-gap-analysis.md +600 -0
  64. package/references/walkthrough-closeout.md +7 -7
  65. package/scripts/check-harness.mjs +40 -301
  66. package/scripts/commands/dashboard-command.mjs +67 -0
  67. package/scripts/commands/migration-command.mjs +96 -0
  68. package/scripts/commands/preset-command.mjs +73 -0
  69. package/scripts/commands/task-command.mjs +327 -0
  70. package/scripts/harness.mjs +55 -260
  71. package/scripts/lib/capability-registry.mjs +66 -8
  72. package/scripts/lib/check-module-parallel.mjs +237 -0
  73. package/scripts/lib/check-profiles.mjs +61 -153
  74. package/scripts/lib/check-task-contracts.mjs +47 -0
  75. package/scripts/lib/core-shared.mjs +10 -0
  76. package/scripts/lib/dashboard-data.mjs +29 -6
  77. package/scripts/lib/dashboard-workbench.mjs +52 -12
  78. package/scripts/lib/dashboard-writer.mjs +14 -2
  79. package/scripts/lib/git-status-summary.mjs +46 -0
  80. package/scripts/lib/governance-index-generator.mjs +174 -0
  81. package/scripts/lib/governance-sync.mjs +514 -0
  82. package/scripts/lib/governance-table-boundary.mjs +175 -0
  83. package/scripts/lib/harness-core.mjs +5 -0
  84. package/scripts/lib/lesson-maintenance.mjs +36 -29
  85. package/scripts/lib/migration-support.mjs +1 -1
  86. package/scripts/lib/preset-audit-contracts.mjs +37 -0
  87. package/scripts/lib/preset-engine.mjs +497 -0
  88. package/scripts/lib/preset-registry.mjs +627 -0
  89. package/scripts/lib/preset-resource-contracts.mjs +83 -0
  90. package/scripts/lib/review-confirm-git-gate.mjs +248 -0
  91. package/scripts/lib/status-dashboard-renderer.mjs +102 -0
  92. package/scripts/lib/subagent-authorization-audit.mjs +196 -0
  93. package/scripts/lib/task-completion-consistency.mjs +16 -0
  94. package/scripts/lib/task-index.mjs +93 -0
  95. package/scripts/lib/task-lesson-candidates.mjs +242 -0
  96. package/scripts/lib/task-lesson-sedimentation.mjs +326 -0
  97. package/scripts/lib/task-lifecycle/review-confirm.mjs +101 -0
  98. package/scripts/lib/task-lifecycle/review-gates.mjs +70 -0
  99. package/scripts/lib/task-lifecycle/text-utils.mjs +24 -0
  100. package/scripts/lib/task-lifecycle.mjs +297 -403
  101. package/scripts/lib/task-review-model.mjs +469 -0
  102. package/scripts/lib/task-scanner.mjs +130 -236
  103. package/scripts/lib/task-tombstone-commands.mjs +140 -0
  104. package/scripts/postinstall.mjs +14 -0
  105. package/skills/preset-creator/SKILL.md +179 -0
  106. package/skills/preset-creator/references/complex-task-skeleton/README.md +31 -0
  107. package/skills/preset-creator/references/complex-task-skeleton/artifacts/INDEX.md +12 -0
  108. package/skills/preset-creator/references/complex-task-skeleton/brief.md +32 -0
  109. package/skills/preset-creator/references/complex-task-skeleton/execution_strategy.md +71 -0
  110. package/skills/preset-creator/references/complex-task-skeleton/findings.md +24 -0
  111. package/skills/preset-creator/references/complex-task-skeleton/lesson_candidates.md +70 -0
  112. package/skills/preset-creator/references/complex-task-skeleton/long-running-task-contract.md +76 -0
  113. package/skills/preset-creator/references/complex-task-skeleton/progress.md +33 -0
  114. package/skills/preset-creator/references/complex-task-skeleton/references/INDEX.md +13 -0
  115. package/skills/preset-creator/references/complex-task-skeleton/review.md +107 -0
  116. package/skills/preset-creator/references/complex-task-skeleton/task_plan.md +111 -0
  117. package/skills/preset-creator/references/complex-task-skeleton/visual_map.md +50 -0
  118. package/skills/preset-creator/references/preset-package-skeleton.md +296 -0
  119. package/templates/AGENTS.md.template +19 -15
  120. package/templates/dashboard/assets/app-src/00-state.js +1 -0
  121. package/templates/dashboard/assets/app-src/10-router.js +2 -1
  122. package/templates/dashboard/assets/app-src/20-overview.js +11 -5
  123. package/templates/dashboard/assets/app-src/30-tasks.js +92 -246
  124. package/templates/dashboard/assets/app-src/35-task-detail.js +246 -0
  125. package/templates/dashboard/assets/app-src/45-review.js +241 -22
  126. package/templates/dashboard/assets/app-src/50-migration.js +24 -10
  127. package/templates/dashboard/assets/app-src/90-bindings.js +171 -29
  128. package/templates/dashboard/assets/app.css +698 -156
  129. package/templates/dashboard/assets/app.css.manifest.json +9 -0
  130. package/templates/dashboard/assets/app.js +662 -91
  131. package/templates/dashboard/assets/app.manifest.json +1 -0
  132. package/templates/dashboard/assets/css-src/00-foundation.css +342 -0
  133. package/templates/dashboard/assets/css-src/10-panels-flow.css +236 -0
  134. package/templates/dashboard/assets/css-src/20-briefs-controls.css +398 -0
  135. package/templates/dashboard/assets/css-src/30-task-index.css +739 -0
  136. package/templates/dashboard/assets/css-src/35-review-workspace.css +507 -0
  137. package/templates/dashboard/assets/css-src/40-detail-modules-migration.css +427 -0
  138. package/templates/dashboard/assets/css-src/50-responsive-overrides.css +551 -0
  139. package/templates/dashboard/assets/i18n.js +123 -21
  140. package/templates/ledger/Harness-Ledger.md +13 -25
  141. package/templates/lessons/lesson-arch-process-change.md +1 -1
  142. package/templates/lessons/lesson-new-doc.md +1 -1
  143. package/templates/lessons/lesson-ref-change.md +1 -1
  144. package/templates/planning/execution_strategy.md +31 -0
  145. package/templates/planning/lesson_candidates.md +18 -6
  146. package/templates/planning/optional/artifacts/INDEX.md +3 -3
  147. package/templates/planning/optional/references/INDEX.md +3 -3
  148. package/templates/planning/review.md +59 -0
  149. package/templates/planning/task_plan.md +36 -13
  150. package/templates/reference/execution-workflow-standard.md +4 -3
  151. package/templates/reference/pull-request-standard.md +80 -0
  152. package/templates/reference/repo-governance-standard.md +7 -6
  153. package/templates/reference/review-routing-standard.md +6 -0
  154. package/templates/reference/walkthrough-standard.md +2 -1
  155. package/templates/verifier/verifier-output.md +1 -1
  156. package/templates-zh-CN/AGENTS.md.template +20 -16
  157. package/templates-zh-CN/ledger/Harness-Ledger.md +17 -40
  158. package/templates-zh-CN/planning/execution_strategy.md +30 -0
  159. package/templates-zh-CN/planning/lesson_candidates.md +18 -6
  160. package/templates-zh-CN/planning/review.md +59 -1
  161. package/templates-zh-CN/planning/task_plan.md +30 -10
  162. package/templates-zh-CN/reference/adversarial-review-standard.md +1 -1
  163. package/templates-zh-CN/reference/docs-library-standard.md +1 -1
  164. package/templates-zh-CN/reference/execution-workflow-standard.md +4 -3
  165. package/templates-zh-CN/reference/harness-ledger-standard.md +2 -2
  166. package/templates-zh-CN/reference/pull-request-standard.md +106 -0
  167. package/templates-zh-CN/reference/repo-governance-standard.md +4 -3
  168. package/templates-zh-CN/reference/review-routing-standard.md +8 -1
  169. package/templates-zh-CN/reference/walkthrough-standard.md +3 -2
  170. package/templates-zh-CN/walkthrough/Closeout-SSoT.md +1 -1
  171. package/docs-release/assets/dashboard-overview-en.png +0 -0
  172. package/scripts/smoke-dashboard.mjs +0 -92
  173. package/scripts/test-harness.mjs +0 -1395
  174. package/templates/ssot/Feature-SSoT.md +0 -43
  175. package/templates/ssot/Lessons-SSoT.md +0 -44
  176. package/templates-zh-CN/ssot/Feature-SSoT.md +0 -49
  177. package/templates-zh-CN/ssot/Lessons-SSoT.md +0 -49
@@ -176,6 +176,7 @@ button, input, select {
176
176
  letter-spacing: 0.08em;
177
177
  margin: 0 0 6px;
178
178
  text-transform: uppercase;
179
+ overflow-wrap: anywhere;
179
180
  }
180
181
 
181
182
  .hero-actions {
@@ -232,9 +233,15 @@ button, input, select {
232
233
  margin-top: 16px;
233
234
  }
234
235
 
235
- @media (min-width: 1024px) {
236
+ .dashboard-main,
237
+ .dashboard-sidebar,
238
+ .status-card-group {
239
+ min-width: 0;
240
+ }
241
+
242
+ @media (min-width: 1280px) {
236
243
  .dashboard-grid {
237
- grid-template-columns: minmax(0, 2fr) minmax(320px, 1fr);
244
+ grid-template-columns: minmax(0, 1fr) minmax(300px, 360px);
238
245
  align-items: start;
239
246
  }
240
247
  }
@@ -341,6 +348,20 @@ button, input, select {
341
348
  gap: 18px;
342
349
  align-items: center;
343
350
  margin-bottom: 16px;
351
+ min-width: 0;
352
+ }
353
+
354
+ .section-head > div {
355
+ min-width: 0;
356
+ }
357
+
358
+ .section-actions {
359
+ display: flex;
360
+ flex-wrap: wrap;
361
+ justify-content: flex-end;
362
+ align-items: center;
363
+ gap: 10px;
364
+ min-width: 0;
344
365
  }
345
366
 
346
367
  .section-head h2,
@@ -351,6 +372,7 @@ button, input, select {
351
372
  font-size: 18px;
352
373
  font-weight: 800;
353
374
  letter-spacing: -0.015em;
375
+ overflow-wrap: anywhere;
354
376
  }
355
377
 
356
378
  .flow-panel,
@@ -568,6 +590,13 @@ button, input, select {
568
590
  gap: 16px;
569
591
  }
570
592
 
593
+ .brief-scroll {
594
+ max-height: min(58vh, 620px);
595
+ overflow-y: auto;
596
+ padding: 2px 8px 2px 2px;
597
+ scrollbar-gutter: stable;
598
+ }
599
+
571
600
  .brief-card {
572
601
  background: var(--paper);
573
602
  border: 1px solid var(--line);
@@ -597,6 +626,38 @@ button, input, select {
597
626
  border-color: var(--line);
598
627
  }
599
628
 
629
+ .copy-task-name {
630
+ border: 1px solid var(--line);
631
+ background: var(--paper-2);
632
+ color: var(--muted);
633
+ border-radius: 6px;
634
+ padding: 5px 8px;
635
+ font-size: 11px;
636
+ font-weight: 800;
637
+ line-height: 1.2;
638
+ cursor: pointer;
639
+ white-space: nowrap;
640
+ }
641
+
642
+ .copy-task-name:hover {
643
+ color: var(--accent);
644
+ border-color: color-mix(in srgb, var(--accent) 38%, var(--line));
645
+ }
646
+
647
+ .copy-task-name.compact,
648
+ .copy-task-name.row-copy {
649
+ padding: 4px 7px;
650
+ }
651
+
652
+ .copy-task-name.row-copy {
653
+ margin-top: 8px;
654
+ width: fit-content;
655
+ }
656
+
657
+ .copy-task-name.detail-copy {
658
+ margin-top: 10px;
659
+ }
660
+
600
661
  .card-head {
601
662
  display: flex;
602
663
  justify-content: space-between;
@@ -676,6 +737,8 @@ button, input, select {
676
737
 
677
738
  /* Premium Typography & Markdown Rendering */
678
739
  .markdown {
740
+ min-width: 0;
741
+ max-width: 100%;
679
742
  line-height: 1.6;
680
743
  overflow-wrap: anywhere;
681
744
  font-size: 14px;
@@ -710,6 +773,7 @@ button, input, select {
710
773
  }
711
774
 
712
775
  .markdown pre {
776
+ max-width: 100%;
713
777
  overflow: auto;
714
778
  background: var(--paper-2);
715
779
  border: 1px solid var(--line);
@@ -738,6 +802,7 @@ button, input, select {
738
802
  }
739
803
 
740
804
  .rendered-table-wrap {
805
+ max-width: 100%;
741
806
  overflow: auto;
742
807
  border: 1px solid var(--line);
743
808
  border-radius: 8px;
@@ -1153,6 +1218,12 @@ button, input, select {
1153
1218
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
1154
1219
  }
1155
1220
 
1221
+ .sort-toggle-group .layout-btn {
1222
+ min-width: 0;
1223
+ white-space: normal;
1224
+ line-height: 1.25;
1225
+ }
1226
+
1156
1227
  /* Beautiful taskstatsbar metrics strip */
1157
1228
  .task-stats-bar {
1158
1229
  display: flex;
@@ -1296,6 +1367,7 @@ button, input, select {
1296
1367
  background: var(--paper);
1297
1368
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1298
1369
  position: relative;
1370
+ cursor: pointer;
1299
1371
  }
1300
1372
 
1301
1373
  .task-row-card:hover {
@@ -1555,109 +1627,6 @@ button, input, select {
1555
1627
  border: 1px solid var(--line);
1556
1628
  }
1557
1629
 
1558
- .review-queue-stats {
1559
- display: grid;
1560
- grid-template-columns: 1fr;
1561
- gap: 10px;
1562
- }
1563
-
1564
- .review-queue-stats .metric {
1565
- min-height: 82px;
1566
- padding: 14px;
1567
- }
1568
-
1569
- .review-queue-summary {
1570
- display: grid;
1571
- gap: 14px;
1572
- }
1573
-
1574
- .review-queue-card {
1575
- gap: 14px;
1576
- }
1577
-
1578
- .review-queue-card .side-panel {
1579
- box-shadow: none;
1580
- background: var(--bg);
1581
- padding: 14px;
1582
- }
1583
-
1584
- .review-queue-actions {
1585
- display: flex;
1586
- gap: 10px;
1587
- flex-wrap: wrap;
1588
- align-items: center;
1589
- }
1590
-
1591
- .review-queue-actions a,
1592
- .review-queue-actions button {
1593
- border: 1px solid var(--line);
1594
- background: var(--paper-2);
1595
- color: var(--ink);
1596
- border-radius: 8px;
1597
- padding: 8px 12px;
1598
- font-size: 12px;
1599
- font-weight: 800;
1600
- text-decoration: none;
1601
- cursor: pointer;
1602
- }
1603
-
1604
- .review-queue-actions a:hover,
1605
- .review-queue-actions button:hover {
1606
- border-color: var(--accent);
1607
- }
1608
-
1609
- .runtime-banner {
1610
- display: flex;
1611
- flex-wrap: wrap;
1612
- gap: 10px;
1613
- align-items: center;
1614
- margin: 14px 0;
1615
- padding: 12px 16px;
1616
- border: 1px solid rgba(217, 119, 6, 0.22);
1617
- border-radius: 10px;
1618
- background: rgba(217, 119, 6, 0.08);
1619
- color: var(--ink);
1620
- }
1621
-
1622
- .runtime-banner span {
1623
- color: var(--muted);
1624
- }
1625
-
1626
- .runtime-banner code {
1627
- font-family: var(--font-mono);
1628
- font-size: 12px;
1629
- }
1630
-
1631
- .review-workspace {
1632
- display: grid;
1633
- gap: 20px;
1634
- }
1635
-
1636
- .review-workspace-grid {
1637
- display: grid;
1638
- grid-template-columns: minmax(0, 1fr);
1639
- gap: 20px;
1640
- }
1641
-
1642
- @media (min-width: 1180px) {
1643
- .review-workspace-grid {
1644
- grid-template-columns: minmax(0, 2fr) minmax(320px, 420px);
1645
- align-items: start;
1646
- }
1647
- }
1648
-
1649
- .review-workspace-side {
1650
- position: sticky;
1651
- top: 16px;
1652
- }
1653
-
1654
- .review-hero-tags {
1655
- display: flex;
1656
- flex-wrap: wrap;
1657
- justify-content: flex-end;
1658
- gap: 8px;
1659
- }
1660
-
1661
1630
  /* Beautiful Group Header styling */
1662
1631
  .task-group {
1663
1632
  background: var(--paper);
@@ -1748,85 +1717,605 @@ button, input, select {
1748
1717
  color: var(--accent);
1749
1718
  }
1750
1719
 
1751
- /* Detail view panels */
1752
- .detail-hero {
1753
- display: flex;
1754
- justify-content: space-between;
1755
- gap: 18px;
1756
- padding: 24px;
1757
- margin-bottom: 20px;
1720
+ .review-queue-stats {
1721
+ display: grid;
1722
+ grid-template-columns: 1fr;
1723
+ gap: 10px;
1758
1724
  }
1759
1725
 
1760
- .detail-hero > div {
1761
- min-width: 0;
1726
+ .review-queue-stats .metric {
1727
+ min-height: 82px;
1728
+ padding: 14px;
1762
1729
  }
1763
1730
 
1764
- .crumbs,
1765
- .eyebrow {
1766
- overflow-wrap: anywhere;
1731
+ .review-queue-summary {
1732
+ display: grid;
1733
+ gap: 14px;
1767
1734
  }
1768
1735
 
1769
- .detail-score {
1770
- font-size: 42px;
1736
+ .review-queue-tabs {
1737
+ display: grid;
1738
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
1739
+ gap: 8px;
1740
+ margin-top: 18px;
1741
+ }
1742
+
1743
+ .review-queue-tab {
1744
+ display: flex;
1745
+ justify-content: space-between;
1746
+ align-items: center;
1747
+ gap: 10px;
1748
+ min-height: 44px;
1749
+ border: 1px solid var(--line);
1750
+ border-radius: 8px;
1751
+ background: var(--paper-2);
1752
+ color: var(--ink);
1753
+ padding: 10px 12px;
1771
1754
  font-weight: 800;
1772
- color: var(--accent);
1773
- line-height: 1;
1755
+ text-align: left;
1756
+ cursor: pointer;
1774
1757
  }
1775
1758
 
1776
- .phase-timeline {
1759
+ .review-queue-tab strong {
1760
+ font-family: var(--font-mono);
1761
+ color: var(--muted);
1762
+ }
1763
+
1764
+ .review-queue-tab.active {
1765
+ border-color: var(--accent);
1766
+ background: color-mix(in srgb, var(--accent) 10%, var(--paper));
1767
+ }
1768
+
1769
+ .review-queue-toolbar {
1777
1770
  display: grid;
1778
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1771
+ grid-template-columns: minmax(240px, 1fr) minmax(180px, 240px) minmax(160px, 220px);
1779
1772
  gap: 12px;
1780
- margin-bottom: 24px;
1773
+ align-items: end;
1774
+ margin-top: 18px;
1775
+ padding: 12px;
1776
+ border: 1px solid var(--line);
1777
+ border-radius: 8px;
1778
+ background: var(--paper-2);
1781
1779
  }
1782
1780
 
1783
- .phase-timeline h2 {
1784
- grid-column: 1 / -1;
1785
- margin: 0 0 4px;
1786
- font-size: 16px;
1781
+ .review-queue-toolbar .input-group,
1782
+ .review-queue-toolbar .select-group {
1783
+ display: grid;
1784
+ gap: 6px;
1785
+ min-width: 0;
1787
1786
  }
1788
1787
 
1789
- .phase-step {
1790
- background: var(--paper);
1788
+ .review-queue-toolbar label {
1789
+ font-size: 11px;
1790
+ font-weight: 800;
1791
+ color: var(--muted);
1792
+ text-transform: uppercase;
1793
+ }
1794
+
1795
+ .review-queue-toolbar input,
1796
+ .review-queue-toolbar select {
1797
+ width: 100%;
1798
+ min-width: 0;
1791
1799
  border: 1px solid var(--line);
1792
- border-radius: 12px;
1793
- padding: 16px;
1794
- box-shadow: var(--shadow);
1795
- transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1800
+ background: var(--paper);
1801
+ color: var(--ink);
1802
+ border-radius: 8px;
1803
+ padding: 9px 12px;
1804
+ font-size: 13px;
1805
+ font-weight: 650;
1806
+ line-height: 1.25;
1796
1807
  }
1797
1808
 
1798
- .phase-step:hover {
1799
- transform: translateY(-2px);
1800
- box-shadow: var(--shadow-hover);
1809
+ .review-queue-toolbar input:focus,
1810
+ .review-queue-toolbar select:focus {
1811
+ outline: 2px solid color-mix(in srgb, var(--accent) 28%, transparent);
1812
+ outline-offset: 1px;
1813
+ border-color: color-mix(in srgb, var(--accent) 54%, var(--line));
1801
1814
  }
1802
1815
 
1803
- .phase-step strong {
1804
- font-size: 14px;
1805
- font-weight: 800;
1816
+ .review-queue-list-shell {
1817
+ margin-top: 18px;
1818
+ max-height: clamp(560px, 72vh, 920px);
1819
+ overflow: auto;
1820
+ overscroll-behavior: contain;
1821
+ padding: 2px 8px 2px 2px;
1822
+ border-radius: 10px;
1823
+ scrollbar-gutter: stable;
1806
1824
  }
1807
1825
 
1808
- .phase-step p {
1809
- color: var(--muted);
1810
- min-height: 42px;
1811
- font-size: 12px;
1812
- margin: 8px 0;
1813
- line-height: 1.4;
1826
+ .review-queue-list-shell:focus {
1827
+ outline: 2px solid color-mix(in srgb, var(--accent) 45%, transparent);
1828
+ outline-offset: 3px;
1814
1829
  }
1815
1830
 
1816
- .detail-grid {
1831
+ .review-queue-list {
1817
1832
  display: grid;
1818
- grid-template-columns: minmax(0, 1.8fr) minmax(280px, 360px);
1819
- gap: 20px;
1833
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr));
1834
+ gap: 14px;
1820
1835
  align-items: start;
1821
1836
  }
1822
1837
 
1823
- .detail-main {
1838
+ .review-queue-list > .empty-state {
1839
+ grid-column: 1 / -1;
1840
+ }
1841
+
1842
+ .review-queue-card {
1843
+ gap: 12px;
1844
+ min-width: 0;
1845
+ max-height: clamp(520px, 68vh, 680px);
1846
+ overflow: auto;
1847
+ scrollbar-gutter: stable;
1848
+ }
1849
+
1850
+ .review-queue-card .card-header {
1851
+ flex-wrap: wrap;
1852
+ align-items: flex-start;
1853
+ justify-content: flex-start;
1854
+ }
1855
+
1856
+ .review-queue-card .card-id,
1857
+ .review-queue-card .card-title,
1858
+ .review-queue-card .subtle,
1859
+ .review-reason span {
1860
+ overflow-wrap: anywhere;
1861
+ }
1862
+
1863
+ .review-queue-card .subtle,
1864
+ .review-reason span {
1865
+ display: -webkit-box;
1866
+ -webkit-box-orient: vertical;
1867
+ -webkit-line-clamp: 2;
1868
+ overflow: hidden;
1869
+ }
1870
+
1871
+ .review-queue-card .side-panel {
1872
+ box-shadow: none;
1873
+ background: var(--bg);
1874
+ padding: 14px;
1875
+ }
1876
+
1877
+ .review-queue-actions {
1878
+ display: flex;
1879
+ gap: 10px;
1880
+ flex-wrap: wrap;
1881
+ align-items: center;
1882
+ }
1883
+
1884
+ .review-queue-actions a,
1885
+ .review-queue-actions button {
1886
+ border: 1px solid var(--line);
1887
+ background: var(--paper-2);
1888
+ color: var(--ink);
1889
+ border-radius: 8px;
1890
+ padding: 8px 12px;
1891
+ font-size: 12px;
1892
+ font-weight: 800;
1893
+ text-decoration: none;
1894
+ cursor: pointer;
1895
+ }
1896
+
1897
+ .review-queue-actions a:hover,
1898
+ .review-queue-actions button:hover {
1899
+ border-color: var(--accent);
1900
+ }
1901
+
1902
+ .review-queue-actions button:disabled {
1903
+ cursor: not-allowed;
1904
+ opacity: 0.55;
1905
+ }
1906
+
1907
+ .review-reasons {
1908
+ display: grid;
1909
+ gap: 8px;
1910
+ }
1911
+
1912
+ .review-reason {
1913
+ display: grid;
1914
+ gap: 3px;
1915
+ padding: 10px 12px;
1916
+ border: 1px solid var(--line);
1917
+ border-radius: 8px;
1918
+ background: var(--paper-2);
1919
+ }
1920
+
1921
+ .review-reason strong {
1922
+ font-size: 12px;
1923
+ color: var(--ink);
1924
+ }
1925
+
1926
+ .review-reason span {
1927
+ color: var(--muted);
1928
+ font-size: 12px;
1929
+ line-height: 1.45;
1930
+ }
1931
+
1932
+ .lesson-candidate-panel {
1933
+ display: grid;
1934
+ gap: 10px;
1935
+ min-width: 0;
1936
+ padding: 12px;
1937
+ border: 1px solid var(--line);
1938
+ border-radius: 8px;
1939
+ background: var(--paper);
1940
+ overflow: hidden;
1941
+ }
1942
+
1943
+ .lesson-candidate-panel.compact {
1944
+ background: var(--paper-2);
1945
+ }
1946
+
1947
+ .lesson-candidate-panel-head {
1948
+ display: flex;
1949
+ justify-content: space-between;
1950
+ align-items: start;
1951
+ gap: 10px;
1952
+ min-width: 0;
1953
+ }
1954
+
1955
+ .lesson-candidate-panel-head h3 {
1956
+ margin: 2px 0 0;
1957
+ font-size: 14px;
1958
+ line-height: 1.25;
1959
+ }
1960
+
1961
+ .lesson-action-note {
1962
+ margin: 0;
1963
+ color: var(--muted);
1964
+ font-size: 12px;
1965
+ line-height: 1.45;
1966
+ }
1967
+
1968
+ .lesson-candidate-actions {
1969
+ display: grid;
1970
+ gap: 8px;
1971
+ max-height: clamp(190px, 32vh, 320px);
1972
+ overflow: auto;
1973
+ min-width: 0;
1974
+ scrollbar-gutter: stable;
1975
+ }
1976
+
1977
+ .lesson-candidate-action {
1978
+ display: grid;
1979
+ grid-template-columns: minmax(0, 1fr);
1980
+ gap: 6px;
1981
+ padding: 10px 12px;
1982
+ border: 1px solid var(--line);
1983
+ border-radius: 8px;
1984
+ background: var(--paper-2);
1985
+ }
1986
+
1987
+ .lesson-candidate-panel.compact .lesson-candidate-action {
1988
+ background: var(--paper);
1989
+ }
1990
+
1991
+ .lesson-candidate-main {
1992
+ display: grid;
1993
+ gap: 4px;
1994
+ min-width: 0;
1995
+ }
1996
+
1997
+ .lesson-candidate-action strong,
1998
+ .lesson-candidate-action span,
1999
+ .lesson-candidate-action small {
2000
+ min-width: 0;
2001
+ overflow-wrap: anywhere;
2002
+ }
2003
+
2004
+ .lesson-candidate-action small {
2005
+ color: var(--muted);
2006
+ font-size: 12px;
2007
+ }
2008
+
2009
+ .lesson-candidate-command-row {
2010
+ display: flex;
2011
+ flex-wrap: wrap;
2012
+ gap: 8px;
2013
+ align-items: center;
2014
+ min-width: 0;
2015
+ }
2016
+
2017
+ .lesson-candidate-action a,
2018
+ .lesson-candidate-action button {
2019
+ display: inline-flex;
2020
+ justify-content: center;
2021
+ align-items: center;
2022
+ border: 1px solid var(--line);
2023
+ background: var(--paper);
2024
+ color: var(--ink);
2025
+ border-radius: 8px;
2026
+ padding: 7px 10px;
2027
+ font-size: 12px;
2028
+ font-weight: 800;
2029
+ text-decoration: none;
2030
+ }
2031
+
2032
+ .lesson-candidate-action button:disabled {
2033
+ cursor: not-allowed;
2034
+ opacity: 0.55;
2035
+ }
2036
+
2037
+ .lesson-candidate-action .review-result {
2038
+ display: block;
2039
+ min-width: 0;
2040
+ }
2041
+
2042
+ .lesson-candidate-action .review-result:empty {
2043
+ display: none;
2044
+ }
2045
+
2046
+ .lesson-candidate-more {
2047
+ display: block;
2048
+ border: 1px dashed var(--line);
2049
+ border-radius: 8px;
2050
+ padding: 8px 10px;
2051
+ color: var(--muted);
2052
+ font-size: 12px;
2053
+ font-weight: 700;
2054
+ background: var(--paper);
2055
+ text-decoration: none;
2056
+ }
2057
+
2058
+ .task-queue-reasons {
2059
+ grid-column: 1 / -1;
2060
+ }
2061
+
2062
+ .task-queue-reasons .review-reasons {
2063
+ margin-top: 8px;
2064
+ max-height: 220px;
2065
+ overflow: auto;
2066
+ }
2067
+
2068
+ .review-queue-pager {
2069
+ display: flex;
2070
+ justify-content: flex-end;
2071
+ margin-top: 16px;
2072
+ }
2073
+
2074
+ .review-queue-contract {
2075
+ display: grid;
2076
+ gap: 8px;
2077
+ margin: 0;
2078
+ }
2079
+
2080
+ .review-queue-contract div {
2081
+ display: flex;
2082
+ justify-content: space-between;
2083
+ gap: 12px;
2084
+ border-top: 1px solid var(--line);
2085
+ padding-top: 8px;
2086
+ }
2087
+
2088
+ .review-queue-contract dt,
2089
+ .review-queue-contract dd {
2090
+ margin: 0;
2091
+ }
2092
+
2093
+ .review-queue-contract dt {
2094
+ color: var(--muted);
2095
+ }
2096
+
2097
+ .review-queue-contract dd {
2098
+ font-family: var(--font-mono);
2099
+ color: var(--ink);
2100
+ }
2101
+
2102
+ .runtime-banner {
2103
+ display: flex;
2104
+ flex-wrap: wrap;
2105
+ gap: 10px;
2106
+ align-items: center;
2107
+ margin: 14px 0;
2108
+ padding: 12px 16px;
2109
+ border: 1px solid rgba(217, 119, 6, 0.22);
2110
+ border-radius: 10px;
2111
+ background: rgba(217, 119, 6, 0.08);
2112
+ color: var(--ink);
2113
+ }
2114
+
2115
+ .runtime-banner span {
2116
+ color: var(--muted);
2117
+ }
2118
+
2119
+ .runtime-banner code {
2120
+ font-family: var(--font-mono);
2121
+ font-size: 12px;
2122
+ }
2123
+
2124
+ .review-workspace {
2125
+ display: grid;
2126
+ gap: 20px;
2127
+ min-width: 0;
2128
+ max-width: 100%;
2129
+ }
2130
+
2131
+ .review-workspace-grid {
2132
+ display: grid;
2133
+ grid-template-columns: minmax(0, 1fr);
2134
+ gap: 20px;
2135
+ min-width: 0;
2136
+ max-width: 100%;
2137
+ }
2138
+
2139
+ .review-workspace-main,
2140
+ .review-workspace-side,
2141
+ .review-doc-panel {
2142
+ min-width: 0;
2143
+ max-width: 100%;
2144
+ }
2145
+
2146
+ .review-doc-scroll {
2147
+ max-height: min(58vh, 560px);
2148
+ overflow: auto;
2149
+ overscroll-behavior: contain;
2150
+ scrollbar-gutter: stable;
2151
+ border-radius: 8px;
2152
+ }
2153
+
2154
+ .workbench-action-result {
2155
+ display: flex;
2156
+ flex-wrap: wrap;
2157
+ align-items: center;
2158
+ gap: 7px;
2159
+ margin-top: 2px;
2160
+ padding: 9px 10px;
2161
+ border: 1px solid var(--line);
2162
+ border-radius: 8px;
2163
+ background: var(--paper);
2164
+ font-size: 12px;
2165
+ line-height: 1.45;
2166
+ }
2167
+
2168
+ .workbench-action-result strong,
2169
+ .workbench-action-result span,
2170
+ .workbench-action-result ul {
2171
+ flex: 1 0 100%;
2172
+ }
2173
+
2174
+ .workbench-action-result.success {
2175
+ border-color: color-mix(in srgb, var(--ok) 45%, var(--line));
2176
+ }
2177
+
2178
+ .workbench-action-result.failed {
2179
+ border-color: color-mix(in srgb, var(--danger) 42%, var(--line));
2180
+ }
2181
+
2182
+ .workbench-action-result a,
2183
+ .workbench-action-result button {
2184
+ margin: 0;
2185
+ }
2186
+
2187
+ .workbench-action-result ul {
2188
+ margin: 0;
2189
+ padding-left: 18px;
2190
+ color: var(--muted);
2191
+ }
2192
+
2193
+ @media (min-width: 1280px) {
2194
+ .review-workspace-grid {
2195
+ grid-template-columns: minmax(0, 1fr) minmax(300px, 380px);
2196
+ align-items: start;
2197
+ }
2198
+ }
2199
+
2200
+ .review-workspace-side {
2201
+ position: sticky;
2202
+ top: 16px;
2203
+ }
2204
+
2205
+ .review-hero-tags {
2206
+ display: flex;
2207
+ flex-wrap: wrap;
2208
+ justify-content: flex-end;
2209
+ gap: 8px;
2210
+ }
2211
+
2212
+ @media (max-width: 900px) {
2213
+ .review-queue-toolbar {
2214
+ grid-template-columns: 1fr;
2215
+ }
2216
+
2217
+ .review-queue-list {
2218
+ grid-template-columns: 1fr;
2219
+ }
2220
+ }
2221
+
2222
+ @media (min-width: 901px) and (max-width: 1279px) {
2223
+ .review-queue-list {
2224
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr));
2225
+ }
2226
+ }
2227
+
2228
+ /* Detail view panels */
2229
+ .detail-hero {
2230
+ display: flex;
2231
+ justify-content: space-between;
2232
+ gap: 18px;
2233
+ padding: 24px;
2234
+ margin-bottom: 20px;
2235
+ }
2236
+
2237
+ .detail-hero > div {
2238
+ min-width: 0;
2239
+ }
2240
+
2241
+ .crumbs,
2242
+ .eyebrow {
2243
+ overflow-wrap: anywhere;
2244
+ }
2245
+
2246
+ .detail-score {
2247
+ font-size: 42px;
2248
+ font-weight: 800;
2249
+ color: var(--accent);
2250
+ line-height: 1;
2251
+ }
2252
+
2253
+ .phase-timeline {
2254
+ display: grid;
2255
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2256
+ gap: 12px;
2257
+ margin-bottom: 24px;
2258
+ }
2259
+
2260
+ .phase-timeline h2 {
2261
+ grid-column: 1 / -1;
2262
+ margin: 0 0 4px;
2263
+ font-size: 16px;
2264
+ }
2265
+
2266
+ .phase-step {
2267
+ background: var(--paper);
2268
+ border: 1px solid var(--line);
2269
+ border-radius: 12px;
2270
+ padding: 16px;
2271
+ box-shadow: var(--shadow);
2272
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
2273
+ cursor: pointer;
2274
+ }
2275
+
2276
+ .card-header-actions {
2277
+ display: flex;
2278
+ align-items: center;
2279
+ justify-content: flex-end;
2280
+ gap: 8px;
2281
+ min-width: 0;
2282
+ }
2283
+
2284
+ .phase-step:hover {
2285
+ transform: translateY(-2px);
2286
+ box-shadow: var(--shadow-hover);
2287
+ }
2288
+
2289
+ .phase-step strong {
2290
+ font-size: 14px;
2291
+ font-weight: 800;
2292
+ }
2293
+
2294
+ .phase-step p {
2295
+ color: var(--muted);
2296
+ min-height: 42px;
2297
+ font-size: 12px;
2298
+ margin: 8px 0;
2299
+ line-height: 1.4;
2300
+ }
2301
+
2302
+ .detail-grid {
2303
+ display: grid;
2304
+ grid-template-columns: minmax(0, 1.8fr) minmax(280px, 360px);
2305
+ gap: 20px;
2306
+ align-items: start;
2307
+ }
2308
+
2309
+ .detail-main {
1824
2310
  display: grid;
1825
2311
  gap: 20px;
1826
2312
  }
1827
2313
 
1828
2314
  .doc-section {
1829
2315
  padding: 24px;
2316
+ min-width: 0;
2317
+ max-width: 100%;
2318
+ overflow: hidden;
1830
2319
  }
1831
2320
 
1832
2321
  .doc-library {
@@ -1914,13 +2403,15 @@ button, input, select {
1914
2403
 
1915
2404
  .side-panel {
1916
2405
  padding: 20px;
2406
+ min-width: 0;
2407
+ max-width: 100%;
1917
2408
  }
1918
2409
 
1919
2410
  .side-panel a {
1920
2411
  display: inline-flex;
1921
2412
  margin: 6px 6px 0 0;
1922
2413
  padding: 6px 12px;
1923
- border-radius: 999px; /* Pill */
2414
+ border-radius: 8px;
1924
2415
  background: var(--paper-2);
1925
2416
  border: 1px solid var(--line);
1926
2417
  font-size: 12px;
@@ -1932,7 +2423,6 @@ button, input, select {
1932
2423
  background: var(--accent);
1933
2424
  color: var(--paper);
1934
2425
  border-color: var(--accent);
1935
- transform: scale(1.03);
1936
2426
  }
1937
2427
 
1938
2428
  .finding {
@@ -2264,7 +2754,7 @@ details summary {
2264
2754
  .task-drawer {
2265
2755
  position: fixed;
2266
2756
  top: 0;
2267
- right: -67vw;
2757
+ right: 0;
2268
2758
  width: 65vw;
2269
2759
  max-width: 100%;
2270
2760
  height: 100%;
@@ -2274,15 +2764,15 @@ details summary {
2274
2764
  z-index: 1001;
2275
2765
  display: flex;
2276
2766
  flex-direction: column;
2277
- transition: right 0.35s cubic-bezier(0.16, 1, 0.3, 1);
2767
+ transform: translateX(105%);
2768
+ transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1);
2278
2769
  }
2279
2770
  .task-drawer.active {
2280
- right: 0;
2771
+ transform: translateX(0);
2281
2772
  }
2282
2773
  @media (max-width: 768px) {
2283
2774
  .task-drawer {
2284
2775
  width: 100%;
2285
- right: -102%;
2286
2776
  }
2287
2777
  }
2288
2778
 
@@ -2322,6 +2812,35 @@ details summary {
2322
2812
  padding: 24px;
2323
2813
  }
2324
2814
 
2815
+ .drawer-task-summary {
2816
+ display: flex;
2817
+ justify-content: space-between;
2818
+ align-items: center;
2819
+ gap: 12px;
2820
+ margin-bottom: 18px;
2821
+ background: var(--paper-2);
2822
+ border: 1px solid var(--line);
2823
+ padding: 12px 14px;
2824
+ border-radius: 8px;
2825
+ }
2826
+
2827
+ .drawer-task-summary span {
2828
+ display: block;
2829
+ margin-bottom: 3px;
2830
+ color: var(--muted);
2831
+ font-size: 11px;
2832
+ font-weight: 800;
2833
+ text-transform: uppercase;
2834
+ }
2835
+
2836
+ .drawer-task-summary strong {
2837
+ display: block;
2838
+ font-size: 22px;
2839
+ font-weight: 850;
2840
+ color: var(--accent);
2841
+ line-height: 1;
2842
+ }
2843
+
2325
2844
  /* Compact brief card teaser styles */
2326
2845
  .brief-teaser {
2327
2846
  font-size: 13px;
@@ -2336,6 +2855,8 @@ details summary {
2336
2855
  }
2337
2856
  .card-actions {
2338
2857
  display: flex;
2858
+ flex-wrap: wrap;
2859
+ align-items: center;
2339
2860
  gap: 10px;
2340
2861
  margin-top: auto;
2341
2862
  }
@@ -2579,6 +3100,7 @@ details summary {
2579
3100
  border: 1px solid var(--line);
2580
3101
  border-radius: 8px;
2581
3102
  padding: 10px;
3103
+ min-width: 0;
2582
3104
  }
2583
3105
  .task-state-summary span:first-child {
2584
3106
  display: block;
@@ -2588,6 +3110,15 @@ details summary {
2588
3110
  margin-bottom: 6px;
2589
3111
  text-transform: uppercase;
2590
3112
  }
3113
+ .task-state-summary .tag {
3114
+ display: flex;
3115
+ width: 100%;
3116
+ min-width: 0;
3117
+ max-width: 100%;
3118
+ white-space: normal;
3119
+ text-align: center;
3120
+ overflow-wrap: anywhere;
3121
+ }
2591
3122
  .review-actions {
2592
3123
  display: grid;
2593
3124
  gap: 10px;
@@ -2617,6 +3148,17 @@ details summary {
2617
3148
  padding: 9px 10px;
2618
3149
  font: inherit;
2619
3150
  }
3151
+ .review-confirm-copy {
3152
+ display: flex;
3153
+ justify-content: flex-start;
3154
+ }
3155
+ .review-actions .copy-task-name.review-copy-task-name {
3156
+ width: fit-content;
3157
+ background: var(--paper-2);
3158
+ color: var(--ink);
3159
+ border: 1px solid var(--line);
3160
+ padding: 6px 10px;
3161
+ }
2620
3162
  .review-actions button {
2621
3163
  width: 100%;
2622
3164
  border: 0;