@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
@@ -0,0 +1,488 @@
1
+ {
2
+ "page.title": "{title} Diagram",
3
+ "diagram.description.architecture": "An architecture diagram generated by Archify.",
4
+ "diagram.description.workflow": "A workflow diagram generated by Archify.",
5
+ "diagram.description.sequence": "A sequence diagram generated by Archify.",
6
+ "diagram.description.dataflow": "A data-flow diagram generated by Archify.",
7
+ "diagram.description.lifecycle": "A lifecycle diagram generated by Archify.",
8
+ "node.focus": "Focus {label}",
9
+ "node.focus.detail": "Focus {label}, {detail}",
10
+ "node.context.architecture": "Architecture component",
11
+ "node.context.workflow": "Workflow node",
12
+ "node.context.sequence": "Sequence participant",
13
+ "node.context.dataflow": "Data-flow node",
14
+ "node.context.lifecycle": "Lifecycle state",
15
+ "legend.title": "Legend",
16
+ "legend.architecture.frontend": "Frontend",
17
+ "legend.architecture.backend": "Backend",
18
+ "legend.architecture.database": "Database",
19
+ "legend.architecture.cloud": "Cloud",
20
+ "legend.architecture.security": "Security",
21
+ "legend.architecture.messagebus": "Message bus",
22
+ "legend.architecture.external": "External",
23
+ "legend.workflow.frontend": "User UI",
24
+ "legend.workflow.backend": "Agent logic",
25
+ "legend.workflow.security": "Policy",
26
+ "legend.workflow.messagebus": "Tool action",
27
+ "legend.workflow.database": "Context / trace",
28
+ "legend.workflow.cloud": "Cloud service",
29
+ "legend.workflow.external": "External system",
30
+ "legend.sequence.emphasis": "main request",
31
+ "legend.sequence.return": "return",
32
+ "legend.sequence.security": "security",
33
+ "legend.sequence.dashed": "async trace",
34
+ "legend.sequence.default": "message",
35
+ "legend.dataflow.emphasis": "primary data",
36
+ "legend.dataflow.security": "policy / PII",
37
+ "legend.dataflow.dashed": "async batch",
38
+ "legend.dataflow.database": "data store",
39
+ "legend.dataflow.default": "data flow",
40
+ "legend.lifecycle.start": "initial state",
41
+ "legend.lifecycle.active": "active",
42
+ "legend.lifecycle.waiting": "waiting",
43
+ "legend.lifecycle.decision": "decision",
44
+ "legend.lifecycle.success": "success",
45
+ "legend.lifecycle.failure": "failure / exit",
46
+ "legend.lifecycle.neutral": "neutral",
47
+ "legend.lifecycle.external": "external",
48
+ "legend.lifecycle.final": "final state",
49
+ "viewer.kind.frontend": "Frontend",
50
+ "viewer.kind.backend": "Backend",
51
+ "viewer.kind.database": "Database",
52
+ "viewer.kind.cloud": "Cloud",
53
+ "viewer.kind.security": "Security",
54
+ "viewer.kind.messagebus": "Message bus",
55
+ "viewer.kind.external": "External",
56
+ "viewer.kind.neutral": "Neutral",
57
+ "viewer.kind.node": "Node",
58
+ "viewer.kind.start": "Start",
59
+ "viewer.kind.active": "Active",
60
+ "viewer.kind.waiting": "Waiting",
61
+ "viewer.kind.decision": "Decision",
62
+ "viewer.kind.success": "Success",
63
+ "viewer.kind.failure": "Failure",
64
+ "viewer.toolbar.actions": "Diagram actions",
65
+ "viewer.theme.toggle.title": "Toggle theme (T)",
66
+ "viewer.theme.toggle": "Toggle color theme",
67
+ "viewer.theme.dark": "Dark",
68
+ "viewer.theme.light": "Light",
69
+ "viewer.preset.choose.title": "Choose visual style (S cycles)",
70
+ "viewer.preset.choose": "Choose visual style",
71
+ "viewer.preset.style": "Style",
72
+ "viewer.preset.menu": "Visual style",
73
+ "viewer.preset.identity": "Visual identity",
74
+ "viewer.preset.cycles": "to cycle",
75
+ "viewer.preset.classic": "Classic",
76
+ "viewer.preset.classic.short": "Classic",
77
+ "viewer.preset.classic.hint": "Stable technical default",
78
+ "viewer.preset.flow": "Signal Flow",
79
+ "viewer.preset.flow.short": "Flow",
80
+ "viewer.preset.flow.hint": "Motion-forward presentation",
81
+ "viewer.preset.blueprint": "Blueprint",
82
+ "viewer.preset.blueprint.hint": "Engineering review",
83
+ "viewer.preset.editorial": "Editorial",
84
+ "viewer.preset.editorial.hint": "Publication and launch notes",
85
+ "viewer.preset.badge.signalFlow": "SIGNAL FLOW",
86
+ "viewer.preset.badge.blueprint": "BLUEPRINT / REV 01",
87
+ "viewer.preset.badge.editorial": "EDITORIAL / FIELD NOTE",
88
+ "viewer.preset.badge.editorialPlate": "ARCHIFY / PLATE 04",
89
+ "viewer.preset.current": "Visual style: {style}. Choose visual style",
90
+ "viewer.motion.live": "Live",
91
+ "viewer.motion.still": "Still",
92
+ "viewer.motion.pause": "Pause motion",
93
+ "viewer.motion.resume": "Resume motion",
94
+ "viewer.motion.reduced": "Motion paused by reduced-motion preference",
95
+ "viewer.motion.hidden": "Motion paused while this page is hidden",
96
+ "viewer.motion.yielding": "Pause motion; currently yielding to {owner}",
97
+ "viewer.motion.yielding.title": "Live preview enabled · yielding to {owner}",
98
+ "viewer.owner.route": "Route Probe",
99
+ "viewer.owner.lens": "Semantic Lens",
100
+ "viewer.owner.relationship": "Relationship Preview",
101
+ "viewer.owner.intent": "Intent Trace",
102
+ "viewer.owner.focus": "semantic focus",
103
+ "viewer.owner.legend": "legend preview",
104
+ "viewer.owner.reader": "reader interaction",
105
+ "viewer.present.enter": "Enter presentation stage",
106
+ "viewer.present.enter.title": "Presentation stage (F)",
107
+ "viewer.present.exit": "Exit presentation stage",
108
+ "viewer.present.exit.title": "Exit presentation stage (F or Escape)",
109
+ "viewer.present.present": "Present",
110
+ "viewer.present.exit.label": "Exit",
111
+ "viewer.export.button": "Export",
112
+ "viewer.export.button.title": "Export diagram (E)",
113
+ "viewer.export.diagram": "Export diagram",
114
+ "viewer.export.menu": "Export",
115
+ "viewer.export.subtitle": "Portable, clean outputs",
116
+ "viewer.export.share": "Share",
117
+ "viewer.export.shareCard": "Share Card",
118
+ "viewer.export.routeShareCard": "Route Share Card",
119
+ "viewer.export.reachShareCard": "Reach Share Card",
120
+ "viewer.export.copyDiagram": "Copy diagram",
121
+ "viewer.export.clipboardPng": "PNG to clipboard",
122
+ "viewer.export.raster": "Raster images",
123
+ "viewer.export.image": "Image",
124
+ "viewer.export.lossless": "Lossless image",
125
+ "viewer.export.compact": "Compact image",
126
+ "viewer.export.modern": "Modern image",
127
+ "viewer.export.vectorMotion": "Vector and motion",
128
+ "viewer.export.vectorMotion.heading": "Vector & motion",
129
+ "viewer.export.editable": "Editable vector",
130
+ "viewer.export.svg.auto": "SVG · Auto",
131
+ "viewer.export.svg.auto.hint": "Matches host theme",
132
+ "viewer.export.svg.light": "SVG · Light",
133
+ "viewer.export.svg.light.hint": "Always light",
134
+ "viewer.export.svg.dark": "SVG · Dark",
135
+ "viewer.export.svg.dark.hint": "Always dark",
136
+ "viewer.export.motion6s": "6s motion",
137
+ "viewer.export.unsupported": "Not supported by this browser",
138
+ "viewer.export.clipboardUnsupported": "Clipboard image write not supported by this browser",
139
+ "viewer.export.clipboardUnsupported.short": "Clipboard image write not supported in this browser.",
140
+ "viewer.export.motionUnavailable": "Motion capture unavailable in this browser",
141
+ "viewer.export.webmUnavailable": "WebM unavailable in this browser",
142
+ "viewer.export.failed": "Export failed: {message}",
143
+ "viewer.export.unknownVariant": "Unknown Share Card variant: {variant}",
144
+ "viewer.export.routeRequired": "Trace a route before exporting a Route Share Card",
145
+ "viewer.export.reachRequired": "Trace authored reach before exporting a Reach Share Card",
146
+ "viewer.export.unknown": "unknown",
147
+ "viewer.export.routeFailed": "Route Share Card export failed: {message}",
148
+ "viewer.export.reachFailed": "Reach Share Card export failed: {message}",
149
+ "viewer.export.copyFailed": "Copy failed: {message}",
150
+ "viewer.export.copiedPng": "Copied PNG to clipboard",
151
+ "viewer.export.downloadedRoute": "Downloaded Route Share Card",
152
+ "viewer.export.downloadedReach": "Downloaded Reach Share Card",
153
+ "viewer.export.downloadedWebm": "Downloaded WebM",
154
+ "viewer.export.recording": "Recording 6 seconds of motion…",
155
+ "viewer.export.card.routeSummary.one": "Path: {source} → {target} · {count} step",
156
+ "viewer.export.card.routeSummary.other": "Path: {source} → {target} · {count} steps",
157
+ "viewer.export.card.reachSummary": "Authored {direction} from {origin} · {nodes} · {links} · max {hops}",
158
+ "viewer.export.card.node.one": "{count} node",
159
+ "viewer.export.card.node.other": "{count} nodes",
160
+ "viewer.export.card.link.one": "{count} link",
161
+ "viewer.export.card.link.other": "{count} links",
162
+ "viewer.export.card.hop.one": "{count} hop",
163
+ "viewer.export.card.hop.other": "{count} hops",
164
+ "viewer.export.card.routeBadge": "ARCHIFY · ROUTE · {hops}",
165
+ "viewer.export.card.reachBadge": "ARCHIFY · {direction} REACH",
166
+ "viewer.export.direction.upstream": "Upstream",
167
+ "viewer.export.direction.downstream": "Downstream",
168
+ "viewer.export.error.canvasUnavailable": "Canvas unavailable for {label}",
169
+ "viewer.export.error.contextUnavailable": "2D canvas context unavailable for {label}",
170
+ "viewer.export.error.toBlobUnavailable": "canvas.toBlob unavailable for {label}",
171
+ "viewer.export.error.toBlobNull": "canvas.toBlob returned no data for {label}",
172
+ "viewer.export.error.variantsCombined": "Share Card variants cannot be combined",
173
+ "viewer.export.error.viewerState": "Share Card export could not remove temporary viewer state",
174
+ "viewer.export.error.routeState": "Route Card export could not preserve the resolved route safely",
175
+ "viewer.export.error.reachState": "Reach Card export could not preserve authored reach safely",
176
+ "viewer.export.error.webmRequirements": "WebM motion export requires a trace animation and browser MediaRecorder support",
177
+ "viewer.export.error.mediaRecorder": "MediaRecorder failed",
178
+ "viewer.export.error.emptyWebm": "MediaRecorder produced an empty WebM",
179
+ "viewer.export.error.webmBackground": "SVG background could not be loaded for WebM export",
180
+ "viewer.guide.title": "Explore this system",
181
+ "viewer.focus.selectedNodes": "{count} selected nodes",
182
+ "viewer.guide.eyebrow": "Diagram guide",
183
+ "viewer.guide.close": "Close diagram guide",
184
+ "viewer.guide.inspecting": "Inspecting compiled semantics",
185
+ "viewer.guide.actions": "Diagram exploration actions",
186
+ "viewer.guide.find": "Find any node",
187
+ "viewer.guide.find.hint": "Search labels, responsibilities, kinds, and stable IDs.",
188
+ "viewer.guide.route": "Trace a route",
189
+ "viewer.guide.route.aria": "Trace a directed route",
190
+ "viewer.guide.route.hint": "Ask how two semantic nodes connect in authored direction.",
191
+ "viewer.guide.map": "See the whole system",
192
+ "viewer.guide.map.hint": "Open Semantic Radar with a live viewport and stable nodes.",
193
+ "viewer.guide.lens": "Compare semantic kinds",
194
+ "viewer.guide.lens.hint": "Count roles, reveal their traffic, and compare direct authored links.",
195
+ "viewer.guide.present": "Enter Presentation Stage",
196
+ "viewer.guide.present.hint": "Give the live diagram the viewport without changing export.",
197
+ "viewer.guide.shortcuts": "Additional keyboard shortcuts",
198
+ "viewer.guide.shortcut.export": "Export",
199
+ "viewer.guide.shortcut.theme": "Theme",
200
+ "viewer.guide.shortcut.style": "Style",
201
+ "viewer.guide.shortcut.reset": "Reset",
202
+ "viewer.guide.shortcut.zoomIn": "Zoom in",
203
+ "viewer.guide.shortcut.zoomOut": "Zoom out",
204
+ "viewer.guide.shortcut.close": "Close",
205
+ "viewer.guide.credit": "Find Archify useful? A star on GitHub helps",
206
+ "viewer.guide.star": "Star",
207
+ "viewer.guide.facts": "{nodes} · {relationships}",
208
+ "viewer.guide.fact.node.one": "{count} semantic node",
209
+ "viewer.guide.fact.node.other": "{count} semantic nodes",
210
+ "viewer.guide.fact.relationship.one": "{count} relationship",
211
+ "viewer.guide.fact.relationship.other": "{count} relationships",
212
+ "viewer.guide.open": "Open diagram guide",
213
+ "viewer.finder.title": "Find a node",
214
+ "viewer.finder.close": "Close node finder",
215
+ "viewer.finder.placeholder": "Search labels or IDs",
216
+ "viewer.finder.search": "Search diagram nodes",
217
+ "viewer.finder.results": "Diagram nodes",
218
+ "viewer.finder.empty": "No matching nodes",
219
+ "viewer.finder.result.focus": "Focus {label}",
220
+ "viewer.finder.result.routeStart": "Choose {label} as route start",
221
+ "viewer.finder.result.routeTarget": "Choose {label} as route destination, {links}",
222
+ "viewer.finder.status.empty": "No matching nodes",
223
+ "viewer.finder.status.count.one": "{count} matching node",
224
+ "viewer.finder.status.count.other": "{count} matching nodes",
225
+ "viewer.finder.noun.nodes": "nodes",
226
+ "viewer.finder.link.one": "{count} link",
227
+ "viewer.finder.link.other": "{count} links",
228
+ "viewer.finder.result.focus.one": "Focus {label}, {count} related connection",
229
+ "viewer.finder.result.focus.other": "Focus {label}, {count} related connections",
230
+ "viewer.finder.status.filtered": "{visible} of {available} {noun}",
231
+ "viewer.finder.status.all": "{available} {noun}",
232
+ "viewer.passport.eyebrow": "Semantic passport",
233
+ "viewer.passport.metadata": "Node metadata",
234
+ "viewer.passport.evidence": "Verified source evidence",
235
+ "viewer.passport.verified": "Verified source",
236
+ "viewer.passport.verificationScope": "Verified against local Git at the pinned revision. Remote access has not been checked.",
237
+ "viewer.passport.reach": "Authored reach",
238
+ "viewer.passport.reach.trace": "Trace authored reachability",
239
+ "viewer.passport.upstream": "Upstream",
240
+ "viewer.passport.downstream": "Downstream",
241
+ "viewer.passport.upstream.trace": "Trace upstream authored reachability",
242
+ "viewer.passport.downstream.trace": "Trace downstream authored reachability",
243
+ "viewer.passport.close": "Close semantic passport",
244
+ "viewer.passport.move": "Move semantic passport. Drag, use arrow keys, or press Home to reset.",
245
+ "viewer.passport.copy": "Copy link",
246
+ "viewer.passport.copy.focus": "Copy link to focused node",
247
+ "viewer.passport.relations": "Relations",
248
+ "viewer.passport.relations.show": "Show connected relationships",
249
+ "viewer.passport.relations.hide": "Hide connected relationships",
250
+ "viewer.passport.relations.list": "Connected relationships",
251
+ "viewer.passport.copyRelation": "Copy relation",
252
+ "viewer.passport.copyNode": "Copy node",
253
+ "viewer.passport.copyPinned": "Copy link to pinned relationship",
254
+ "viewer.passport.copySource": "Copy link to source node",
255
+ "viewer.passport.copy.focused.success": "Focused node link copied",
256
+ "viewer.passport.copy.pinned.success": "Pinned relationship link copied",
257
+ "viewer.passport.copy.focused.failed": "Could not copy focused node link",
258
+ "viewer.passport.copy.pinned.failed": "Could not copy pinned relationship link",
259
+ "viewer.passport.relationship.none": "No connected relationships",
260
+ "viewer.passport.relationship.count.one": "{count} relation",
261
+ "viewer.passport.relationship.count.other": "{count} relations",
262
+ "viewer.passport.relationship.show.one": "Show {count} connected relationship",
263
+ "viewer.passport.relationship.show.other": "Show {count} connected relationships",
264
+ "viewer.passport.relationship.summary": "{out} outgoing · {in} incoming{loops}",
265
+ "viewer.passport.relationship.loops": " · {count} loop",
266
+ "viewer.passport.relationship.explorer": "Direct relationship explorer",
267
+ "viewer.passport.relationship.help": "Use arrow keys to explore relationships. Press Enter or Space to pin details; Escape clears.",
268
+ "viewer.passport.relationship.loopsBack": "loops back",
269
+ "viewer.passport.relationship.connectsTo": "connects to",
270
+ "viewer.passport.relationship.connectsFrom": "connects from",
271
+ "viewer.passport.relationship.pinned": "Pinned relationship · {from} → {to} · {label}",
272
+ "viewer.passport.relationship.inspect": "Inspect relationship {index} of {total}: {from} to {to}, {label}. Press Enter for details.",
273
+ "viewer.passport.relationship.group.out": "Outgoing",
274
+ "viewer.passport.relationship.group.in": "Incoming",
275
+ "viewer.passport.relationship.group.loop": "Self loops",
276
+ "viewer.passport.relationship.row": "{group}: {relationship}, {neighbor}",
277
+ "viewer.passport.relationship.direction.out": "OUT →",
278
+ "viewer.passport.relationship.direction.in": "← IN",
279
+ "viewer.passport.relationship.direction.loop": "LOOP",
280
+ "viewer.passport.sourceCount.one": "{count} verified source reference",
281
+ "viewer.passport.sourceCount.other": "{count} verified source references",
282
+ "viewer.passport.repository.open": "Open verified repository revision {revision}",
283
+ "viewer.passport.source.open": "Open verified source {path} at revision {revision}",
284
+ "viewer.passport.source.openLink": "Open ↗",
285
+ "viewer.passport.reach.upstream.one": "Trace {count} upstream authored node",
286
+ "viewer.passport.reach.upstream.other": "Trace {count} upstream authored nodes",
287
+ "viewer.passport.reach.downstream.one": "Trace {count} downstream authored node",
288
+ "viewer.passport.reach.downstream.other": "Trace {count} downstream authored nodes",
289
+ "viewer.passport.reach.noUpstream": "No upstream authored nodes",
290
+ "viewer.passport.reach.noDownstream": "No downstream authored nodes",
291
+ "viewer.passport.reach.status": "{direction} · {nodes} nodes · {links} links · max {hops} hops",
292
+ "viewer.route.eyebrow": "Path",
293
+ "viewer.route.start": "Click where the path starts",
294
+ "viewer.route.start.find": "Find start",
295
+ "viewer.route.start.find.aria": "Find a route start",
296
+ "viewer.route.copy": "Copy link",
297
+ "viewer.route.copy.aria": "Copy link to traced route",
298
+ "viewer.route.clear": "Clear",
299
+ "viewer.route.clear.aria": "Clear route probe",
300
+ "viewer.route.traced": "Path",
301
+ "viewer.route.pickTwo": "Click two nodes on the diagram",
302
+ "viewer.route.pickOne": "Click a node on the diagram",
303
+ "viewer.route.controls": "Route journey controls",
304
+ "viewer.route.previous": "Previous route position",
305
+ "viewer.route.play": "Play route journey",
306
+ "viewer.route.pause": "Pause route journey",
307
+ "viewer.route.replay": "Replay route journey",
308
+ "viewer.route.next": "Next route position",
309
+ "viewer.route.journey": "Journey",
310
+ "viewer.route.pause.label": "Pause",
311
+ "viewer.route.replay.label": "Replay",
312
+ "viewer.route.overview": "Overview",
313
+ "viewer.route.overview.aria": "Show complete route overview",
314
+ "viewer.route.instructions": "Click a start, then an end. Paths follow the arrows.",
315
+ "viewer.route.destination": "Where does the path from {label} end?",
316
+ "viewer.route.destination.find": "Find target",
317
+ "viewer.route.destination.find.aria": "Find a reachable route destination",
318
+ "viewer.route.differentDestination": "Choose a different destination",
319
+ "viewer.route.distinct": "Pick two different nodes.",
320
+ "viewer.route.unreachable": "Cannot reach {label} from here",
321
+ "viewer.route.unreachable.detail": "{target} cannot be reached from {source} along the arrows. Pick a highlighted node.",
322
+ "viewer.route.start.instructions": "Next, pick the end. Only nodes you can reach will light up.",
323
+ "viewer.route.copy.success": "Traced route link copied",
324
+ "viewer.route.copy.failed": "Could not copy traced route link",
325
+ "viewer.route.position": "Route position {index} of {total}: {label}",
326
+ "viewer.route.step": "Step {index} of {total} · {phase} · {label}",
327
+ "viewer.route.motionRequired": "Automatic journey requires Live motion",
328
+ "viewer.route.trigger.clear": "Clear traced route",
329
+ "viewer.route.overview.status": "{nodes} · {hops} · shortest path",
330
+ "viewer.route.overview.node.one": "{count} node",
331
+ "viewer.route.overview.node.other": "{count} nodes",
332
+ "viewer.route.overview.hop.one": "{count} step",
333
+ "viewer.route.overview.hop.other": "{count} steps",
334
+ "viewer.route.phase.playing": "Playing",
335
+ "viewer.route.phase.complete": "Complete",
336
+ "viewer.route.phase.inspecting": "Inspecting",
337
+ "viewer.route.destination.count.one": "{count} reachable node is highlighted. Click it.",
338
+ "viewer.route.destination.count.other": "{count} reachable nodes are highlighted. Click one.",
339
+ "viewer.route.noOutgoing": "No arrows lead out of this node. Clear it and pick another start.",
340
+ "viewer.route.result.title": "{source} to {target}",
341
+ "viewer.route.finder.source.title": "Choose route start",
342
+ "viewer.route.finder.source.placeholder": "Search route sources",
343
+ "viewer.route.finder.source.empty": "No matching route sources",
344
+ "viewer.route.finder.source.results": "Nodes that can start a route",
345
+ "viewer.route.finder.source.noun": "route sources",
346
+ "viewer.route.finder.source.badge": "start",
347
+ "viewer.route.finder.target.title": "Destination from {label}",
348
+ "viewer.route.finder.target.placeholder": "Search reachable destinations",
349
+ "viewer.route.finder.target.empty": "No matching reachable destinations",
350
+ "viewer.route.finder.target.results": "Reachable route destinations",
351
+ "viewer.route.finder.target.noun": "reachable destinations",
352
+ "viewer.route.hop.one": "{count} hop",
353
+ "viewer.route.hop.other": "{count} hops",
354
+ "viewer.lens.eyebrow": "Semantic lens",
355
+ "viewer.lens.title": "Compare system roles",
356
+ "viewer.lens.close": "Close semantic lens",
357
+ "viewer.lens.instruction": "Choose up to two semantic kinds. One reveals its real traffic; two compare only direct authored relationships.",
358
+ "viewer.lens.kinds": "Semantic kinds",
359
+ "viewer.lens.choose": "Choose a kind to inspect its nodes and touching relationships.",
360
+ "viewer.lens.copy": "Copy link to semantic lens",
361
+ "viewer.lens.clear": "Clear semantic lens",
362
+ "viewer.lens.open": "Open semantic lens",
363
+ "viewer.lens.openActive": "Open active semantic lens",
364
+ "viewer.lens.legend": "Semantic legend",
365
+ "viewer.lens.legend.inspect.one": "Inspect {label}, {count} node",
366
+ "viewer.lens.legend.inspect.other": "Inspect {label}, {count} nodes",
367
+ "viewer.lens.kind.count.one": "{label}, {count} node",
368
+ "viewer.lens.kind.count.other": "{label}, {count} nodes",
369
+ "viewer.lens.compare.one": "{first} → {second}: {forward} · {second} → {first}: {reverse} · {count} direct relationship",
370
+ "viewer.lens.compare.other": "{first} → {second}: {forward} · {second} → {first}: {reverse} · {count} direct relationships",
371
+ "viewer.lens.single": "{nodes} · {relationships} · connected peers remain visible",
372
+ "viewer.lens.node.one": "{count} {label} node",
373
+ "viewer.lens.node.other": "{count} {label} nodes",
374
+ "viewer.lens.relationship.one": "{count} touching relationship",
375
+ "viewer.lens.relationship.other": "{count} touching relationships",
376
+ "viewer.radar.title": "Semantic radar",
377
+ "viewer.radar.building": "Building overview",
378
+ "viewer.radar.openFull": "Open full semantic radar",
379
+ "viewer.radar.open": "Open radar",
380
+ "viewer.radar.close": "Close semantic radar",
381
+ "viewer.radar.surface": "Diagram overview. Click a node to focus it, or use arrow keys to pan.",
382
+ "viewer.radar.click": "Click node",
383
+ "viewer.radar.drag": "Drag to pan",
384
+ "viewer.radar.space": "Semantic radar needs more MAP space.",
385
+ "viewer.radar.nodes": "Semantic diagram radar nodes",
386
+ "viewer.radar.focus": "Focus {label} from Semantic Radar",
387
+ "viewer.radar.status": "{count} nodes · {viewport}",
388
+ "viewer.radar.fullMap": "{count} nodes · full map",
389
+ "viewer.radar.compacted": "Radar compacted to avoid covering the Semantic Passport or MAP controls.",
390
+ "viewer.radar.cancelWaiting": "Cancel semantic radar waiting for more MAP space",
391
+ "viewer.radar.needsSpace": "Semantic radar needs more visible MAP space",
392
+ "viewer.radar.viewport.full": "full map",
393
+ "viewer.radar.viewport.width": "{percent}% width",
394
+ "viewer.radar.viewport.scale": "{percent}% viewport",
395
+ "viewer.nav.controls": "Diagram view controls",
396
+ "viewer.nav.route": "Trace a directed route",
397
+ "viewer.nav.route.title": "Trace route (R)",
398
+ "viewer.nav.route.short": "ROUTE",
399
+ "viewer.nav.radar": "Open semantic radar",
400
+ "viewer.nav.radar.title": "Semantic radar (M)",
401
+ "viewer.nav.radar.short": "MAP",
402
+ "viewer.nav.lens": "Open semantic lens",
403
+ "viewer.nav.lens.title": "Semantic lens (L)",
404
+ "viewer.nav.lens.short": "LENS",
405
+ "viewer.nav.find": "Find a node",
406
+ "viewer.nav.find.title": "Find a node (/)",
407
+ "viewer.outline.title": "Node index",
408
+ "viewer.rail.show": "Notes & index",
409
+ "viewer.rail.controls": "Side panel",
410
+ "viewer.rail.collapse": "Collapse side panel",
411
+ "viewer.rail.bottom": "Move panel below the diagram",
412
+ "viewer.rail.right": "Move panel beside the diagram",
413
+ "viewer.nav.guide": "Open diagram guide",
414
+ "viewer.nav.guide.title": "Diagram guide (?)",
415
+ "viewer.nav.zoomOut": "Zoom out",
416
+ "viewer.nav.zoomOut.title": "Zoom out (-)",
417
+ "viewer.nav.reset": "Reset diagram view",
418
+ "viewer.nav.reset.title": "Reset view (0)",
419
+ "viewer.nav.read": "READ",
420
+ "viewer.nav.zoomIn": "Zoom in",
421
+ "viewer.nav.zoomIn.title": "Zoom in (+)",
422
+ "viewer.nav.camera": "{hint}. Reset diagram view",
423
+ "viewer.nav.camera.title": "{semantic}{hint} · reset view (0)",
424
+ "viewer.nav.camera.semantic": "Semantic camera active · ",
425
+ "viewer.nav.level.map": "MAP",
426
+ "viewer.nav.level.read": "READ",
427
+ "viewer.nav.level.full": "FULL",
428
+ "viewer.nav.level.auto": "AUTO",
429
+ "viewer.nav.detail.map": "Zoom in to reveal relationship labels and node context",
430
+ "viewer.nav.detail.read": "Zoom in again to reveal tags and annotations",
431
+ "viewer.nav.detail.full": "Full diagram detail",
432
+ "viewer.intent.summary": "{label}. {out} outgoing, {in} incoming{loops}. {total} connections. Press Enter for details.",
433
+ "viewer.intent.loops": ", {count} self loop",
434
+ "viewer.common.copied": "Copied",
435
+ "viewer.common.copyFailed": "Copy failed",
436
+ "viewer.common.copyLink": "Copy link",
437
+ "viewer.common.clear": "Clear",
438
+ "viewer.common.close": "Close",
439
+ "diagram.description.erd": "An entity-relationship diagram generated by Archify.",
440
+ "node.context.erd": "Entity",
441
+ "legend.erd.pk": "Primary key",
442
+ "legend.erd.fk": "Foreign key",
443
+ "legend.erd.uk": "Unique key",
444
+ "legend.erd.one": "One",
445
+ "legend.erd.many": "Many",
446
+ "legend.erd.optional": "Optional",
447
+ "diagram.description.tree": "A hierarchy diagram generated by Archify.",
448
+ "node.context.tree.root": "Root",
449
+ "node.context.tree.branch": "Branch",
450
+ "node.context.tree.leaf": "Leaf",
451
+ "tree.toggle.collapse": "Collapse {label} ({count} below)",
452
+ "tree.toggle.expand": "Expand {label} ({count} hidden)",
453
+ "tree.expandAll": "Expand all",
454
+ "diagram.description.class": "A class and interface diagram generated by Archify.",
455
+ "node.context.class.class": "Class",
456
+ "node.context.class.abstract": "Abstract class",
457
+ "node.context.class.interface": "Interface",
458
+ "node.context.class.enum": "Enumeration",
459
+ "node.context.class.record": "Record",
460
+ "legend.class.dependency": "Depends on",
461
+ "legend.class.association": "Association",
462
+ "legend.class.inheritance": "Inherits",
463
+ "legend.class.realization": "Implements",
464
+ "legend.class.composition": "Composition",
465
+ "legend.class.aggregation": "Aggregation",
466
+ "diagram.description.timeline": "An event timeline generated by Archify.",
467
+ "timeline.axis": "Time",
468
+ "timeline.break": "Axis break: {duration} without events omitted",
469
+ "timeline.compressed": "{count} quiet period(s) compressed (≈)",
470
+ "timeline.evidence.observed": "Observed events",
471
+ "timeline.evidence.illustrative": "Illustrative data",
472
+ "legend.timeline.default": "Event",
473
+ "legend.timeline.change": "Change",
474
+ "legend.timeline.alert": "Alert",
475
+ "legend.timeline.action": "Response",
476
+ "legend.timeline.recovery": "Recovery",
477
+ "diagram.description.waterfall": "An execution waterfall generated by Archify.",
478
+ "waterfall.evidence.measured": "Measured timing",
479
+ "waterfall.evidence.illustrative": "Illustrative timing",
480
+ "waterfall.wall": "Wall-clock {duration}",
481
+ "waterfall.share": "{percent} of {total} wall-clock",
482
+ "waterfall.incomplete": "incomplete, ≥ {duration}",
483
+ "waterfall.operation": "Operation",
484
+ "legend.waterfall.ok": "Completed",
485
+ "legend.waterfall.error": "Error",
486
+ "legend.waterfall.cancelled": "Cancelled",
487
+ "legend.waterfall.incomplete": "Incomplete (no recorded end)"
488
+ }