@stacksjs/defaults 0.75.361 → 0.75.362

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 (208) hide show
  1. package/ai/skills/stacks-ai/SKILL.md +22 -0
  2. package/ai/skills/stacks-native/CATALOG.md +2 -2
  3. package/ai/skills/stacks-technical-diagrams/LICENSE +202 -22
  4. package/ai/skills/stacks-technical-diagrams/LICENSE-MIT +22 -0
  5. package/ai/skills/stacks-technical-diagrams/NOTICE +26 -0
  6. package/ai/skills/stacks-technical-diagrams/SKILL.md +106 -266
  7. package/ai/skills/stacks-technical-diagrams/THIRD_PARTY_NOTICES.md +11 -2
  8. package/ai/skills/stacks-technical-diagrams/UPSTREAM.json +12 -0
  9. package/ai/skills/stacks-technical-diagrams/agents/openai.yaml +2 -2
  10. package/ai/skills/stacks-technical-diagrams/assets/template.html +3655 -3798
  11. package/ai/skills/stacks-technical-diagrams/bin/archify.mjs +7290 -0
  12. package/ai/skills/stacks-technical-diagrams/bin/delivery-update.mjs +7 -0
  13. package/ai/skills/stacks-technical-diagrams/bin/diagrams +1 -0
  14. package/ai/skills/stacks-technical-diagrams/bin/finalize.mjs +1056 -0
  15. package/ai/skills/stacks-technical-diagrams/bin/open-artifact.mjs +72 -12
  16. package/ai/skills/stacks-technical-diagrams/bin/preview.mjs +348 -31
  17. package/ai/skills/stacks-technical-diagrams/bin/recover-output.mjs +41 -0
  18. package/ai/skills/stacks-technical-diagrams/bin/technical-diagrams.mjs +3 -2097
  19. package/ai/skills/stacks-technical-diagrams/bin/visual-check.mjs +2142 -157
  20. package/ai/skills/stacks-technical-diagrams/brand-marks/README.md +3 -3
  21. package/ai/skills/stacks-technical-diagrams/delta/architecture-delta.mjs +130 -33
  22. package/ai/skills/stacks-technical-diagrams/examples/agent-run.lifecycle.json +25 -30
  23. package/ai/skills/stacks-technical-diagrams/examples/agent-tool-call.workflow.json +0 -20
  24. package/ai/skills/stacks-technical-diagrams/examples/archify-dev-activity.timeline.json +176 -0
  25. package/ai/skills/stacks-technical-diagrams/examples/archify-repository.tree.json +197 -0
  26. package/ai/skills/stacks-technical-diagrams/examples/async-job-roundtrip.sequence.json +1 -6
  27. package/ai/skills/stacks-technical-diagrams/examples/brand-aware-delivery.architecture.json +3 -16
  28. package/ai/skills/stacks-technical-diagrams/examples/cache-miss-request.sequence.json +2 -7
  29. package/ai/skills/stacks-technical-diagrams/examples/checkout-platform.base.architecture.json +2 -1
  30. package/ai/skills/stacks-technical-diagrams/examples/checkout-platform.head.architecture.json +2 -1
  31. package/ai/skills/stacks-technical-diagrams/examples/checkout-request.waterfall.json +20 -0
  32. package/ai/skills/stacks-technical-diagrams/examples/class-payment-processors-rendered.html +14987 -0
  33. package/ai/skills/stacks-technical-diagrams/examples/class-payments-rendered.html +14787 -0
  34. package/ai/skills/stacks-technical-diagrams/examples/dataflow-product-analytics.html +14880 -0
  35. package/ai/skills/stacks-technical-diagrams/examples/delivery.explainer.json +155 -0
  36. package/ai/skills/stacks-technical-diagrams/examples/deployment-release.lifecycle.json +57 -34
  37. package/ai/skills/stacks-technical-diagrams/examples/erd-orders-rendered.html +15112 -0
  38. package/ai/skills/stacks-technical-diagrams/examples/event-stream.dataflow.json +1 -6
  39. package/ai/skills/stacks-technical-diagrams/examples/example-rebuild.waterfall.json +212 -0
  40. package/ai/skills/stacks-technical-diagrams/examples/holiday-planning.workflow.json +143 -0
  41. package/ai/skills/stacks-technical-diagrams/examples/incident-response.workflow.json +1 -6
  42. package/ai/skills/stacks-technical-diagrams/examples/lifecycle-agent-run.html +14892 -0
  43. package/ai/skills/stacks-technical-diagrams/examples/locales/de.json +463 -0
  44. package/ai/skills/stacks-technical-diagrams/examples/locales/fr.json +463 -0
  45. package/ai/skills/stacks-technical-diagrams/examples/locales/fr.partial.json +22 -0
  46. package/ai/skills/stacks-technical-diagrams/examples/locales/it.json +463 -0
  47. package/ai/skills/stacks-technical-diagrams/examples/locales/ja.json +463 -0
  48. package/ai/skills/stacks-technical-diagrams/examples/locales/pt.json +463 -0
  49. package/ai/skills/stacks-technical-diagrams/examples/locales/ru.json +463 -0
  50. package/ai/skills/stacks-technical-diagrams/examples/orders.erd.json +337 -0
  51. package/ai/skills/stacks-technical-diagrams/examples/payment-incident.timeline.json +24 -0
  52. package/ai/skills/stacks-technical-diagrams/examples/payment-platform.tree.json +22 -0
  53. package/ai/skills/stacks-technical-diagrams/examples/payment-processors.class.json +177 -0
  54. package/ai/skills/stacks-technical-diagrams/examples/payments.class.json +85 -0
  55. package/ai/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json +1 -6
  56. package/ai/skills/stacks-technical-diagrams/examples/production-deployment.architecture.json +3 -23
  57. package/ai/skills/stacks-technical-diagrams/examples/release-delivery.workflow.json +1 -6
  58. package/ai/skills/stacks-technical-diagrams/examples/sequence-cache-miss-request.html +14895 -0
  59. package/ai/skills/stacks-technical-diagrams/examples/subscription-billing-rendered.html +15369 -0
  60. package/ai/skills/stacks-technical-diagrams/examples/subscription-billing.erd.json +548 -0
  61. package/ai/skills/stacks-technical-diagrams/examples/timeline-archify-dev-activity-rendered.html +15002 -0
  62. package/ai/skills/stacks-technical-diagrams/examples/timeline-payment-incident-rendered.html +14772 -0
  63. package/ai/skills/stacks-technical-diagrams/examples/tree-archify-repository-rendered.html +15071 -0
  64. package/ai/skills/stacks-technical-diagrams/examples/tree-payment-platform-rendered.html +14810 -0
  65. package/ai/skills/stacks-technical-diagrams/examples/waterfall-checkout-request-rendered.html +14754 -0
  66. package/ai/skills/stacks-technical-diagrams/examples/waterfall-example-rebuild-rendered.html +14940 -0
  67. package/ai/skills/stacks-technical-diagrams/examples/web-app-rendered.html +14889 -0
  68. package/ai/skills/stacks-technical-diagrams/examples/web-app.architecture.json +1 -6
  69. package/ai/skills/stacks-technical-diagrams/examples/workflow-agent-tool-call-rendered.html +14907 -0
  70. package/ai/skills/stacks-technical-diagrams/explainer/browser-check.mjs +208 -0
  71. package/ai/skills/stacks-technical-diagrams/explainer/charts.mjs +70 -0
  72. package/ai/skills/stacks-technical-diagrams/explainer/check.mjs +168 -0
  73. package/ai/skills/stacks-technical-diagrams/explainer/diagrams.mjs +518 -0
  74. package/ai/skills/stacks-technical-diagrams/explainer/diff.mjs +124 -0
  75. package/ai/skills/stacks-technical-diagrams/explainer/inline.mjs +155 -0
  76. package/ai/skills/stacks-technical-diagrams/explainer/layout.mjs +35 -0
  77. package/ai/skills/stacks-technical-diagrams/explainer/page-bundle.mjs +16 -0
  78. package/ai/skills/stacks-technical-diagrams/explainer/parse.mjs +300 -0
  79. package/ai/skills/stacks-technical-diagrams/explainer/patch.mjs +117 -0
  80. package/ai/skills/stacks-technical-diagrams/explainer/prepare.mjs +131 -0
  81. package/ai/skills/stacks-technical-diagrams/explainer/reader.css +472 -0
  82. package/ai/skills/stacks-technical-diagrams/explainer/reader.js +667 -0
  83. package/ai/skills/stacks-technical-diagrams/explainer/render.mjs +224 -0
  84. package/ai/skills/stacks-technical-diagrams/explainer/revision.mjs +20 -0
  85. package/ai/skills/stacks-technical-diagrams/explainer/sources.mjs +318 -0
  86. package/ai/skills/stacks-technical-diagrams/explainer/validate.mjs +138 -0
  87. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/LICENSE +40 -0
  88. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/README.md +5 -0
  89. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/3DKXF73K.js +4 -0
  90. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/42UTT654.js +3 -0
  91. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/DKTLEL5E.js +1 -0
  92. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/EEIX5ZYH.js +2 -0
  93. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/EJ5KOXYD.js +25 -0
  94. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/GUJTEFZK.js +1 -0
  95. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/IZOKQ2GT.js +4 -0
  96. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/L4LY553T.js +3 -0
  97. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/MSKIJHB2.js +2 -0
  98. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/RVARI57O.js +1 -0
  99. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/UKSIWDDN.js +2 -0
  100. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/UPTXNAXN.js +2 -0
  101. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/XTDUIGUI.js +9 -0
  102. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/chunks/YAYTP6L5.js +9 -0
  103. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/core.js +1 -0
  104. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/diagrams/pie.js +1 -0
  105. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/diagrams/quadrantChart.js +1 -0
  106. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/diagrams/radar.js +1 -0
  107. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/diagrams/sankey.js +1 -0
  108. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/diagrams/venn.js +1 -0
  109. package/ai/skills/stacks-technical-diagrams/explainer/vendor/pele/diagrams/xychart.js +1 -0
  110. package/ai/skills/stacks-technical-diagrams/explainer/writing.mjs +139 -0
  111. package/ai/skills/stacks-technical-diagrams/locales/README.md +40 -0
  112. package/ai/skills/stacks-technical-diagrams/locales/ar.json +488 -0
  113. package/ai/skills/stacks-technical-diagrams/locales/en.json +488 -0
  114. package/ai/skills/stacks-technical-diagrams/locales/es.json +488 -0
  115. package/ai/skills/stacks-technical-diagrams/locales/ko.json +488 -0
  116. package/ai/skills/stacks-technical-diagrams/locales/manifest.json +10 -0
  117. package/ai/skills/stacks-technical-diagrams/locales/zh-CN.json +488 -0
  118. package/ai/skills/stacks-technical-diagrams/locales/zh-TW.json +488 -0
  119. package/ai/skills/stacks-technical-diagrams/migrations/workflow-v2.mjs +1 -0
  120. package/ai/skills/stacks-technical-diagrams/recipes/scenarios.mjs +115 -51
  121. package/ai/skills/stacks-technical-diagrams/references/architecture-layout-repair.md +18 -0
  122. package/ai/skills/stacks-technical-diagrams/references/authoring-contract.md +453 -51
  123. package/ai/skills/stacks-technical-diagrams/references/authoring-defaults.md +57 -0
  124. package/ai/skills/stacks-technical-diagrams/references/brand-marks.md +57 -3
  125. package/ai/skills/stacks-technical-diagrams/references/delivery-contract.md +603 -58
  126. package/ai/skills/stacks-technical-diagrams/references/explainer-authoring.md +274 -0
  127. package/ai/skills/stacks-technical-diagrams/references/repository-authoring.md +126 -0
  128. package/ai/skills/stacks-technical-diagrams/references/update-awareness.md +13 -0
  129. package/ai/skills/stacks-technical-diagrams/references/viewer-runtime.md +18 -11
  130. package/ai/skills/stacks-technical-diagrams/renderers/architecture/grid.mjs +1 -1
  131. package/ai/skills/stacks-technical-diagrams/renderers/architecture/labels.mjs +2 -0
  132. package/ai/skills/stacks-technical-diagrams/renderers/architecture/render-architecture.mjs +550 -424
  133. package/ai/skills/stacks-technical-diagrams/renderers/architecture/routing.mjs +1469 -0
  134. package/ai/skills/stacks-technical-diagrams/renderers/class/README.md +129 -0
  135. package/ai/skills/stacks-technical-diagrams/renderers/class/render-class.mjs +1095 -0
  136. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/README.md +89 -17
  137. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/dataflow-compiler.mjs +1605 -0
  138. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/joint-label-routing.mjs +165 -0
  139. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/label-capacity.mjs +81 -0
  140. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs +14 -474
  141. package/ai/skills/stacks-technical-diagrams/renderers/erd/README.md +246 -0
  142. package/ai/skills/stacks-technical-diagrams/renderers/erd/grid.mjs +150 -0
  143. package/ai/skills/stacks-technical-diagrams/renderers/erd/render-erd.mjs +1588 -0
  144. package/ai/skills/stacks-technical-diagrams/renderers/explainer/render-explainer.mjs +42 -0
  145. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/README.md +83 -94
  146. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/render-lifecycle.mjs +990 -417
  147. package/ai/skills/stacks-technical-diagrams/renderers/sequence/README.md +49 -17
  148. package/ai/skills/stacks-technical-diagrams/renderers/sequence/render-sequence.mjs +735 -94
  149. package/ai/skills/stacks-technical-diagrams/renderers/shared/atomic-output.mjs +1982 -0
  150. package/ai/skills/stacks-technical-diagrams/renderers/shared/automatic-labels.mjs +290 -0
  151. package/ai/skills/stacks-technical-diagrams/renderers/shared/brand-marks.mjs +169 -26
  152. package/ai/skills/stacks-technical-diagrams/renderers/shared/cli.mjs +266 -54
  153. package/ai/skills/stacks-technical-diagrams/renderers/shared/desktop-readability.mjs +106 -0
  154. package/ai/skills/stacks-technical-diagrams/renderers/shared/diagnostics.mjs +0 -0
  155. package/ai/skills/stacks-technical-diagrams/renderers/shared/generated-validators.mjs +268 -2
  156. package/ai/skills/stacks-technical-diagrams/renderers/shared/geometry.mjs +774 -124
  157. package/ai/skills/stacks-technical-diagrams/renderers/shared/i18n.mjs +289 -556
  158. package/ai/skills/stacks-technical-diagrams/renderers/shared/layout-report.mjs +18 -1
  159. package/ai/skills/stacks-technical-diagrams/renderers/shared/legend.mjs +16 -6
  160. package/ai/skills/stacks-technical-diagrams/renderers/shared/node-card-style.mjs +32 -0
  161. package/ai/skills/stacks-technical-diagrams/renderers/shared/output-path.mjs +329 -229
  162. package/ai/skills/stacks-technical-diagrams/renderers/shared/owned-temp-directory.mjs +82 -0
  163. package/ai/skills/stacks-technical-diagrams/renderers/shared/path-semantics.mjs +1017 -0
  164. package/ai/skills/stacks-technical-diagrams/renderers/shared/portable-path.mjs +408 -0
  165. package/ai/skills/stacks-technical-diagrams/renderers/shared/repository-evidence.mjs +235 -79
  166. package/ai/skills/stacks-technical-diagrams/renderers/shared/repository-location.mjs +17 -4
  167. package/ai/skills/stacks-technical-diagrams/renderers/shared/route-quality.mjs +670 -0
  168. package/ai/skills/stacks-technical-diagrams/renderers/shared/sidecar-path.mjs +38 -0
  169. package/ai/skills/stacks-technical-diagrams/renderers/shared/software-notices.mjs +6 -0
  170. package/ai/skills/stacks-technical-diagrams/renderers/shared/spatial-grid.mjs +66 -0
  171. package/ai/skills/stacks-technical-diagrams/renderers/shared/svg-path-analysis.mjs +135 -0
  172. package/ai/skills/stacks-technical-diagrams/renderers/shared/text-fit.mjs +59 -3
  173. package/ai/skills/stacks-technical-diagrams/renderers/shared/utils.mjs +63 -35
  174. package/ai/skills/stacks-technical-diagrams/renderers/shared/validator.mjs +2 -5
  175. package/ai/skills/stacks-technical-diagrams/renderers/timeline/README.md +76 -0
  176. package/ai/skills/stacks-technical-diagrams/renderers/timeline/render-timeline.mjs +576 -0
  177. package/ai/skills/stacks-technical-diagrams/renderers/tree/README.md +96 -0
  178. package/ai/skills/stacks-technical-diagrams/renderers/tree/render-tree.mjs +573 -0
  179. package/ai/skills/stacks-technical-diagrams/renderers/waterfall/README.md +73 -0
  180. package/ai/skills/stacks-technical-diagrams/renderers/waterfall/render-waterfall.mjs +413 -0
  181. package/ai/skills/stacks-technical-diagrams/renderers/workflow/README.md +137 -23
  182. package/ai/skills/stacks-technical-diagrams/renderers/workflow/render-workflow.mjs +18 -6
  183. package/ai/skills/stacks-technical-diagrams/renderers/workflow/workflow-compiler.mjs +2230 -710
  184. package/ai/skills/stacks-technical-diagrams/renderers/workflow/workflow-migration-geometry.mjs +17 -0
  185. package/ai/skills/stacks-technical-diagrams/renderers/workflow/workflow-placement-repair.mjs +94 -0
  186. package/ai/skills/stacks-technical-diagrams/schemas/README.md +87 -40
  187. package/ai/skills/stacks-technical-diagrams/schemas/architecture.schema.json +7 -33
  188. package/ai/skills/stacks-technical-diagrams/schemas/class.schema.json +345 -0
  189. package/ai/skills/stacks-technical-diagrams/schemas/common.schema.json +68 -2
  190. package/ai/skills/stacks-technical-diagrams/schemas/dataflow.schema.json +14 -3
  191. package/ai/skills/stacks-technical-diagrams/schemas/erd.schema.json +381 -0
  192. package/ai/skills/stacks-technical-diagrams/schemas/explainer.schema.json +927 -0
  193. package/ai/skills/stacks-technical-diagrams/schemas/lifecycle.schema.json +23 -110
  194. package/ai/skills/stacks-technical-diagrams/schemas/sequence.schema.json +15 -4
  195. package/ai/skills/stacks-technical-diagrams/schemas/timeline.schema.json +160 -0
  196. package/ai/skills/stacks-technical-diagrams/schemas/tree.schema.json +141 -0
  197. package/ai/skills/stacks-technical-diagrams/schemas/waterfall.schema.json +147 -0
  198. package/ai/skills/stacks-technical-diagrams/schemas/workflow.schema.json +14 -3
  199. package/ai/skills/stacks-technical-diagrams/scripts/check-render-output.mjs +876 -243
  200. package/ai/skills/stacks-technical-diagrams/scripts/check-update.mjs +1717 -0
  201. package/ai/skills/stacks-technical-diagrams/scripts/delivery-update-child.mjs +26 -0
  202. package/ai/skills/stacks-technical-diagrams/scripts/generate-brand-marks.mjs +141 -0
  203. package/ai/skills/stacks-technical-diagrams/scripts/generate-validators.mjs +105 -0
  204. package/ai/skills/stacks-technical-diagrams/scripts/render-examples.mjs +11 -1
  205. package/ai/skills/stacks-technical-diagrams/scripts/update-contract.mjs +187 -0
  206. package/ai/skills/stacks-technical-diagrams/skill-release.json +10 -0
  207. package/ide/vscode/package.json +1 -1
  208. package/package.json +2 -2
@@ -1,17 +1,17 @@
1
1
  # Data Flow Renderer
2
2
 
3
- Render `diagram_type: "dataflow"` JSON files into the standalone technical diagram HTML
3
+ Render `diagram_type: "dataflow"` JSON files into the standard Archify HTML
4
4
  template.
5
5
 
6
6
  ```bash
7
- node .claude/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs input.dataflow.json output.html
7
+ node archify/renderers/dataflow/render-dataflow.mjs input.dataflow.json output.html
8
8
  ```
9
9
 
10
- The renderer validates input against `.claude/skills/stacks-technical-diagrams/schemas/dataflow.schema.json`
10
+ The renderer validates input against `archify/schemas/dataflow.schema.json`
11
11
  with the bundled standalone validator. No dependency installation is required.
12
12
 
13
- If `output.html` is omitted, the renderer uses `meta.output` from the JSON file
14
- or falls back to `dataflow.html` in the current working directory.
13
+ If `output.html` is omitted, the renderer uses the required `meta.output` value
14
+ from the JSON file.
15
15
 
16
16
  ## Input
17
17
 
@@ -23,6 +23,7 @@ Data-flow JSON files must set:
23
23
  "diagram_type": "dataflow",
24
24
  "meta": {
25
25
  "title": "Product Analytics Data Flow",
26
+ "output": "product-analytics-dataflow.html",
26
27
  "viewBox": [940, 720]
27
28
  },
28
29
  "stages": [],
@@ -33,12 +34,12 @@ Data-flow JSON files must set:
33
34
  ```
34
35
 
35
36
  A complete worked example lives at
36
- `.claude/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json`.
37
+ `archify/examples/product-analytics.dataflow.json`.
37
38
 
38
39
  The schema lives at:
39
40
 
40
41
  ```text
41
- .claude/skills/stacks-technical-diagrams/schemas/dataflow.schema.json
42
+ archify/schemas/dataflow.schema.json
42
43
  ```
43
44
 
44
45
  ## Legend
@@ -47,7 +48,7 @@ The default visual legend derives kinds from `flows[].variant` (omitting
47
48
  `variant` means `default`) and adds `database` only when a database node exists.
48
49
  Supported `meta.legend.entries` keys, in stable order, are `emphasis`,
49
50
  `security`, `dashed`, `database`, and `default`. Flow variants remain
50
- visual-only because the renderer has no compiled edge-kind facts in this slice. A
51
+ visual-only because Archify has no compiled edge-kind facts in this slice. A
51
52
  present `database` entry is different: it comes from exact
52
53
  `nodes[].type: "database"` facts, so it publishes the normal Semantic Legend
53
54
  count, accessible name, and keyboard interaction. Forcing `database` visible
@@ -57,11 +58,11 @@ without a database node keeps it visual-only.
57
58
 
58
59
  | Constant | Value |
59
60
  |----------|-------|
60
- | viewBox | default `[940, 720]`; schema minimum `[360, 360]` |
61
- | Stages (2-5) | centers at x = 100 + stage×215; stage band 168 wide, header at y 46 |
62
- | Row tops (`row` 0-4) | y = 128, 242, 356, 470, 584 (plus `yOffset`) |
61
+ | viewBox | omitted width fits all stage frames and nodes, including authored widths, with 24px right padding and a 480px minimum (five default-width stages need 1068); height defaults to 720 and fits content in fully automatic showcase; schema minimum `[360, 360]` |
62
+ | Stages (2–5) | centers at x = 100 + stage×215; stage band 168 wide, header at y 46 |
63
+ | Row tops (`row` 0–4) | y = 128, 242, 356, 470, 584 (plus `yOffset`) |
63
64
  | Default node | 112×58 |
64
- | Node area | x within `[24, width − 24]`; y within `[104, height − 74]` |
65
+ | Node area | x within `[24, width − 24]`; y within `[104, height − 74 − node height]` |
65
66
  | Node spacing | ≥10px between any two nodes (checked across stages and rows) |
66
67
  | Flow length | ≥34px between endpoints |
67
68
  | Legend row | y = height − 36 |
@@ -69,6 +70,61 @@ without a database node keeps it visual-only.
69
70
  Route presets for flows: `straight`, `vertical-channel`, `bottom-channel`,
70
71
  `top-channel`, explicit `via` points, or the default `auto` (midpoint elbow).
71
72
 
73
+ An authored `meta.viewBox` remains authoritative. When it is omitted, canvas
74
+ width fits stage frames and nodes in both `standard` and `showcase`, including
75
+ explicit node widths. Enlarging width cannot repair left-edge overflow.
76
+
77
+ Showcase node sizing, typography, automatic height, port bridges and label
78
+ placement apply only when `meta.viewBox` and every node's `width` are omitted.
79
+ An authored canvas or node width preserves those established layout behaviors,
80
+ as does `standard`. The effective quality profile is
81
+ `process.env.ARCHIFY_QUALITY_PROFILE || meta.quality_profile`; the public CLI's
82
+ `--quality standard|showcase` sets the environment override.
83
+
84
+ For a fully automatic showcase, node widths can grow within their stage and
85
+ canvas budget to keep supporting text readable at desktop projection. Height
86
+ follows actual node bounds, routed points and rendered label plates, leaving
87
+ 24px below content plus the 74px stage/legend reserve. Rows and authored routes
88
+ remain authoritative; inactive channel controls do not enlarge the canvas.
89
+
90
+ Crowded incoming arrows can expand a default node vertically within its row's
91
+ spare space, up to 104px high. Its row centre and text group stay in place, so
92
+ clear same-row outputs remain straight. The 16px corner gutters and 10px node
93
+ gaps remain reserved. An explicit node height or `yOffset`, or an incident
94
+ route, side or label pin, preserves the original box. Space limits may
95
+ still leave very dense inputs crowded; no relationship or label is removed.
96
+
97
+ For facing automatic ports less than 16px apart across the route axis, an
98
+ unshared endpoint can align with the spread endpoint when the straight path
99
+ is clear. This preserves the shared slots, the 16px corner gutter, occupied
100
+ ports and authored route/label controls. When both ends are spread or the
101
+ direct path is blocked, the existing perpendicular bridge remains.
102
+ When obstacle routing reverses a branch's initial travel direction, a shared
103
+ side can reorder its existing slots by the settled routes' first turns. This
104
+ tries at most 16 fully automatic groups of two to eight ports before placing
105
+ labels. A group is accepted only if a route becomes straight and no member
106
+ gains length or bends, adds crossings, folds back, or loses node, border or
107
+ corridor clearance. Explicit side, route and label controls keep their slots.
108
+
109
+ After routes and labels settle, a bounded pass can retry this alignment while
110
+ keeping every other route and label fixed. It checks at most 16 label placements;
111
+ the straight path must retain port spacing and a clear, nearby label position.
112
+ Grid repairs also retain the route rhythm floor before replacing a valid bridge.
113
+ Unpinned labels stay within 36px mask clearance of their own route. If a
114
+ label remains inside a node because a foreign route occupies its nearby slot,
115
+ a bounded joint repair can shift that route and place the label again. It
116
+ checks at most 16 label slots and 16 route candidates without adding bends
117
+ or crossings. Unresolved placements keep their collision diagnostic.
118
+ Explicit `labelAt`, `labelDx`, `labelDy` and `labelSegment` remain authoritative,
119
+ including zero offsets. Existing valid labels are retained.
120
+
121
+ If a complete automatic label still collides after routing, its text can wrap
122
+ to two rows beside a horizontal segment. The font size, wording, classification
123
+ and all routes stay unchanged. The plate stays within that segment's span and
124
+ at least 4px from every route, rather than moving above a nearby node. This
125
+ last capacity repair tries at most eight word-boundary splits and 64 positions
126
+ per blocked label. If neither row fits, the original diagnostic remains.
127
+
72
128
  ## Design Rules
73
129
 
74
130
  - Use stages for data lifecycle boundaries: source, ingest, process, store,
@@ -87,18 +143,34 @@ Route presets for flows: `straight`, `vertical-channel`, `bottom-channel`,
87
143
  Schema violations exit non-zero with path-prefixed messages annotated with the
88
144
  element's id or label. The renderer additionally fails when it can detect
89
145
  layout problems, including missing stages, duplicate node IDs, nodes outside
90
- the readable diagram area, node overlap, labels colliding with nodes or other
146
+ the readable diagram area (`dataflow/node-above-area` / `dataflow/node-below-area`;
147
+ the below-area diagnostic offers `meta.viewBox[1]` raises only while the raised
148
+ page still fits the target viewport, and names the height range that does —
149
+ page containment is the modeled axis, while projected text readability is
150
+ reported separately by the delivery checks (`viewer/projected-text-readability`)),
151
+ node overlap, labels colliding with nodes or other
91
152
  labels, labels wider than their node, unknown flow endpoints, missing flow
92
153
  labels, unreadably short flows, flows crossing unrelated nodes (2px Clean Flow
93
154
  clearance), or stages that exceed the viewBox. Stage frames remain intentional
94
155
  pass-through containers. Text width
95
156
  is estimated CJK-aware: fullwidth glyphs count as two units.
96
157
 
97
- Set `meta.quality_profile` to `showcase` for polished delivery. Unrelated proper
98
- X crossings then fail with `composition/proper-crossing`; default `standard`
99
- keeps them as artifact-receipt warnings. Collinear stage corridors are outside
158
+ Set `meta.quality_profile` to `showcase` for polished delivery. Unresolved proper
159
+ X crossings fail with `composition/proper-crossing`; default `standard`
160
+ keeps them as artifact-receipt warnings. In automatic showcase layouts without
161
+ an authored canvas or node widths, the renderer compares clear detours with
162
+ visibly separated crossovers. It prefers a short clear route, but may retain
163
+ a shorter automatic crossing with an opaque halo instead of a long perimeter
164
+ detour. Before comparing crossings, bounded route searches try to repair
165
+ automatic paths that enter unrelated nodes or share ambiguous corridors.
166
+ They preserve node clearance and corridor separation; failed searches still
167
+ leave the obstruction diagnostic in place. Both crossing paths need matching
168
+ halos; the artifact check verifies
169
+ their geometry and reports `resolvedCrossovers` for visual review. Supplied
170
+ `via`, non-auto `route`, and channel coordinates retain their geometry and
171
+ crossing diagnostics. Collinear stage corridors are outside
100
172
  the proper-X rule, but a separate gate warns in `standard` and fails in
101
173
  `showcase` when unrelated flows overlap for at least 8px. Shared semantic
102
174
  endpoints, point touches, and shorter overlaps remain valid. Showcase also
103
175
  rejects any route segment below 8px and any interior turn segment below 16px;
104
- ordinary 8-15px endpoint stubs remain valid.
176
+ ordinary 8–15px endpoint stubs remain valid.