graphitect 0.2.0__py3-none-any.whl
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.
- graphify/__init__.py +30 -0
- graphify/__main__.py +757 -0
- graphify/_minhash.py +107 -0
- graphify/affected.py +318 -0
- graphify/always_on/agents-md.md +12 -0
- graphify/always_on/antigravity-rules.md +14 -0
- graphify/always_on/claude-md.md +9 -0
- graphify/always_on/gemini-md.md +9 -0
- graphify/always_on/kiro-steering.md +5 -0
- graphify/always_on/vscode-instructions.md +17 -0
- graphify/analyze.py +769 -0
- graphify/benchmark.py +152 -0
- graphify/build.py +2300 -0
- graphify/cache.py +1746 -0
- graphify/callflow_html.py +2051 -0
- graphify/cargo_introspect.py +109 -0
- graphify/cli.py +4745 -0
- graphify/cluster.py +409 -0
- graphify/command-kilo.md +15 -0
- graphify/cross_repo_calls.py +216 -0
- graphify/cross_repo_types.py +75 -0
- graphify/csharp_dispatch.py +154 -0
- graphify/dedup.py +1213 -0
- graphify/detect.py +2566 -0
- graphify/diagnostics.py +406 -0
- graphify/export.py +1349 -0
- graphify/exporters/__init__.py +1 -0
- graphify/exporters/base.py +14 -0
- graphify/exporters/graphdb.py +173 -0
- graphify/exporters/html.py +637 -0
- graphify/extract.py +7856 -0
- graphify/extractors/MIGRATION.md +107 -0
- graphify/extractors/__init__.py +66 -0
- graphify/extractors/apex.py +215 -0
- graphify/extractors/base.py +85 -0
- graphify/extractors/bash.py +579 -0
- graphify/extractors/blade.py +53 -0
- graphify/extractors/commonlisp.py +540 -0
- graphify/extractors/csharp.py +448 -0
- graphify/extractors/dart.py +564 -0
- graphify/extractors/dm.py +494 -0
- graphify/extractors/elixir.py +241 -0
- graphify/extractors/engine.py +6509 -0
- graphify/extractors/fortran.py +311 -0
- graphify/extractors/go.py +527 -0
- graphify/extractors/json_config.py +240 -0
- graphify/extractors/julia.py +289 -0
- graphify/extractors/markdown.py +408 -0
- graphify/extractors/models.py +131 -0
- graphify/extractors/objc.py +566 -0
- graphify/extractors/ocaml.py +289 -0
- graphify/extractors/pascal.py +688 -0
- graphify/extractors/pascal_forms.py +196 -0
- graphify/extractors/powershell.py +522 -0
- graphify/extractors/razor.py +192 -0
- graphify/extractors/resolution.py +3584 -0
- graphify/extractors/robot.py +296 -0
- graphify/extractors/rust.py +470 -0
- graphify/extractors/sln.py +92 -0
- graphify/extractors/sql.py +720 -0
- graphify/extractors/terraform.py +181 -0
- graphify/extractors/verilog.py +329 -0
- graphify/extractors/zig.py +181 -0
- graphify/file_slice.py +246 -0
- graphify/global_graph.py +194 -0
- graphify/google_workspace.py +237 -0
- graphify/hooks.py +933 -0
- graphify/ids.py +93 -0
- graphify/ingest.py +358 -0
- graphify/install.py +2366 -0
- graphify/llm.py +3544 -0
- graphify/manifest.py +4 -0
- graphify/manifest_ingest.py +311 -0
- graphify/mcp_ingest.py +386 -0
- graphify/multigraph_compat.py +212 -0
- graphify/pascal_resolution.py +129 -0
- graphify/paths.py +436 -0
- graphify/pg_introspect.py +165 -0
- graphify/prs.py +770 -0
- graphify/querylog.py +80 -0
- graphify/reflect.py +882 -0
- graphify/report.py +346 -0
- graphify/resolver_registry.py +85 -0
- graphify/ruby_resolution.py +242 -0
- graphify/scip_ingest.py +363 -0
- graphify/security.py +460 -0
- graphify/semantic_cleanup.py +336 -0
- graphify/serve.py +2608 -0
- graphify/skill-agents.md +710 -0
- graphify/skill-aider.md +1283 -0
- graphify/skill-amp.md +710 -0
- graphify/skill-claw.md +713 -0
- graphify/skill-codex.md +710 -0
- graphify/skill-copilot.md +713 -0
- graphify/skill-devin.md +1410 -0
- graphify/skill-droid.md +710 -0
- graphify/skill-kilo.md +722 -0
- graphify/skill-kiro.md +713 -0
- graphify/skill-opencode.md +705 -0
- graphify/skill-pi.md +713 -0
- graphify/skill-trae.md +711 -0
- graphify/skill-vscode.md +709 -0
- graphify/skill-windows.md +755 -0
- graphify/skill.md +713 -0
- graphify/skills/agents/references/add-watch.md +56 -0
- graphify/skills/agents/references/exports.md +87 -0
- graphify/skills/agents/references/extraction-spec.md +70 -0
- graphify/skills/agents/references/github-and-merge.md +46 -0
- graphify/skills/agents/references/hooks.md +33 -0
- graphify/skills/agents/references/query.md +311 -0
- graphify/skills/agents/references/transcribe.md +52 -0
- graphify/skills/agents/references/update.md +210 -0
- graphify/skills/amp/references/add-watch.md +56 -0
- graphify/skills/amp/references/exports.md +87 -0
- graphify/skills/amp/references/extraction-spec.md +70 -0
- graphify/skills/amp/references/github-and-merge.md +46 -0
- graphify/skills/amp/references/hooks.md +33 -0
- graphify/skills/amp/references/query.md +311 -0
- graphify/skills/amp/references/transcribe.md +52 -0
- graphify/skills/amp/references/update.md +210 -0
- graphify/skills/claude/references/add-watch.md +56 -0
- graphify/skills/claude/references/exports.md +87 -0
- graphify/skills/claude/references/extraction-spec.md +70 -0
- graphify/skills/claude/references/github-and-merge.md +46 -0
- graphify/skills/claude/references/hooks.md +33 -0
- graphify/skills/claude/references/query.md +311 -0
- graphify/skills/claude/references/transcribe.md +52 -0
- graphify/skills/claude/references/update.md +210 -0
- graphify/skills/claw/references/add-watch.md +56 -0
- graphify/skills/claw/references/exports.md +87 -0
- graphify/skills/claw/references/extraction-spec.md +31 -0
- graphify/skills/claw/references/github-and-merge.md +46 -0
- graphify/skills/claw/references/hooks.md +33 -0
- graphify/skills/claw/references/query.md +311 -0
- graphify/skills/claw/references/transcribe.md +52 -0
- graphify/skills/claw/references/update.md +210 -0
- graphify/skills/codex/references/add-watch.md +56 -0
- graphify/skills/codex/references/exports.md +87 -0
- graphify/skills/codex/references/extraction-spec.md +31 -0
- graphify/skills/codex/references/github-and-merge.md +46 -0
- graphify/skills/codex/references/hooks.md +33 -0
- graphify/skills/codex/references/query.md +311 -0
- graphify/skills/codex/references/transcribe.md +52 -0
- graphify/skills/codex/references/update.md +210 -0
- graphify/skills/copilot/references/add-watch.md +56 -0
- graphify/skills/copilot/references/exports.md +87 -0
- graphify/skills/copilot/references/extraction-spec.md +70 -0
- graphify/skills/copilot/references/github-and-merge.md +46 -0
- graphify/skills/copilot/references/hooks.md +33 -0
- graphify/skills/copilot/references/query.md +311 -0
- graphify/skills/copilot/references/transcribe.md +52 -0
- graphify/skills/copilot/references/update.md +210 -0
- graphify/skills/droid/references/add-watch.md +56 -0
- graphify/skills/droid/references/exports.md +87 -0
- graphify/skills/droid/references/extraction-spec.md +70 -0
- graphify/skills/droid/references/github-and-merge.md +46 -0
- graphify/skills/droid/references/hooks.md +33 -0
- graphify/skills/droid/references/query.md +311 -0
- graphify/skills/droid/references/transcribe.md +52 -0
- graphify/skills/droid/references/update.md +210 -0
- graphify/skills/kilo/references/add-watch.md +56 -0
- graphify/skills/kilo/references/exports.md +87 -0
- graphify/skills/kilo/references/extraction-spec.md +70 -0
- graphify/skills/kilo/references/github-and-merge.md +46 -0
- graphify/skills/kilo/references/hooks.md +33 -0
- graphify/skills/kilo/references/query.md +311 -0
- graphify/skills/kilo/references/transcribe.md +52 -0
- graphify/skills/kilo/references/update.md +210 -0
- graphify/skills/kiro/references/add-watch.md +56 -0
- graphify/skills/kiro/references/exports.md +87 -0
- graphify/skills/kiro/references/extraction-spec.md +31 -0
- graphify/skills/kiro/references/github-and-merge.md +46 -0
- graphify/skills/kiro/references/hooks.md +33 -0
- graphify/skills/kiro/references/query.md +311 -0
- graphify/skills/kiro/references/transcribe.md +52 -0
- graphify/skills/kiro/references/update.md +210 -0
- graphify/skills/opencode/references/add-watch.md +56 -0
- graphify/skills/opencode/references/exports.md +87 -0
- graphify/skills/opencode/references/extraction-spec.md +70 -0
- graphify/skills/opencode/references/github-and-merge.md +46 -0
- graphify/skills/opencode/references/hooks.md +33 -0
- graphify/skills/opencode/references/query.md +311 -0
- graphify/skills/opencode/references/transcribe.md +52 -0
- graphify/skills/opencode/references/update.md +210 -0
- graphify/skills/pi/references/add-watch.md +56 -0
- graphify/skills/pi/references/exports.md +87 -0
- graphify/skills/pi/references/extraction-spec.md +31 -0
- graphify/skills/pi/references/github-and-merge.md +46 -0
- graphify/skills/pi/references/hooks.md +33 -0
- graphify/skills/pi/references/query.md +311 -0
- graphify/skills/pi/references/transcribe.md +52 -0
- graphify/skills/pi/references/update.md +210 -0
- graphify/skills/trae/references/add-watch.md +56 -0
- graphify/skills/trae/references/exports.md +87 -0
- graphify/skills/trae/references/extraction-spec.md +70 -0
- graphify/skills/trae/references/github-and-merge.md +46 -0
- graphify/skills/trae/references/hooks.md +35 -0
- graphify/skills/trae/references/query.md +311 -0
- graphify/skills/trae/references/transcribe.md +52 -0
- graphify/skills/trae/references/update.md +210 -0
- graphify/skills/vscode/references/add-watch.md +56 -0
- graphify/skills/vscode/references/exports.md +87 -0
- graphify/skills/vscode/references/extraction-spec.md +70 -0
- graphify/skills/vscode/references/github-and-merge.md +46 -0
- graphify/skills/vscode/references/hooks.md +33 -0
- graphify/skills/vscode/references/query.md +311 -0
- graphify/skills/vscode/references/transcribe.md +52 -0
- graphify/skills/vscode/references/update.md +210 -0
- graphify/skills/windows/references/add-watch.md +56 -0
- graphify/skills/windows/references/exports.md +87 -0
- graphify/skills/windows/references/extraction-spec.md +70 -0
- graphify/skills/windows/references/github-and-merge.md +46 -0
- graphify/skills/windows/references/hooks.md +33 -0
- graphify/skills/windows/references/query.md +311 -0
- graphify/skills/windows/references/transcribe.md +52 -0
- graphify/skills/windows/references/update.md +210 -0
- graphify/symbol_resolution.py +556 -0
- graphify/transcribe.py +186 -0
- graphify/tree_html.py +603 -0
- graphify/validate.py +95 -0
- graphify/watch.py +2280 -0
- graphify/wiki.py +405 -0
- graphitect/__init__.py +28 -0
- graphitect/__main__.py +4 -0
- graphitect/_vendor/__init__.py +2 -0
- graphitect/_vendor/archify/LICENSE +22 -0
- graphitect/_vendor/archify/SKILL.md +137 -0
- graphitect/_vendor/archify/THIRD_PARTY_NOTICES.md +69 -0
- graphitect/_vendor/archify/assets/JetBrainsMono-OFL.txt +93 -0
- graphitect/_vendor/archify/assets/template.html +14935 -0
- graphitect/_vendor/archify/bin/archify.mjs +2091 -0
- graphitect/_vendor/archify/bin/open-artifact.mjs +86 -0
- graphitect/_vendor/archify/bin/preview.mjs +653 -0
- graphitect/_vendor/archify/bin/visual-check.mjs +829 -0
- graphitect/_vendor/archify/brand-marks/README.md +31 -0
- graphitect/_vendor/archify/brand-marks/catalog.json +131 -0
- graphitect/_vendor/archify/delta/architecture-delta.mjs +1221 -0
- graphitect/_vendor/archify/examples/agent-run.lifecycle.json +60 -0
- graphitect/_vendor/archify/examples/agent-tool-call.workflow.json +94 -0
- graphitect/_vendor/archify/examples/async-job-roundtrip.sequence.json +61 -0
- graphitect/_vendor/archify/examples/brand-aware-delivery.architecture.json +47 -0
- graphitect/_vendor/archify/examples/cache-miss-request.sequence.json +82 -0
- graphitect/_vendor/archify/examples/checkout-platform.base.architecture.json +31 -0
- graphitect/_vendor/archify/examples/checkout-platform.head.architecture.json +31 -0
- graphitect/_vendor/archify/examples/dataflow-product-analytics.html +15045 -0
- graphitect/_vendor/archify/examples/deployment-release.lifecycle.json +49 -0
- graphitect/_vendor/archify/examples/event-stream.dataflow.json +57 -0
- graphitect/_vendor/archify/examples/incident-response.workflow.json +64 -0
- graphitect/_vendor/archify/examples/lifecycle-agent-run.html +14980 -0
- graphitect/_vendor/archify/examples/product-analytics.dataflow.json +76 -0
- graphitect/_vendor/archify/examples/production-deployment.architecture.json +71 -0
- graphitect/_vendor/archify/examples/release-delivery.workflow.json +62 -0
- graphitect/_vendor/archify/examples/sequence-cache-miss-request.html +15060 -0
- graphitect/_vendor/archify/examples/web-app-rendered.html +15009 -0
- graphitect/_vendor/archify/examples/web-app.architecture.json +46 -0
- graphitect/_vendor/archify/examples/workflow-agent-tool-call-rendered.html +15051 -0
- graphitect/_vendor/archify/migrations/workflow-v2.mjs +279 -0
- graphitect/_vendor/archify/package-lock.json +149 -0
- graphitect/_vendor/archify/package.json +39 -0
- graphitect/_vendor/archify/recipes/scenarios.mjs +391 -0
- graphitect/_vendor/archify/references/authoring-contract.md +243 -0
- graphitect/_vendor/archify/references/brand-marks.md +65 -0
- graphitect/_vendor/archify/references/delivery-contract.md +120 -0
- graphitect/_vendor/archify/references/viewer-runtime.md +45 -0
- graphitect/_vendor/archify/renderers/architecture/grid.mjs +62 -0
- graphitect/_vendor/archify/renderers/architecture/render-architecture.mjs +1078 -0
- graphitect/_vendor/archify/renderers/dataflow/README.md +104 -0
- graphitect/_vendor/archify/renderers/dataflow/render-dataflow.mjs +483 -0
- graphitect/_vendor/archify/renderers/lifecycle/README.md +115 -0
- graphitect/_vendor/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
- graphitect/_vendor/archify/renderers/sequence/README.md +114 -0
- graphitect/_vendor/archify/renderers/sequence/render-sequence.mjs +464 -0
- graphitect/_vendor/archify/renderers/shared/brand-marks.mjs +563 -0
- graphitect/_vendor/archify/renderers/shared/cli.mjs +218 -0
- graphitect/_vendor/archify/renderers/shared/desktop-readability.mjs +26 -0
- graphitect/_vendor/archify/renderers/shared/diagnostics.mjs +127 -0
- graphitect/_vendor/archify/renderers/shared/engineering-profiles.mjs +157 -0
- graphitect/_vendor/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
- graphitect/_vendor/archify/renderers/shared/generated-validators.mjs +13 -0
- graphitect/_vendor/archify/renderers/shared/geometry.mjs +1423 -0
- graphitect/_vendor/archify/renderers/shared/i18n.mjs +595 -0
- graphitect/_vendor/archify/renderers/shared/layout-report.mjs +40 -0
- graphitect/_vendor/archify/renderers/shared/legend.mjs +217 -0
- graphitect/_vendor/archify/renderers/shared/output-path.mjs +340 -0
- graphitect/_vendor/archify/renderers/shared/repository-evidence.mjs +238 -0
- graphitect/_vendor/archify/renderers/shared/repository-location.mjs +58 -0
- graphitect/_vendor/archify/renderers/shared/text-fit.mjs +49 -0
- graphitect/_vendor/archify/renderers/shared/utils.mjs +232 -0
- graphitect/_vendor/archify/renderers/shared/validator.mjs +86 -0
- graphitect/_vendor/archify/renderers/workflow/README.md +223 -0
- graphitect/_vendor/archify/renderers/workflow/render-workflow.mjs +35 -0
- graphitect/_vendor/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
- graphitect/_vendor/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
- graphitect/_vendor/archify/schemas/README.md +211 -0
- graphitect/_vendor/archify/schemas/architecture.schema.json +178 -0
- graphitect/_vendor/archify/schemas/common.schema.json +115 -0
- graphitect/_vendor/archify/schemas/dataflow.schema.json +243 -0
- graphitect/_vendor/archify/schemas/lifecycle.schema.json +266 -0
- graphitect/_vendor/archify/schemas/sequence.schema.json +223 -0
- graphitect/_vendor/archify/schemas/workflow.schema.json +428 -0
- graphitect/_vendor/archify/scripts/check-render-output.mjs +836 -0
- graphitect/_vendor/archify/scripts/check-update.mjs +1667 -0
- graphitect/_vendor/archify/scripts/generate-brand-marks.mjs +141 -0
- graphitect/_vendor/archify/scripts/generate-validators.mjs +66 -0
- graphitect/_vendor/archify/scripts/render-examples.mjs +26 -0
- graphitect/_vendor/archify/scripts/update-contract.mjs +182 -0
- graphitect/_vendor/archify/skill-release.json +10 -0
- graphitect/cli.py +981 -0
- graphitect/deliver/__init__.py +5 -0
- graphitect/deliver/archify_adapter.py +1877 -0
- graphitect/deliver/archify_ir.py +160 -0
- graphitect/deliver/archify_repair.py +135 -0
- graphitect/deliver/doc_compiler.py +916 -0
- graphitect/ground/__init__.py +5 -0
- graphitect/ground/describe_source.py +27 -0
- graphitect/ground/fullread_source.py +56 -0
- graphitect/ground/graphify_source.py +107 -0
- graphitect/models.py +118 -0
- graphitect/skill/SKILL.md +80 -0
- graphitect/skill/agents/openai.yaml +4 -0
- graphitect/synthesize/__init__.py +5 -0
- graphitect/synthesize/engine.py +281 -0
- graphitect/synthesize/llm_backend.py +331 -0
- graphitect/synthesize/questions.py +139 -0
- graphitect/synthesize/rubric.py +104 -0
- graphitect-0.2.0.dist-info/METADATA +284 -0
- graphitect-0.2.0.dist-info/RECORD +336 -0
- graphitect-0.2.0.dist-info/WHEEL +5 -0
- graphitect-0.2.0.dist-info/entry_points.txt +2 -0
- graphitect-0.2.0.dist-info/licenses/LICENSE +21 -0
- graphitect-0.2.0.dist-info/licenses/LICENSE-ARCHIFY-MIT +22 -0
- graphitect-0.2.0.dist-info/licenses/LICENSE-GRAPHIFY-APACHE-2.0 +202 -0
- graphitect-0.2.0.dist-info/licenses/LICENSE-GRAPHIFY-MIT +21 -0
- graphitect-0.2.0.dist-info/licenses/NOTICE-ARCHIFY-THIRD-PARTY.md +69 -0
- graphitect-0.2.0.dist-info/licenses/NOTICE-GRAPHIFY +8 -0
- graphitect-0.2.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "lifecycle",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Agent Run Lifecycle",
|
|
6
|
+
"output": "examples/lifecycle-agent-run.html",
|
|
7
|
+
"viewBox": [1030, 630],
|
|
8
|
+
"animation": "trace",
|
|
9
|
+
"quality_profile": "showcase",
|
|
10
|
+
"views": [
|
|
11
|
+
{ "id": "main-lifecycle", "label": "Main lifecycle", "focus": ["queued", "planning", "executing", "reviewing", "completed"], "note": "Follow the ordered phases from accepted request to completed response." },
|
|
12
|
+
{ "id": "human-waits", "label": "Human and input waits", "focus": ["executing", "approval", "reviewing", "blocked"], "note": "See where the run pauses without becoming terminal." },
|
|
13
|
+
{ "id": "recovery-and-exits", "label": "Recovery and terminal exits", "focus": ["executing", "failed", "blocked", "cancelled", "expired"], "note": "Separate retryable failure from cancellation and expiry." }
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"lanes": [
|
|
17
|
+
{ "id": "main", "label": "Lifecycle phases" },
|
|
18
|
+
{ "id": "waiting", "label": "Interruptions" },
|
|
19
|
+
{ "id": "exceptions", "label": "Recovery loop" },
|
|
20
|
+
{ "id": "terminal", "label": "Terminal exits" }
|
|
21
|
+
],
|
|
22
|
+
"states": [
|
|
23
|
+
{ "id": "queued", "type": "start", "label": "Queued", "sublabel": "request accepted", "lane": "main", "col": 0, "step": "01", "tag": "entry" },
|
|
24
|
+
{ "id": "planning", "type": "active", "label": "Planning", "sublabel": "build task graph", "lane": "main", "col": 1, "step": "02", "tag": "model" },
|
|
25
|
+
{ "id": "executing", "type": "active", "label": "Executing", "sublabel": "tool calls", "lane": "main", "col": 2, "step": "03", "tag": "work" },
|
|
26
|
+
{ "id": "reviewing", "type": "decision", "label": "Reviewing", "sublabel": "quality gate", "lane": "main", "col": 3, "step": "04", "tag": "check" },
|
|
27
|
+
{ "id": "completed", "type": "success", "label": "Completed", "sublabel": "final response", "lane": "main", "col": 4, "step": "05", "tag": "done" },
|
|
28
|
+
{ "id": "approval", "type": "waiting", "label": "Needs Approval", "sublabel": "human gate", "lane": "waiting", "col": 0, "tag": "pause" },
|
|
29
|
+
{ "id": "blocked", "type": "waiting", "label": "Blocked", "sublabel": "missing input", "lane": "waiting", "col": 1, "tag": "wait" },
|
|
30
|
+
{ "id": "failed", "type": "failure", "label": "Failed", "sublabel": "recoverable error", "lane": "exceptions", "col": 0, "yOffset": 78, "tag": "retryable" },
|
|
31
|
+
{ "id": "cancelled", "type": "failure", "label": "Cancelled", "sublabel": "user stopped", "lane": "terminal", "col": 0, "tag": "terminal" },
|
|
32
|
+
{ "id": "expired", "type": "failure", "label": "Expired", "sublabel": "timeout", "lane": "terminal", "col": 1, "tag": "terminal" }
|
|
33
|
+
],
|
|
34
|
+
"transitions": [
|
|
35
|
+
{ "id": "approval-needed", "from": "executing", "to": "approval", "variant": "security", "fromSide": "bottom", "toSide": "top", "route": "straight" },
|
|
36
|
+
{ "id": "review-blocked", "from": "reviewing", "to": "blocked", "variant": "default", "route": "drop" },
|
|
37
|
+
{ "id": "execution-failed", "from": "executing", "to": "failed", "variant": "security", "fromSide": "left", "toSide": "left", "via": [[320, 157], [320, 385]] },
|
|
38
|
+
{ "id": "failed-retry", "from": "failed", "to": "executing", "variant": "emphasis", "fromSide": "left", "toSide": "top", "via": [[20, 385], [20, 80], [402, 80]] },
|
|
39
|
+
{ "id": "block-expired", "from": "blocked", "to": "expired", "variant": "security", "fromSide": "bottom", "toSide": "top", "route": "straight" },
|
|
40
|
+
{ "id": "approval-cancelled", "from": "approval", "to": "cancelled", "variant": "security", "fromSide": "bottom", "toSide": "top", "via": [[480, 336], [480, 432], [402, 432]] }
|
|
41
|
+
],
|
|
42
|
+
"cards": [
|
|
43
|
+
{
|
|
44
|
+
"dot": "emerald",
|
|
45
|
+
"title": "Main Path + Waits",
|
|
46
|
+
"items": [
|
|
47
|
+
"The run has five ordered phases from queue to completion",
|
|
48
|
+
"Approval and missing input pause the run without ending it"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"dot": "rose",
|
|
53
|
+
"title": "Recovery + Terminal Exits",
|
|
54
|
+
"items": [
|
|
55
|
+
"Failed loops back while retry budget remains",
|
|
56
|
+
"Cancelled and Expired are terminal exits with no return path"
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 2,
|
|
3
|
+
"diagram_type": "workflow",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Agent Tool Call Workflow",
|
|
6
|
+
"animation": "trace",
|
|
7
|
+
"visual_preset": "signal-flow",
|
|
8
|
+
"quality_profile": "showcase",
|
|
9
|
+
"views": [
|
|
10
|
+
{
|
|
11
|
+
"id": "happy-path",
|
|
12
|
+
"label": "Request to result",
|
|
13
|
+
"focus": ["user", "chat", "planner", "router", "approval", "tool", "external", "final"],
|
|
14
|
+
"note": "Follow the successful request from user intent to the final reply."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "safety-gate",
|
|
18
|
+
"label": "Policy and recovery",
|
|
19
|
+
"focus": ["router", "approval", "blocked", "retry"],
|
|
20
|
+
"note": "See where risky work stops, waits for consent, or returns for revision."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "evidence-loop",
|
|
24
|
+
"label": "Evidence and memory",
|
|
25
|
+
"focus": ["external", "store", "trace"],
|
|
26
|
+
"note": "Isolate the durable trace and context path behind the visible answer."
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"output": "examples/workflow-agent-tool-call-rendered.html"
|
|
30
|
+
},
|
|
31
|
+
"lanes": [
|
|
32
|
+
{ "id": "ui", "label": "User Interface" },
|
|
33
|
+
{ "id": "agent", "label": "Agent Runtime" },
|
|
34
|
+
{ "id": "policy", "label": "Policy & Recovery", "variant": "exception" },
|
|
35
|
+
{ "id": "tools", "label": "Tool Execution & Evidence" }
|
|
36
|
+
],
|
|
37
|
+
"phases": [
|
|
38
|
+
{ "id": "intake", "label": "Intake", "fromCol": 0, "toCol": 1 },
|
|
39
|
+
{ "id": "reasoning", "label": "Plan + route", "fromCol": 2, "toCol": 3, "variant": "emphasis" },
|
|
40
|
+
{ "id": "execution", "label": "Execute + report", "fromCol": 4, "toCol": 5, "variant": "dashed" }
|
|
41
|
+
],
|
|
42
|
+
"groups": [
|
|
43
|
+
{ "id": "agent_loop", "label": "Planning loop", "lane": "agent", "fromCol": 2, "toCol": 3, "variant": "emphasis" },
|
|
44
|
+
{ "id": "exception_path", "label": "Human or policy stop", "lane": "policy", "fromCol": 3, "toCol": 5, "variant": "security" },
|
|
45
|
+
{ "id": "evidence_path", "label": "Evidence path", "lane": "tools", "fromCol": 1, "toCol": 2, "variant": "dashed" },
|
|
46
|
+
{ "id": "tool_work", "label": "Tool work", "lane": "tools", "fromCol": 4, "toCol": 5, "variant": "dashed" }
|
|
47
|
+
],
|
|
48
|
+
"mainPath": ["user", "chat", "planner", "router", "approval", "tool", "external", "final"],
|
|
49
|
+
"nodes": [
|
|
50
|
+
{ "id": "user", "lane": "ui", "col": 0, "type": "external", "label": "User", "sublabel": "asks for work", "width": 132 },
|
|
51
|
+
{ "id": "chat", "lane": "ui", "col": 1, "type": "frontend", "label": "Chat Surface", "sublabel": "thread + files", "width": 132 },
|
|
52
|
+
{ "id": "final", "lane": "ui", "col": 5, "type": "backend", "label": "Final Reply", "sublabel": "answer + changes", "width": 132 },
|
|
53
|
+
{ "id": "planner", "lane": "agent", "col": 2, "type": "backend", "label": "Agent Planner", "sublabel": "plan next step", "tag": "context aware", "width": 132 },
|
|
54
|
+
{ "id": "router", "lane": "agent", "col": 3, "type": "backend", "label": "Tool Router", "sublabel": "choose capability", "width": 132 },
|
|
55
|
+
{ "id": "approval", "lane": "policy", "col": 3, "type": "security", "label": "Approval Gate", "sublabel": "scope + consent", "tag": "block risky ops", "width": 132 },
|
|
56
|
+
{ "id": "blocked", "lane": "policy", "col": 4, "type": "security", "label": "Blocked", "sublabel": "wait or reject", "width": 132 },
|
|
57
|
+
{ "id": "retry", "lane": "policy", "col": 5, "type": "messagebus", "label": "Retry Path", "sublabel": "revise request", "width": 132 },
|
|
58
|
+
{ "id": "tool", "lane": "tools", "col": 4, "type": "messagebus", "label": "Tool Call", "sublabel": "shell / browser / MCP", "tag": "structured result", "width": 132 },
|
|
59
|
+
{ "id": "external", "lane": "tools", "col": 5, "type": "cloud", "label": "External API", "sublabel": "network service", "width": 132 },
|
|
60
|
+
{ "id": "store", "lane": "tools", "col": 1, "type": "database", "label": "Context Store", "sublabel": "repo + memory", "width": 132 },
|
|
61
|
+
{ "id": "trace", "lane": "tools", "col": 2, "type": "database", "label": "Trace Log", "sublabel": "events + output", "width": 132 }
|
|
62
|
+
],
|
|
63
|
+
"edges": [
|
|
64
|
+
{ "id": "request-chat", "from": "user", "to": "chat", "variant": "default" },
|
|
65
|
+
{ "id": "plan-request", "from": "chat", "to": "planner", "label": "plan", "variant": "emphasis" },
|
|
66
|
+
{ "id": "planner-route", "from": "planner", "to": "router", "variant": "default" },
|
|
67
|
+
{ "id": "approval-check", "from": "router", "to": "approval", "label": "needs approval?", "variant": "security" },
|
|
68
|
+
{ "id": "approved-tool", "from": "approval", "to": "tool", "variant": "emphasis" },
|
|
69
|
+
{ "id": "approval-denied", "from": "approval", "to": "blocked", "label": "denied", "variant": "security", "role": "error" },
|
|
70
|
+
{ "id": "retry-request", "from": "blocked", "to": "retry", "variant": "dashed", "role": "branch" },
|
|
71
|
+
{ "id": "tool-external-call", "from": "tool", "to": "external", "variant": "default" },
|
|
72
|
+
{ "id": "external-reply", "from": "external", "to": "final", "variant": "emphasis", "role": "return", "fromSide": "right", "toSide": "right", "route": "outside-right", "width": 1.2 },
|
|
73
|
+
{ "id": "record-result", "from": "external", "to": "trace", "label": "record result", "variant": "dashed", "fromSide": "bottom", "toSide": "bottom", "route": "bottom-channel", "labelSegment": 1 },
|
|
74
|
+
{ "id": "write-trace-memory", "from": "store", "to": "trace", "label": "trace + memory", "variant": "dashed" }
|
|
75
|
+
],
|
|
76
|
+
"cards": [
|
|
77
|
+
{
|
|
78
|
+
"dot": "cyan",
|
|
79
|
+
"title": "Compiler Contract",
|
|
80
|
+
"items": [
|
|
81
|
+
"Lanes and columns determine node placement",
|
|
82
|
+
"Labels reserve clearance; routes stay orthogonal"
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"dot": "rose",
|
|
87
|
+
"title": "Runtime Semantics",
|
|
88
|
+
"items": [
|
|
89
|
+
"Approval gates risky work before tool execution",
|
|
90
|
+
"Evidence returns through isolated trace and memory"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "sequence",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Async Job Roundtrip",
|
|
6
|
+
"output": "examples/async-job-roundtrip.html",
|
|
7
|
+
"viewBox": [820, 920],
|
|
8
|
+
"animation": "trace",
|
|
9
|
+
"visual_preset": "signal-flow",
|
|
10
|
+
"quality_profile": "showcase",
|
|
11
|
+
"views": [
|
|
12
|
+
{ "id": "accept-and-enqueue", "label": "Accept without blocking", "focus": ["client", "api", "queue"], "note": "The API acknowledges quickly after durable enqueue." },
|
|
13
|
+
{ "id": "work-and-retry", "label": "Background work and retry", "focus": ["queue", "worker", "provider"], "note": "Timeouts re-enter the queue instead of holding the original request open." },
|
|
14
|
+
{ "id": "observe-final-state", "label": "Observe final consistency", "focus": ["worker", "store", "notify", "client", "api"], "note": "Webhook delivery is primary; polling remains a bounded fallback." }
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"participants": [
|
|
18
|
+
{ "id": "client", "type": "external", "label": "Client", "sublabel": "mobile app" },
|
|
19
|
+
{ "id": "api", "type": "backend", "label": "Jobs API", "sublabel": "request edge" },
|
|
20
|
+
{ "id": "queue", "type": "messagebus", "label": "Queue", "sublabel": "durable work" },
|
|
21
|
+
{ "id": "worker", "type": "backend", "label": "Worker", "sublabel": "background" },
|
|
22
|
+
{ "id": "provider", "type": "cloud", "label": "Provider", "sublabel": "external API" },
|
|
23
|
+
{ "id": "store", "type": "database", "label": "Job Store", "sublabel": "source of truth" },
|
|
24
|
+
{ "id": "notify", "type": "messagebus", "label": "Notifier", "sublabel": "webhook" }
|
|
25
|
+
],
|
|
26
|
+
"segments": [
|
|
27
|
+
{ "from": 150, "to": 288, "label": "Accept" },
|
|
28
|
+
{ "from": 306, "to": 538, "label": "Background work" },
|
|
29
|
+
{ "from": 554, "to": 800, "label": "Notify + reconcile" }
|
|
30
|
+
],
|
|
31
|
+
"messages": [
|
|
32
|
+
{ "from": "client", "to": "api", "y": 180, "label": "POST /jobs", "variant": "emphasis" },
|
|
33
|
+
{ "from": "api", "to": "queue", "y": 222, "label": "enqueue job", "variant": "emphasis" },
|
|
34
|
+
{ "from": "api", "to": "client", "y": 264, "label": "202 + job id", "variant": "return" },
|
|
35
|
+
{ "from": "queue", "to": "worker", "y": 326, "label": "deliver", "variant": "emphasis" },
|
|
36
|
+
{ "from": "worker", "to": "provider", "y": 368, "label": "perform work", "variant": "default" },
|
|
37
|
+
{ "from": "provider", "to": "worker", "y": 410, "label": "result / timeout", "variant": "return" },
|
|
38
|
+
{ "from": "worker", "to": "queue", "y": 452, "label": "retry if timeout", "variant": "dashed" },
|
|
39
|
+
{ "from": "worker", "to": "store", "y": 494, "label": "persist final state", "variant": "emphasis" },
|
|
40
|
+
{ "from": "worker", "to": "notify", "y": 566, "label": "job.completed", "variant": "dashed" },
|
|
41
|
+
{ "from": "notify", "to": "client", "y": 608, "label": "signed webhook", "variant": "dashed" },
|
|
42
|
+
{ "from": "client", "to": "api", "y": 650, "label": "GET /jobs/:id", "variant": "default" },
|
|
43
|
+
{ "from": "api", "to": "store", "y": 692, "label": "read status", "variant": "default" },
|
|
44
|
+
{ "from": "store", "to": "api", "y": 734, "label": "completed", "variant": "return" },
|
|
45
|
+
{ "from": "api", "to": "client", "y": 776, "label": "200 final result", "variant": "return" }
|
|
46
|
+
],
|
|
47
|
+
"activations": [
|
|
48
|
+
{ "participant": "api", "from": 174, "to": 272, "type": "backend" },
|
|
49
|
+
{ "participant": "queue", "from": 216, "to": 334, "type": "messagebus" },
|
|
50
|
+
{ "participant": "worker", "from": 320, "to": 574, "type": "backend" },
|
|
51
|
+
{ "participant": "provider", "from": 362, "to": 416, "type": "cloud" },
|
|
52
|
+
{ "participant": "store", "from": 488, "to": 742, "type": "database" },
|
|
53
|
+
{ "participant": "notify", "from": 560, "to": 616, "type": "messagebus" },
|
|
54
|
+
{ "participant": "api", "from": 644, "to": 784, "type": "backend" }
|
|
55
|
+
],
|
|
56
|
+
"cards": [
|
|
57
|
+
{ "dot": "cyan", "title": "Fast Acknowledgement", "items": ["The caller receives a durable job id before work begins", "Queue ownership is visible in the acceptance contract", "The original connection does not wait for provider latency"] },
|
|
58
|
+
{ "dot": "orange", "title": "Bounded Recovery", "items": ["Timeouts re-enter the queue with a retry policy", "Final state is persisted before notification", "The job store remains the source of truth"] },
|
|
59
|
+
{ "dot": "emerald", "title": "Two Observation Paths", "items": ["A signed webhook announces completion", "Status polling is a fallback, not a second workflow", "Both paths converge on the same final state"] }
|
|
60
|
+
]
|
|
61
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "architecture",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Brand-aware AI delivery",
|
|
6
|
+
"quality_profile": "showcase",
|
|
7
|
+
"viewBox": [1120, 640],
|
|
8
|
+
"views": [
|
|
9
|
+
{
|
|
10
|
+
"id": "delivery-path",
|
|
11
|
+
"label": "Delivery path",
|
|
12
|
+
"focus": ["request", "claude", "github", "container", "edge", "customer"],
|
|
13
|
+
"note": "Follow one delivery from the request through the model, repository, container, and edge."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "business-data",
|
|
17
|
+
"label": "Business and data",
|
|
18
|
+
"focus": ["container", "database", "billing"],
|
|
19
|
+
"note": "Inspect durable state and billing without losing the main delivery path."
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"components": [
|
|
24
|
+
{ "id": "request", "type": "external", "label": "Product request", "sublabel": "Owner brief", "pos": [38, 260], "size": [138, 68] },
|
|
25
|
+
{ "id": "claude", "type": "frontend", "label": "Claude", "sublabel": "Plan and author", "brand": "claude", "pos": [220, 260], "size": [138, 68] },
|
|
26
|
+
{ "id": "github", "type": "messagebus", "label": "GitHub", "sublabel": "Review and merge", "brand": "github", "pos": [402, 260], "size": [138, 68] },
|
|
27
|
+
{ "id": "container", "type": "backend", "label": "Docker service", "sublabel": "Build and run", "brand": "docker", "pos": [584, 260], "size": [138, 68] },
|
|
28
|
+
{ "id": "edge", "type": "cloud", "label": "Cloudflare", "sublabel": "Global delivery", "brand": "cloudflare", "pos": [766, 260], "size": [138, 68] },
|
|
29
|
+
{ "id": "customer", "type": "external", "label": "Customers", "sublabel": "Web and mobile", "pos": [948, 260], "size": [138, 68] },
|
|
30
|
+
{ "id": "database", "type": "database", "label": "PostgreSQL", "sublabel": "Durable state", "brand": "postgresql", "pos": [584, 420], "size": [138, 68] },
|
|
31
|
+
{ "id": "billing", "type": "external", "label": "Stripe", "sublabel": "Billing events", "brand": "stripe", "pos": [766, 420], "size": [138, 68] }
|
|
32
|
+
],
|
|
33
|
+
"connections": [
|
|
34
|
+
{ "id": "brief-to-claude", "from": "request", "to": "claude", "label": "brief", "variant": "emphasis" },
|
|
35
|
+
{ "id": "claude-to-github", "from": "claude", "to": "github", "label": "change set", "labelDy": -28 },
|
|
36
|
+
{ "id": "github-to-container", "from": "github", "to": "container", "label": "approved build", "labelDy": -28 },
|
|
37
|
+
{ "id": "container-to-edge", "from": "container", "to": "edge", "label": "deploy" },
|
|
38
|
+
{ "id": "edge-to-customer", "from": "edge", "to": "customer", "label": "HTTPS", "variant": "emphasis" },
|
|
39
|
+
{ "id": "container-to-database", "from": "container", "to": "database", "label": "SQL", "fromSide": "bottom", "toSide": "top", "labelAt": [625, 370] },
|
|
40
|
+
{ "id": "container-to-billing", "from": "container", "to": "billing", "label": "create charge", "variant": "dashed", "fromSide": "bottom", "toSide": "top", "via": [[653, 374], [835, 374]] },
|
|
41
|
+
{ "id": "billing-to-database", "from": "billing", "to": "database", "label": "webhook", "variant": "dashed" }
|
|
42
|
+
],
|
|
43
|
+
"cards": [
|
|
44
|
+
{ "dot": "cyan", "title": "Identity at a glance", "items": ["Semantic color still explains technical role", "Brand badges identify the actual products"] },
|
|
45
|
+
{ "dot": "amber", "title": "Portable by default", "items": ["Preset marks ship inside Archify", "Every visual export keeps the same badge"] }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "sequence",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Cache Miss Request Sequence",
|
|
6
|
+
"output": "examples/sequence-cache-miss-request.html",
|
|
7
|
+
"viewBox": [1080, 560],
|
|
8
|
+
"column_fit": "spread",
|
|
9
|
+
"animation": "trace",
|
|
10
|
+
"quality_profile": "showcase",
|
|
11
|
+
"views": [
|
|
12
|
+
{ "id": "request-and-auth", "label": "Request and identity", "focus": ["user", "web", "api", "auth"], "note": "Follow the user request through the authentication check." },
|
|
13
|
+
{ "id": "cache-fallback", "label": "Cache fallback", "focus": ["api", "redis", "db"], "note": "See the cache miss and the source-of-truth query it triggers." },
|
|
14
|
+
{ "id": "return-and-trace", "label": "Return and trace", "focus": ["db", "api", "redis", "trace", "web", "user"], "note": "Separate response latency from the non-blocking observability write." }
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"participants": [
|
|
18
|
+
{ "id": "user", "type": "external", "label": "User", "sublabel": "browser session" },
|
|
19
|
+
{ "id": "web", "type": "frontend", "label": "Web App", "sublabel": "React UI" },
|
|
20
|
+
{ "id": "api", "type": "backend", "label": "API", "sublabel": "request handler" },
|
|
21
|
+
{ "id": "auth", "type": "security", "label": "Auth", "sublabel": "JWT verify" },
|
|
22
|
+
{ "id": "redis", "type": "database", "label": "Redis", "sublabel": "cache" },
|
|
23
|
+
{ "id": "db", "type": "database", "label": "Postgres", "sublabel": "source of truth" },
|
|
24
|
+
{ "id": "trace", "type": "messagebus", "label": "Trace", "sublabel": "async event" }
|
|
25
|
+
],
|
|
26
|
+
"segments": [
|
|
27
|
+
{ "from": 150, "to": 250, "label": "Request" },
|
|
28
|
+
{ "from": 260, "to": 370, "label": "Fallback" },
|
|
29
|
+
{ "from": 380, "to": 480, "label": "Response + trace" }
|
|
30
|
+
],
|
|
31
|
+
"messages": [
|
|
32
|
+
{ "id": "open-page", "from": "user", "to": "web", "y": 160, "label": "open page", "variant": "default" },
|
|
33
|
+
{ "id": "dashboard-request", "from": "web", "to": "api", "y": 185, "label": "GET /dashboard", "variant": "emphasis" },
|
|
34
|
+
{ "id": "verify-jwt", "from": "api", "to": "auth", "y": 210, "label": "verify JWT", "variant": "security" },
|
|
35
|
+
{ "id": "auth-claims", "from": "auth", "to": "api", "y": 238, "label": "claims ok", "variant": "return" },
|
|
36
|
+
{ "id": "cache-read", "from": "api", "to": "redis", "y": 270, "label": "read cache", "variant": "default" },
|
|
37
|
+
{ "id": "cache-miss", "from": "redis", "to": "api", "y": 298, "label": "miss", "variant": "return" },
|
|
38
|
+
{ "id": "profile-query", "from": "api", "to": "db", "y": 330, "label": "query profile + metrics", "variant": "emphasis" },
|
|
39
|
+
{ "id": "profile-rows", "from": "db", "to": "api", "y": 358, "label": "rows", "variant": "return" },
|
|
40
|
+
{ "id": "cache-write", "from": "api", "to": "redis", "y": 390, "label": "set cache", "variant": "dashed" },
|
|
41
|
+
{ "id": "trace-emit", "from": "api", "to": "trace", "y": 418, "label": "emit trace", "variant": "dashed" },
|
|
42
|
+
{ "id": "dashboard-response", "from": "api", "to": "web", "y": 443, "label": "200 JSON", "variant": "return" },
|
|
43
|
+
{ "id": "page-render", "from": "web", "to": "user", "y": 468, "label": "render", "variant": "return" }
|
|
44
|
+
],
|
|
45
|
+
"activations": [
|
|
46
|
+
{ "participant": "web", "from": 180, "to": 474, "type": "frontend" },
|
|
47
|
+
{ "participant": "api", "from": 185, "to": 450, "type": "backend" },
|
|
48
|
+
{ "participant": "auth", "from": 205, "to": 244, "type": "security" },
|
|
49
|
+
{ "participant": "redis", "from": 265, "to": 304, "type": "database" },
|
|
50
|
+
{ "participant": "db", "from": 325, "to": 364, "type": "database" },
|
|
51
|
+
{ "participant": "trace", "from": 413, "to": 449, "type": "messagebus" }
|
|
52
|
+
],
|
|
53
|
+
"cards": [
|
|
54
|
+
{
|
|
55
|
+
"dot": "emerald",
|
|
56
|
+
"title": "Happy Path",
|
|
57
|
+
"items": [
|
|
58
|
+
"The main request is Web App -> API -> data source -> response",
|
|
59
|
+
"Return messages are quieter than forward calls",
|
|
60
|
+
"Activation bars make ownership duration visible"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"dot": "rose",
|
|
65
|
+
"title": "Policy + Fallback",
|
|
66
|
+
"items": [
|
|
67
|
+
"JWT verification is colored as a security interaction",
|
|
68
|
+
"Cache miss is visible without overpowering the main path",
|
|
69
|
+
"Database access only appears after cache fallback"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"dot": "orange",
|
|
74
|
+
"title": "Async Trace",
|
|
75
|
+
"items": [
|
|
76
|
+
"Trace emission is dashed and secondary",
|
|
77
|
+
"It does not block the response path",
|
|
78
|
+
"The diagram separates user-facing latency from observability"
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "architecture",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Checkout Platform — Baseline",
|
|
6
|
+
"visual_preset": "signal-flow"
|
|
7
|
+
},
|
|
8
|
+
"components": [
|
|
9
|
+
{ "id": "buyers", "type": "external", "label": "Buyers", "sublabel": "Web + mobile", "pos": [40, 250], "size": [120, 60] },
|
|
10
|
+
{ "id": "edge", "type": "cloud", "label": "Edge Gateway", "sublabel": "TLS + routing", "pos": [220, 250], "size": [130, 60] },
|
|
11
|
+
{ "id": "checkout", "type": "backend", "label": "Checkout API", "sublabel": "v1 service", "pos": [430, 250], "size": [130, 60] },
|
|
12
|
+
{ "id": "cache", "type": "database", "label": "Session Cache", "sublabel": "Redis", "pos": [430, 100], "size": [130, 60] },
|
|
13
|
+
{ "id": "orders", "type": "database", "label": "Orders", "sublabel": "PostgreSQL", "pos": [640, 250], "size": [130, 60] },
|
|
14
|
+
{ "id": "queue", "type": "messagebus", "label": "Order Events", "sublabel": "durable queue", "pos": [430, 400], "size": [130, 60] },
|
|
15
|
+
{ "id": "worker", "type": "backend", "label": "Fulfilment", "sublabel": "async worker", "pos": [640, 400], "size": [130, 60] },
|
|
16
|
+
{ "id": "payments", "type": "external", "label": "Payment Rail", "sublabel": "external", "pos": [850, 250], "size": [130, 60] }
|
|
17
|
+
],
|
|
18
|
+
"boundaries": [
|
|
19
|
+
{ "kind": "region", "label": "Production region", "wraps": ["edge", "checkout", "cache", "orders", "queue", "worker"] },
|
|
20
|
+
{ "kind": "security-group", "label": "Checkout trust zone", "wraps": ["checkout", "orders"] }
|
|
21
|
+
],
|
|
22
|
+
"connections": [
|
|
23
|
+
{ "id": "buyer-request", "from": "buyers", "to": "edge", "label": "HTTPS", "variant": "emphasis" },
|
|
24
|
+
{ "id": "edge-checkout", "from": "edge", "to": "checkout" },
|
|
25
|
+
{ "id": "session-read", "from": "checkout", "to": "cache", "label": "session", "fromSide": "top", "toSide": "bottom", "labelDy": -66 },
|
|
26
|
+
{ "id": "persist-order", "from": "checkout", "to": "orders", "label": "SQL" },
|
|
27
|
+
{ "id": "publish-order", "from": "checkout", "to": "queue", "label": "accepted", "variant": "dashed", "fromSide": "bottom", "toSide": "top", "labelDy": 66 },
|
|
28
|
+
{ "id": "consume-order", "from": "queue", "to": "worker" },
|
|
29
|
+
{ "id": "authorize-payment", "from": "orders", "to": "payments", "label": "authorize", "variant": "security" }
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "architecture",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Checkout Platform — Fraud Gate",
|
|
6
|
+
"visual_preset": "signal-flow"
|
|
7
|
+
},
|
|
8
|
+
"components": [
|
|
9
|
+
{ "id": "buyers", "type": "external", "label": "Buyers", "sublabel": "Web + mobile", "pos": [40, 250], "size": [120, 60] },
|
|
10
|
+
{ "id": "edge", "type": "cloud", "label": "Edge Gateway", "sublabel": "TLS + routing", "pos": [220, 250], "size": [130, 60] },
|
|
11
|
+
{ "id": "checkout", "type": "backend", "label": "Checkout API", "sublabel": "v2 idempotent", "pos": [430, 250], "size": [130, 60] },
|
|
12
|
+
{ "id": "fraud", "type": "security", "label": "Fraud Gate", "sublabel": "policy scoring", "pos": [640, 100], "size": [130, 60], "tag": "new owner" },
|
|
13
|
+
{ "id": "orders", "type": "database", "label": "Orders", "sublabel": "PostgreSQL", "pos": [640, 250], "size": [130, 60] },
|
|
14
|
+
{ "id": "queue", "type": "messagebus", "label": "Order Events", "sublabel": "durable queue", "pos": [430, 420], "size": [130, 60] },
|
|
15
|
+
{ "id": "worker", "type": "backend", "label": "Fulfilment", "sublabel": "async worker", "pos": [640, 400], "size": [130, 60] },
|
|
16
|
+
{ "id": "payments", "type": "external", "label": "Payment Rail", "sublabel": "external", "pos": [850, 250], "size": [130, 60] }
|
|
17
|
+
],
|
|
18
|
+
"boundaries": [
|
|
19
|
+
{ "kind": "region", "label": "Production region", "wraps": ["edge", "checkout", "fraud", "orders", "queue", "worker"] },
|
|
20
|
+
{ "kind": "security-group", "label": "Checkout trust zone", "wraps": ["checkout", "fraud", "orders"] }
|
|
21
|
+
],
|
|
22
|
+
"connections": [
|
|
23
|
+
{ "id": "buyer-request", "from": "buyers", "to": "edge", "label": "HTTPS", "variant": "emphasis" },
|
|
24
|
+
{ "id": "edge-checkout", "from": "edge", "to": "checkout" },
|
|
25
|
+
{ "id": "fraud-check", "from": "checkout", "to": "fraud", "label": "screen", "variant": "security", "fromSide": "top", "toSide": "bottom", "labelDy": -66 },
|
|
26
|
+
{ "id": "persist-order", "from": "checkout", "to": "orders", "label": "SQL tx" },
|
|
27
|
+
{ "id": "publish-order", "from": "checkout", "to": "queue", "label": "accepted", "variant": "dashed", "fromSide": "bottom", "toSide": "top", "labelDy": 76 },
|
|
28
|
+
{ "id": "consume-order", "from": "queue", "to": "worker" },
|
|
29
|
+
{ "id": "authorize-payment", "from": "fraud", "to": "payments", "label": "authorize", "variant": "security", "fromSide": "right", "toSide": "top", "via": [[820, 130], [915, 130]] }
|
|
30
|
+
]
|
|
31
|
+
}
|