forgedock 1.0.16 → 1.0.18

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 (190) hide show
  1. package/README.md +54 -3
  2. package/bin/cross-publish.mjs +344 -0
  3. package/bin/forgedock.mjs +2205 -541
  4. package/bin/github-app-manifest.json.license +2 -0
  5. package/bin/hooks/session-start.mjs +4 -5
  6. package/bin/registry.mjs +20 -0
  7. package/bin/tui.mjs +172 -96
  8. package/commands/adopt.md +433 -0
  9. package/commands/analytics.md +2 -0
  10. package/commands/audit-agents.md +2 -0
  11. package/commands/audit.md +2 -0
  12. package/commands/autopilot.md +77 -0
  13. package/commands/changelog.md +354 -0
  14. package/commands/cleanup.md +2 -0
  15. package/commands/compat-audit.md +330 -0
  16. package/commands/deploy-info.md +6 -5
  17. package/commands/design-bench.md +176 -0
  18. package/commands/design-render-critique-loop.md +103 -0
  19. package/commands/design.md +259 -0
  20. package/commands/diagnose.md +483 -0
  21. package/commands/explain.md +349 -0
  22. package/commands/forge-stats.md +2 -0
  23. package/commands/forgedock-init.md +2 -0
  24. package/commands/geo-audit.md +2 -0
  25. package/commands/incident-response.md +2 -0
  26. package/commands/issue.md +9 -3
  27. package/commands/milestone.md +2 -0
  28. package/commands/optimize.md +411 -0
  29. package/commands/orchestrate.md +239 -0
  30. package/commands/pipeline-health.md +60 -1
  31. package/commands/qa-sweep.md +39 -2
  32. package/commands/quality-gate.md +67 -0
  33. package/commands/replay.md +263 -0
  34. package/commands/resume.md +264 -0
  35. package/commands/review-pr-agents.md +5 -1
  36. package/commands/review-pr-staging.md +160 -2
  37. package/commands/review-pr.md +85 -3
  38. package/commands/rollback.md +2 -0
  39. package/commands/scope.md +280 -0
  40. package/commands/security-audit.md +2 -0
  41. package/commands/status.md +262 -0
  42. package/commands/sync-ecosystem.md +2 -0
  43. package/commands/test-gate.md +929 -0
  44. package/commands/validate.md +2 -0
  45. package/commands/work-on/build/architect.md +128 -18
  46. package/commands/work-on/build/context.md +130 -17
  47. package/commands/work-on/build/implement.md +7 -3
  48. package/commands/work-on/build/validate.md +2 -0
  49. package/commands/work-on/build.md +32 -7
  50. package/commands/work-on/close.md +85 -0
  51. package/commands/work-on/decompose.md +2 -0
  52. package/commands/work-on/investigate.md +30 -3
  53. package/commands/work-on/review.md +13 -1
  54. package/commands/work-on-monolithic.md +2 -0
  55. package/commands/work-on.md +676 -38
  56. package/docs/BRAND.md +51 -0
  57. package/docs/CI.md +177 -0
  58. package/docs/CONFIG.md +94 -0
  59. package/docs/FORGE-PROTOCOL.md +324 -0
  60. package/docs/articles/b-vs-c-baseline.md +210 -0
  61. package/docs/articles/full-abc-benchmark.md +205 -0
  62. package/docs/articles/per-repo-adaptive-scripts-token-savings.md +174 -0
  63. package/docs/articles/selective-spec-loading-token-savings.md +140 -0
  64. package/docs/claude-breakpoints.json +47 -0
  65. package/docs/design/abc-benchmark.md +195 -0
  66. package/docs/design/design-architect-rationale.md +123 -0
  67. package/docs/design/design-memory.md +61 -0
  68. package/docs/design/design-spec-schema.md +248 -0
  69. package/docs/design/design-system-lint.md +150 -0
  70. package/docs/design/divergent-generation.md +106 -0
  71. package/docs/design/effects-appropriateness.md +133 -0
  72. package/docs/design/fixtures/briefs/README.md +47 -0
  73. package/docs/design/fixtures/briefs/cadence.md +39 -0
  74. package/docs/design/fixtures/briefs/plume.md +39 -0
  75. package/docs/design/fixtures/briefs/slipstream.md +39 -0
  76. package/docs/design/fixtures/briefs/tender.md +39 -0
  77. package/docs/design/fixtures/briefs/voltage.md +39 -0
  78. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-1.html +364 -0
  79. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-2.html +420 -0
  80. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-3.html +506 -0
  81. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-1.html +611 -0
  82. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-2.html +594 -0
  83. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-3.html +817 -0
  84. package/docs/design/fixtures/runs/b-vs-c-baseline/runs.json +175 -0
  85. package/docs/design/fixtures/runs/b-vs-c-baseline/scorecard.json +138 -0
  86. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-1.html +373 -0
  87. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-2.html +398 -0
  88. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-3.html +595 -0
  89. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-1.html +531 -0
  90. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-2.html +565 -0
  91. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-3.html +674 -0
  92. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-1.html +388 -0
  93. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-2.html +463 -0
  94. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-3.html +568 -0
  95. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-1.html +562 -0
  96. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-2.html +618 -0
  97. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-3.html +618 -0
  98. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-1.html +364 -0
  99. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-2.html +420 -0
  100. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-3.html +506 -0
  101. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-1.html +527 -0
  102. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-2.html +445 -0
  103. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-3.html +483 -0
  104. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-1.html +611 -0
  105. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-2.html +594 -0
  106. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-3.html +817 -0
  107. package/docs/design/fixtures/runs/full-abc/runs.json +190 -0
  108. package/docs/design/fixtures/runs/full-abc/scorecard.json +144 -0
  109. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-1.html +496 -0
  110. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-2.html +447 -0
  111. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-3.html +564 -0
  112. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-1.html +373 -0
  113. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-2.html +398 -0
  114. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-3.html +595 -0
  115. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-1.html +622 -0
  116. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-2.html +475 -0
  117. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-3.html +660 -0
  118. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-1.html +531 -0
  119. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-2.html +565 -0
  120. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-3.html +674 -0
  121. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-1.html +525 -0
  122. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-2.html +446 -0
  123. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-3.html +463 -0
  124. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-1.html +388 -0
  125. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-2.html +463 -0
  126. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-3.html +568 -0
  127. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-1.html +1068 -0
  128. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-2.html +1423 -0
  129. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-3.html +1245 -0
  130. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-1.html +305 -0
  131. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-2.html +327 -0
  132. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-3.html +428 -0
  133. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-1.html +1270 -0
  134. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-2.html +1172 -0
  135. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-3.html +1532 -0
  136. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-1.html +315 -0
  137. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-2.html +342 -0
  138. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-3.html +353 -0
  139. package/docs/design/fixtures/runs/full-abc-opus/runs.json +190 -0
  140. package/docs/design/fixtures/runs/full-abc-opus/scorecard.json +144 -0
  141. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-1.html +345 -0
  142. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-2.html +396 -0
  143. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-3.html +502 -0
  144. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-1.html +408 -0
  145. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-2.html +446 -0
  146. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-3.html +496 -0
  147. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-1.html +813 -0
  148. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-2.html +711 -0
  149. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-3.html +721 -0
  150. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-1.html +280 -0
  151. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-2.html +291 -0
  152. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-3.html +366 -0
  153. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-1.html +1010 -0
  154. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-2.html +836 -0
  155. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-3.html +930 -0
  156. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-1.html +407 -0
  157. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-2.html +396 -0
  158. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-3.html +529 -0
  159. package/docs/design/foundations/brutalist.css +294 -0
  160. package/docs/design/foundations/editorial.css +300 -0
  161. package/docs/design/foundations/minimal-luxury.css +295 -0
  162. package/docs/design/foundations/technical.css +293 -0
  163. package/docs/design/foundations/warm-photo.css +299 -0
  164. package/docs/design/reference-corpus.md +1726 -0
  165. package/docs/design/render-critique-loop.md +57 -0
  166. package/docs/site/getting-started.md +21 -0
  167. package/docs/spec-graph-schema.md +397 -0
  168. package/package.json +3 -3
  169. package/scripts/bench-scorecard.mjs +239 -0
  170. package/scripts/build-spec-graph.mjs +509 -0
  171. package/scripts/classify-lane.sh +138 -0
  172. package/scripts/design-system-lint.mjs +993 -0
  173. package/scripts/graph-query.sh +486 -0
  174. package/scripts/transition-label.sh +169 -0
  175. package/scripts/validate-pr-target.sh +30 -0
  176. package/scripts/validate-spec-graph.sh +423 -0
  177. package/templates/devdocs/README.md +72 -0
  178. package/templates/devdocs/agent/using-forgedock.md +3 -0
  179. package/templates/devdocs/agent/using-github.md +3 -0
  180. package/templates/devdocs/index.yaml +162 -0
  181. package/templates/devdocs/project/architecture.md +3 -0
  182. package/templates/devdocs/project/conventions.md +3 -0
  183. package/templates/devdocs/project/custom-instructions.md +3 -0
  184. package/templates/devdocs/project/glossary.md +3 -0
  185. package/templates/devdocs/project/stack.md +3 -0
  186. package/templates/devdocs/templates/commit-convention.md +3 -0
  187. package/templates/devdocs/templates/issue.md +3 -0
  188. package/templates/devdocs/templates/pull-request.md +3 -0
  189. package/templates/devdocs/templates/review-finding.md +3 -0
  190. package/templates/workflows/forgedock-review.yml +96 -0
@@ -0,0 +1,353 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Plume | Project management for builders</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
8
+ <style>
9
+ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
10
+ html { font-size: 16px; }
11
+ body { font-family: 'DM Sans', sans-serif; background: #0b1120; color: #e2e8f0; -webkit-font-smoothing: antialiased; overflow-x: hidden; }
12
+ code, .mono { font-family: 'IBM Plex Mono', monospace; }
13
+
14
+ /* Gradient overlay at top */
15
+ body::before { content: ''; position: fixed; top: 0; left: 0; right: 0; height: 600px; background: radial-gradient(ellipse 80% 50% at 50% -20%, rgba(56,189,248,0.12) 0%, transparent 100%); pointer-events: none; z-index: 0; }
16
+
17
+ /* Nav */
18
+ .nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; padding: 0 48px; height: 60px; display: flex; align-items: center; justify-content: space-between; background: rgba(11,17,32,0.75); backdrop-filter: blur(16px); border-bottom: 1px solid rgba(255,255,255,0.05); }
19
+ .nav-brand { font-size: 1.125rem; font-weight: 700; color: #f8fafc; letter-spacing: -0.02em; display: flex; align-items: center; gap: 8px; }
20
+ .nav-brand .mark { width: 24px; height: 24px; background: linear-gradient(135deg, #38bdf8, #818cf8); border-radius: 6px; }
21
+ .nav-right { display: flex; gap: 28px; align-items: center; }
22
+ .nav-right a { color: #94a3b8; font-size: 0.875rem; text-decoration: none; font-weight: 500; }
23
+ .nav-right a:hover { color: #e2e8f0; }
24
+ .nav-signup { background: linear-gradient(135deg, #38bdf8, #818cf8); color: #0b1120; padding: 8px 20px; border-radius: 8px; font-weight: 600; font-size: 0.875rem; text-decoration: none; }
25
+
26
+ /* Hero — full-width centered, large type */
27
+ .hero { position: relative; z-index: 1; padding: 200px 48px 100px; text-align: center; max-width: 880px; margin: 0 auto; }
28
+ .hero h1 { font-size: 4.5rem; font-weight: 700; line-height: 1.05; letter-spacing: -0.045em; margin-bottom: 28px; }
29
+ .hero h1 .gradient { background: linear-gradient(135deg, #38bdf8 0%, #818cf8 50%, #c084fc 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
30
+ .hero .subtitle { font-size: 1.25rem; color: #94a3b8; line-height: 1.7; max-width: 540px; margin: 0 auto 48px; }
31
+ .hero-cta { display: inline-flex; gap: 16px; align-items: center; }
32
+ .btn-gradient { background: linear-gradient(135deg, #38bdf8, #818cf8); color: #0b1120; padding: 14px 36px; border-radius: 10px; font-weight: 600; font-size: 0.9375rem; text-decoration: none; transition: opacity 0.15s; }
33
+ .btn-gradient:hover { opacity: 0.9; }
34
+ .btn-outline { color: #94a3b8; padding: 14px 28px; border-radius: 10px; font-size: 0.9375rem; text-decoration: none; border: 1px solid rgba(255,255,255,0.1); font-weight: 500; transition: border-color 0.15s, color 0.15s; }
35
+ .btn-outline:hover { border-color: rgba(255,255,255,0.25); color: #e2e8f0; }
36
+
37
+ /* Bento grid */
38
+ .bento { position: relative; z-index: 1; max-width: 1100px; margin: 0 auto; padding: 40px 48px 120px; display: grid; grid-template-columns: repeat(12, 1fr); grid-template-rows: auto; gap: 16px; }
39
+ .bento-card { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); border-radius: 16px; padding: 32px; overflow: hidden; }
40
+ .bento-card:hover { border-color: rgba(255,255,255,0.1); }
41
+
42
+ .b1 { grid-column: span 7; }
43
+ .b2 { grid-column: span 5; }
44
+ .b3 { grid-column: span 4; }
45
+ .b4 { grid-column: span 4; }
46
+ .b5 { grid-column: span 4; }
47
+ .b6 { grid-column: span 12; }
48
+
49
+ .bento-card h3 { font-size: 1.125rem; font-weight: 600; margin-bottom: 8px; letter-spacing: -0.01em; }
50
+ .bento-card p { font-size: 0.875rem; color: #64748b; line-height: 1.65; }
51
+ .bento-card .label { font-size: 0.6875rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: #38bdf8; margin-bottom: 14px; }
52
+
53
+ /* b1: Issue list mockup */
54
+ .issue-table { margin-top: 20px; }
55
+ .issue-tr { display: grid; grid-template-columns: 24px 56px 1fr 72px 64px; gap: 10px; align-items: center; padding: 9px 0; border-bottom: 1px solid rgba(255,255,255,0.04); font-size: 0.8125rem; }
56
+ .issue-status { width: 16px; height: 16px; border-radius: 50%; border: 2px solid; }
57
+ .status-todo { border-color: #475569; }
58
+ .status-progress { border-color: #f59e0b; background: rgba(245,158,11,0.2); }
59
+ .status-done { border-color: #22c55e; background: #22c55e; }
60
+ .issue-key { color: #475569; font-family: 'IBM Plex Mono', monospace; font-size: 0.75rem; }
61
+ .issue-name { color: #cbd5e1; }
62
+ .issue-tag { font-size: 0.6875rem; padding: 2px 8px; border-radius: 4px; }
63
+ .tag-blue { background: rgba(56,189,248,0.12); color: #38bdf8; }
64
+ .tag-orange { background: rgba(251,146,60,0.12); color: #fb923c; }
65
+ .tag-purple { background: rgba(192,132,252,0.12); color: #c084fc; }
66
+ .issue-prio { font-size: 0.75rem; color: #475569; }
67
+
68
+ /* b2: Keyboard shortcuts */
69
+ .kbd-grid { margin-top: 20px; display: flex; flex-direction: column; gap: 10px; }
70
+ .kbd-row { display: flex; align-items: center; gap: 14px; }
71
+ .kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 32px; height: 28px; padding: 0 8px; background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); border-radius: 5px; font-family: 'IBM Plex Mono', monospace; font-size: 0.75rem; color: #94a3b8; }
72
+ .kbd-desc { font-size: 0.8125rem; color: #64748b; }
73
+
74
+ /* b3, b4, b5 stat cards */
75
+ .stat-number { font-size: 2.75rem; font-weight: 700; letter-spacing: -0.03em; margin: 16px 0 8px; background: linear-gradient(135deg, #38bdf8, #818cf8); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
76
+ .stat-desc { font-size: 0.875rem; color: #64748b; }
77
+
78
+ /* b6: Full-width workflow */
79
+ .workflow-steps { margin-top: 24px; display: flex; align-items: center; gap: 0; }
80
+ .wf-step { flex: 1; text-align: center; padding: 20px 16px; background: rgba(255,255,255,0.02); border: 1px solid rgba(255,255,255,0.05); border-radius: 10px; }
81
+ .wf-step .wf-icon { font-size: 1.5rem; margin-bottom: 8px; }
82
+ .wf-step .wf-label { font-size: 0.8125rem; font-weight: 600; color: #cbd5e1; }
83
+ .wf-step .wf-sub { font-size: 0.75rem; color: #475569; margin-top: 4px; }
84
+ .wf-arrow { color: #334155; font-size: 1.25rem; padding: 0 8px; flex-shrink: 0; }
85
+
86
+ /* Testimonial section */
87
+ .testimonials { position: relative; z-index: 1; max-width: 1100px; margin: 0 auto; padding: 0 48px 120px; }
88
+ .test-header { text-align: center; margin-bottom: 56px; }
89
+ .test-header h2 { font-size: 2.25rem; font-weight: 700; letter-spacing: -0.03em; }
90
+ .test-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
91
+ .test-card { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); border-radius: 14px; padding: 32px; }
92
+ .test-card blockquote { font-size: 0.9375rem; color: #94a3b8; line-height: 1.7; margin-bottom: 20px; font-style: normal; }
93
+ .test-card .author { display: flex; align-items: center; gap: 12px; }
94
+ .test-card .avatar { width: 36px; height: 36px; border-radius: 50%; background: linear-gradient(135deg, #1e293b, #334155); }
95
+ .test-card .author-info { font-size: 0.8125rem; }
96
+ .test-card .author-name { color: #e2e8f0; font-weight: 600; }
97
+ .test-card .author-role { color: #475569; }
98
+
99
+ /* Pricing strip */
100
+ .pricing { position: relative; z-index: 1; max-width: 900px; margin: 0 auto; padding: 0 48px 140px; }
101
+ .pricing-header { text-align: center; margin-bottom: 48px; }
102
+ .pricing-header h2 { font-size: 2.25rem; font-weight: 700; letter-spacing: -0.03em; margin-bottom: 12px; }
103
+ .pricing-header p { color: #64748b; font-size: 1.0625rem; }
104
+ .pricing-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
105
+ .price-card { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); border-radius: 16px; padding: 40px; }
106
+ .price-card.featured { border-color: rgba(56,189,248,0.3); background: rgba(56,189,248,0.04); }
107
+ .price-card .tier { font-size: 0.8125rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: #64748b; margin-bottom: 12px; }
108
+ .price-card.featured .tier { color: #38bdf8; }
109
+ .price-card .price { font-size: 2.5rem; font-weight: 700; letter-spacing: -0.03em; margin-bottom: 8px; }
110
+ .price-card .price-sub { font-size: 0.875rem; color: #475569; margin-bottom: 24px; }
111
+ .price-features { list-style: none; display: flex; flex-direction: column; gap: 10px; margin-bottom: 32px; }
112
+ .price-features li { font-size: 0.875rem; color: #94a3b8; display: flex; align-items: center; gap: 10px; }
113
+ .price-features li::before { content: "+"; font-family: 'IBM Plex Mono', monospace; color: #38bdf8; font-weight: 600; }
114
+ .price-card .btn-gradient { display: block; text-align: center; }
115
+ .btn-muted { display: block; text-align: center; background: rgba(255,255,255,0.06); color: #94a3b8; padding: 14px 36px; border-radius: 10px; font-weight: 600; font-size: 0.9375rem; text-decoration: none; }
116
+ .btn-muted:hover { background: rgba(255,255,255,0.1); }
117
+
118
+ /* Footer */
119
+ footer { position: relative; z-index: 1; max-width: 1100px; margin: 0 auto; padding: 40px 48px; border-top: 1px solid rgba(255,255,255,0.06); display: flex; justify-content: space-between; align-items: center; }
120
+ footer .foot-brand { font-size: 0.875rem; color: #334155; }
121
+ footer nav { display: flex; gap: 24px; }
122
+ footer nav a { font-size: 0.8125rem; color: #475569; text-decoration: none; }
123
+ footer nav a:hover { color: #94a3b8; }
124
+ </style>
125
+ </head>
126
+ <body>
127
+
128
+ <div class="nav">
129
+ <div class="nav-brand">
130
+ <div class="mark"></div>
131
+ Plume
132
+ </div>
133
+ <div class="nav-right">
134
+ <a href="#">Features</a>
135
+ <a href="#">Pricing</a>
136
+ <a href="#">Docs</a>
137
+ <a href="#">Blog</a>
138
+ <a href="#" class="nav-signup">Get started</a>
139
+ </div>
140
+ </div>
141
+
142
+ <section class="hero">
143
+ <h1>Where teams <span class="gradient">plan and ship</span> software</h1>
144
+ <p class="subtitle">Issues, cycles, projects, and roadmaps in one fast interface. Built for engineers who value their time.</p>
145
+ <div class="hero-cta">
146
+ <a href="#" class="btn-gradient">Start for free</a>
147
+ <a href="#" class="btn-outline">Watch demo</a>
148
+ </div>
149
+ </section>
150
+
151
+ <section class="bento">
152
+ <!-- B1: Issue list -->
153
+ <div class="bento-card b1">
154
+ <div class="label">Issues</div>
155
+ <h3>Everything in one view</h3>
156
+ <p>Filter, sort, group, and act on issues without leaving the list. Every column, every action -- one keystroke away.</p>
157
+ <div class="issue-table">
158
+ <div class="issue-tr">
159
+ <div class="issue-status status-progress"></div>
160
+ <div class="issue-key">PLM-341</div>
161
+ <div class="issue-name">Implement OAuth2 PKCE flow for mobile clients</div>
162
+ <div><span class="issue-tag tag-blue">Feature</span></div>
163
+ <div class="issue-prio">Urgent</div>
164
+ </div>
165
+ <div class="issue-tr">
166
+ <div class="issue-status status-progress"></div>
167
+ <div class="issue-key">PLM-338</div>
168
+ <div class="issue-name">Connection pool exhaustion under load spike</div>
169
+ <div><span class="issue-tag tag-orange">Bug</span></div>
170
+ <div class="issue-prio">High</div>
171
+ </div>
172
+ <div class="issue-tr">
173
+ <div class="issue-status status-todo"></div>
174
+ <div class="issue-key">PLM-335</div>
175
+ <div class="issue-name">Add OpenTelemetry traces to payment service</div>
176
+ <div><span class="issue-tag tag-purple">Infra</span></div>
177
+ <div class="issue-prio">Medium</div>
178
+ </div>
179
+ <div class="issue-tr">
180
+ <div class="issue-status status-done"></div>
181
+ <div class="issue-key">PLM-330</div>
182
+ <div class="issue-name">Migrate user search to Typesense</div>
183
+ <div><span class="issue-tag tag-blue">Feature</span></div>
184
+ <div class="issue-prio">Medium</div>
185
+ </div>
186
+ <div class="issue-tr">
187
+ <div class="issue-status status-done"></div>
188
+ <div class="issue-key">PLM-327</div>
189
+ <div class="issue-name">Fix timezone handling in scheduled reports</div>
190
+ <div><span class="issue-tag tag-orange">Bug</span></div>
191
+ <div class="issue-prio">Low</div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+
196
+ <!-- B2: Keyboard -->
197
+ <div class="bento-card b2">
198
+ <div class="label">Keyboard-first</div>
199
+ <h3>Never touch the mouse</h3>
200
+ <p>Full shortcut coverage for every action in the app.</p>
201
+ <div class="kbd-grid">
202
+ <div class="kbd-row"><span class="kbd">C</span><span class="kbd-desc">New issue</span></div>
203
+ <div class="kbd-row"><span class="kbd">J</span> / <span class="kbd">K</span><span class="kbd-desc">Move up / down</span></div>
204
+ <div class="kbd-row"><span class="kbd">Enter</span><span class="kbd-desc">Open issue</span></div>
205
+ <div class="kbd-row"><span class="kbd">S</span><span class="kbd-desc">Set status</span></div>
206
+ <div class="kbd-row"><span class="kbd">L</span><span class="kbd-desc">Add label</span></div>
207
+ <div class="kbd-row"><span class="kbd">/</span><span class="kbd-desc">Search</span></div>
208
+ <div class="kbd-row"><span class="kbd">Cmd</span> + <span class="kbd">K</span><span class="kbd-desc">Command palette</span></div>
209
+ </div>
210
+ </div>
211
+
212
+ <!-- B3, B4, B5: Stats -->
213
+ <div class="bento-card b3">
214
+ <div class="label">Speed</div>
215
+ <div class="stat-number">50ms</div>
216
+ <div class="stat-desc">p95 render time for any view in the app. No loading spinners, ever.</div>
217
+ </div>
218
+ <div class="bento-card b4">
219
+ <div class="label">Cycles</div>
220
+ <div class="stat-number">2wk</div>
221
+ <div class="stat-desc">Default cadence. Time-box your sprints. Auto-rollover keeps things moving.</div>
222
+ </div>
223
+ <div class="bento-card b5">
224
+ <div class="label">Integrations</div>
225
+ <div class="stat-number">30+</div>
226
+ <div class="stat-desc">GitHub, GitLab, Slack, Figma, Sentry, Vercel, and the tools you already use.</div>
227
+ </div>
228
+
229
+ <!-- B6: Workflow -->
230
+ <div class="bento-card b6">
231
+ <div class="label">Workflow</div>
232
+ <h3>From idea to production, in one place</h3>
233
+ <p>Plume tracks the full lifecycle. No context switching between planning tools and dev tools.</p>
234
+ <div class="workflow-steps">
235
+ <div class="wf-step">
236
+ <div class="wf-icon">&#x1f4dd;</div>
237
+ <div class="wf-label">Backlog</div>
238
+ <div class="wf-sub">Capture and triage</div>
239
+ </div>
240
+ <div class="wf-arrow">&rarr;</div>
241
+ <div class="wf-step">
242
+ <div class="wf-icon">&#x1f3af;</div>
243
+ <div class="wf-label">Cycle</div>
244
+ <div class="wf-sub">Plan the sprint</div>
245
+ </div>
246
+ <div class="wf-arrow">&rarr;</div>
247
+ <div class="wf-step">
248
+ <div class="wf-icon">&#x1f6e0;</div>
249
+ <div class="wf-label">In Progress</div>
250
+ <div class="wf-sub">Build with context</div>
251
+ </div>
252
+ <div class="wf-arrow">&rarr;</div>
253
+ <div class="wf-step">
254
+ <div class="wf-icon">&#x1f50d;</div>
255
+ <div class="wf-label">Review</div>
256
+ <div class="wf-sub">PR linked automatically</div>
257
+ </div>
258
+ <div class="wf-arrow">&rarr;</div>
259
+ <div class="wf-step">
260
+ <div class="wf-icon">&#x1f680;</div>
261
+ <div class="wf-label">Shipped</div>
262
+ <div class="wf-sub">Deploy and close</div>
263
+ </div>
264
+ </div>
265
+ </div>
266
+ </section>
267
+
268
+ <section class="testimonials">
269
+ <div class="test-header">
270
+ <h2>Loved by teams who ship</h2>
271
+ </div>
272
+ <div class="test-grid">
273
+ <div class="test-card">
274
+ <blockquote>"We evaluated every tracker on the market. Plume is the only one that doesn't slow us down. The keyboard UX alone saved us."</blockquote>
275
+ <div class="author">
276
+ <div class="avatar"></div>
277
+ <div class="author-info">
278
+ <div class="author-name">Kai Hernandez</div>
279
+ <div class="author-role">CTO, Stackline</div>
280
+ </div>
281
+ </div>
282
+ </div>
283
+ <div class="test-card">
284
+ <blockquote>"Cycles + auto-linked PRs mean I never have to ask 'what's the status?' in standup. Everything is visible by default."</blockquote>
285
+ <div class="author">
286
+ <div class="avatar"></div>
287
+ <div class="author-info">
288
+ <div class="author-name">Priya Mehta</div>
289
+ <div class="author-role">Engineering Manager, Relay</div>
290
+ </div>
291
+ </div>
292
+ </div>
293
+ <div class="test-card">
294
+ <blockquote>"I used to spend 20 min grooming the board before every sprint. With Plume it takes 5. The defaults are just right."</blockquote>
295
+ <div class="author">
296
+ <div class="avatar"></div>
297
+ <div class="author-info">
298
+ <div class="author-name">David Park</div>
299
+ <div class="author-role">Senior Engineer, Canopy</div>
300
+ </div>
301
+ </div>
302
+ </div>
303
+ </div>
304
+ </section>
305
+
306
+ <section class="pricing">
307
+ <div class="pricing-header">
308
+ <h2>Simple, honest pricing</h2>
309
+ <p>Start free. Scale when you need to.</p>
310
+ </div>
311
+ <div class="pricing-cards">
312
+ <div class="price-card">
313
+ <div class="tier">Free</div>
314
+ <div class="price">$0</div>
315
+ <div class="price-sub">Up to 10 members, forever</div>
316
+ <ul class="price-features">
317
+ <li>Unlimited issues and projects</li>
318
+ <li>Cycles and roadmap views</li>
319
+ <li>GitHub and GitLab integrations</li>
320
+ <li>Command palette and full keyboard nav</li>
321
+ </ul>
322
+ <a href="#" class="btn-muted">Get started</a>
323
+ </div>
324
+ <div class="price-card featured">
325
+ <div class="tier">Pro</div>
326
+ <div class="price">$8<span style="font-size:1rem;font-weight:400;color:#64748b"> / user / month</span></div>
327
+ <div class="price-sub">For growing teams that need more</div>
328
+ <ul class="price-features">
329
+ <li>Everything in Free</li>
330
+ <li>Unlimited members</li>
331
+ <li>Advanced analytics and insights</li>
332
+ <li>SAML SSO and SCIM provisioning</li>
333
+ <li>Priority support</li>
334
+ </ul>
335
+ <a href="#" class="btn-gradient">Start free trial</a>
336
+ </div>
337
+ </div>
338
+ </section>
339
+
340
+ <footer>
341
+ <div class="foot-brand">&copy; 2026 Plume</div>
342
+ <nav>
343
+ <a href="#">Privacy</a>
344
+ <a href="#">Terms</a>
345
+ <a href="#">Security</a>
346
+ <a href="#">Status</a>
347
+ <a href="#">Twitter</a>
348
+ <a href="#">GitHub</a>
349
+ </nav>
350
+ </footer>
351
+
352
+ </body>
353
+ </html>
@@ -0,0 +1,190 @@
1
+ {
2
+ "corpus_version": "seed-v1",
3
+ "generation_model": "claude-opus-4-6",
4
+ "judge_model": "claude-opus-4-6",
5
+ "benchmark_date": "2026-06-22",
6
+ "note": "Full A-vs-B-vs-C benchmark with Opus for both generation and judging. Arm A = ForgeDock harness (archetype sampling + anti-slop + critique). Arm B = raw one-shot. Slipstream arm C viewport-only (vercel.com rendering issue).",
7
+ "products": [
8
+ {
9
+ "product": "cadence",
10
+ "reference": "resend.com",
11
+ "runs": [
12
+ {
13
+ "run": 1,
14
+ "pairwise": {"A_vs_C": "C", "B_vs_C": "C", "A_vs_B": "A"},
15
+ "rubric": {
16
+ "A": {"hierarchy": 5, "typography": 5, "color": 4, "whitespace": 4, "originality": 5, "mobile": 4},
17
+ "B": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 3, "originality": 2, "mobile": 3},
18
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 5}
19
+ },
20
+ "slop": {"A": 1, "B": 4, "C": 0}
21
+ },
22
+ {
23
+ "run": 2,
24
+ "pairwise": {"A_vs_C": "C", "B_vs_C": "C", "A_vs_B": "A"},
25
+ "rubric": {
26
+ "A": {"hierarchy": 4, "typography": 4, "color": 4, "whitespace": 4, "originality": 4, "mobile": 4},
27
+ "B": {"hierarchy": 2, "typography": 3, "color": 3, "whitespace": 2, "originality": 1, "mobile": 3},
28
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 5}
29
+ },
30
+ "slop": {"A": 1, "B": 6, "C": 0}
31
+ },
32
+ {
33
+ "run": 3,
34
+ "pairwise": {"A_vs_C": "tie", "B_vs_C": "C", "A_vs_B": "A"},
35
+ "rubric": {
36
+ "A": {"hierarchy": 5, "typography": 5, "color": 4, "whitespace": 4, "originality": 5, "mobile": 3},
37
+ "B": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 3, "originality": 3, "mobile": 3},
38
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 5}
39
+ },
40
+ "slop": {"A": 0, "B": 3, "C": 0}
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "product": "tender",
46
+ "reference": "stripe.com",
47
+ "runs": [
48
+ {
49
+ "run": 1,
50
+ "pairwise": {"A_vs_C": "C", "B_vs_C": "C", "A_vs_B": "A"},
51
+ "rubric": {
52
+ "A": {"hierarchy": 4, "typography": 4, "color": 3, "whitespace": 4, "originality": 4, "mobile": 3},
53
+ "B": {"hierarchy": 3, "typography": 3, "color": 2, "whitespace": 3, "originality": 2, "mobile": 3},
54
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 4}
55
+ },
56
+ "slop": {"A": 2, "B": 7, "C": 0}
57
+ },
58
+ {
59
+ "run": 2,
60
+ "pairwise": {"A_vs_C": "A", "B_vs_C": "C", "A_vs_B": "A"},
61
+ "rubric": {
62
+ "A": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 4},
63
+ "B": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 3, "originality": 2, "mobile": 3},
64
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 4}
65
+ },
66
+ "slop": {"A": 0, "B": 5, "C": 0}
67
+ },
68
+ {
69
+ "run": 3,
70
+ "pairwise": {"A_vs_C": "C", "B_vs_C": "C", "A_vs_B": "tie"},
71
+ "rubric": {
72
+ "A": {"hierarchy": 4, "typography": 4, "color": 3, "whitespace": 4, "originality": 3, "mobile": 3},
73
+ "B": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 3, "originality": 3, "mobile": 3},
74
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 4}
75
+ },
76
+ "slop": {"A": 3, "B": 4, "C": 0}
77
+ }
78
+ ]
79
+ },
80
+ {
81
+ "product": "slipstream",
82
+ "reference": "vercel.com",
83
+ "note": "Arm C viewport-only (vercel.com rendering timeout). A_vs_C and B_vs_C comparisons may be miscalibrated.",
84
+ "runs": [
85
+ {
86
+ "run": 1,
87
+ "pairwise": {"A_vs_C": "C", "B_vs_C": "C", "A_vs_B": "A"},
88
+ "rubric": {
89
+ "A": {"hierarchy": 4, "typography": 4, "color": 4, "whitespace": 4, "originality": 5, "mobile": 3},
90
+ "B": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 3, "originality": 2, "mobile": 4},
91
+ "C": {"hierarchy": 5, "typography": 5, "color": 4, "whitespace": 5, "originality": 4, "mobile": 4}
92
+ },
93
+ "slop": {"A": 1, "B": 5, "C": 0}
94
+ },
95
+ {
96
+ "run": 2,
97
+ "pairwise": {"A_vs_C": "tie", "B_vs_C": "C", "A_vs_B": "A"},
98
+ "rubric": {
99
+ "A": {"hierarchy": 5, "typography": 5, "color": 4, "whitespace": 5, "originality": 5, "mobile": 4},
100
+ "B": {"hierarchy": 4, "typography": 4, "color": 4, "whitespace": 4, "originality": 3, "mobile": 4},
101
+ "C": {"hierarchy": 5, "typography": 5, "color": 4, "whitespace": 5, "originality": 4, "mobile": 4}
102
+ },
103
+ "slop": {"A": 0, "B": 2, "C": 0}
104
+ },
105
+ {
106
+ "run": 3,
107
+ "pairwise": {"A_vs_C": "C", "B_vs_C": "C", "A_vs_B": "A"},
108
+ "rubric": {
109
+ "A": {"hierarchy": 3, "typography": 4, "color": 4, "whitespace": 2, "originality": 4, "mobile": 2},
110
+ "B": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 4, "originality": 2, "mobile": 4},
111
+ "C": {"hierarchy": 5, "typography": 5, "color": 4, "whitespace": 5, "originality": 4, "mobile": 4}
112
+ },
113
+ "slop": {"A": 3, "B": 3, "C": 0}
114
+ }
115
+ ]
116
+ },
117
+ {
118
+ "product": "voltage",
119
+ "reference": "modal.com",
120
+ "runs": [
121
+ {
122
+ "run": 1,
123
+ "pairwise": {"A_vs_C": "C", "B_vs_C": "C", "A_vs_B": "A"},
124
+ "rubric": {
125
+ "A": {"hierarchy": 4, "typography": 4, "color": 4, "whitespace": 4, "originality": 3, "mobile": 4},
126
+ "B": {"hierarchy": 4, "typography": 4, "color": 3, "whitespace": 4, "originality": 3, "mobile": 4},
127
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 5}
128
+ },
129
+ "slop": {"A": 1, "B": 2, "C": 0}
130
+ },
131
+ {
132
+ "run": 2,
133
+ "pairwise": {"A_vs_C": "tie", "B_vs_C": "C", "A_vs_B": "A"},
134
+ "rubric": {
135
+ "A": {"hierarchy": 5, "typography": 5, "color": 4, "whitespace": 4, "originality": 5, "mobile": 3},
136
+ "B": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 4, "originality": 2, "mobile": 4},
137
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 5}
138
+ },
139
+ "slop": {"A": 1, "B": 3, "C": 0}
140
+ },
141
+ {
142
+ "run": 3,
143
+ "pairwise": {"A_vs_C": "C", "B_vs_C": "C", "A_vs_B": "B"},
144
+ "rubric": {
145
+ "A": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 4, "originality": 2, "mobile": 4},
146
+ "B": {"hierarchy": 5, "typography": 4, "color": 5, "whitespace": 4, "originality": 4, "mobile": 4},
147
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 5}
148
+ },
149
+ "slop": {"A": 2, "B": 2, "C": 0}
150
+ }
151
+ ]
152
+ },
153
+ {
154
+ "product": "plume",
155
+ "reference": "linear.app",
156
+ "runs": [
157
+ {
158
+ "run": 1,
159
+ "pairwise": {"A_vs_C": "A", "B_vs_C": "C", "A_vs_B": "A"},
160
+ "rubric": {
161
+ "A": {"hierarchy": 5, "typography": 5, "color": 4, "whitespace": 5, "originality": 4, "mobile": 4},
162
+ "B": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 4, "originality": 2, "mobile": 3},
163
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 5}
164
+ },
165
+ "slop": {"A": 1, "B": 4, "C": 0}
166
+ },
167
+ {
168
+ "run": 2,
169
+ "pairwise": {"A_vs_C": "A", "B_vs_C": "B", "A_vs_B": "A"},
170
+ "rubric": {
171
+ "A": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 4},
172
+ "B": {"hierarchy": 4, "typography": 4, "color": 3, "whitespace": 4, "originality": 4, "mobile": 4},
173
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 5}
174
+ },
175
+ "slop": {"A": 1, "B": 2, "C": 0}
176
+ },
177
+ {
178
+ "run": 3,
179
+ "pairwise": {"A_vs_C": "tie", "B_vs_C": "C", "A_vs_B": "A"},
180
+ "rubric": {
181
+ "A": {"hierarchy": 5, "typography": 5, "color": 4, "whitespace": 4, "originality": 5, "mobile": 3},
182
+ "B": {"hierarchy": 3, "typography": 3, "color": 3, "whitespace": 4, "originality": 2, "mobile": 3},
183
+ "C": {"hierarchy": 5, "typography": 5, "color": 5, "whitespace": 5, "originality": 5, "mobile": 5}
184
+ },
185
+ "slop": {"A": 1, "B": 5, "C": 0}
186
+ }
187
+ ]
188
+ }
189
+ ]
190
+ }