0.3.0: .archify files are YAML and open straight into the diagram

- .archify content is YAML (JSON still accepted); converted to JSON for the renderer
- Archify Diagram custom editor is the default for *.archify; Show Source opens the YAML beside it
- YAML syntax errors and validation problems mapped to YAML lines
- yamlValidation for schema completion with redhat.vscode-yaml
- scripts/to-yaml.mjs converts existing .archify files
This commit is contained in:
2026-09-30 15:21:55 +03:00
parent 7c2624c465
commit d2f52d43ac
18 changed files with 744 additions and 250 deletions
+165 -77
View File
@@ -1,77 +1,165 @@
{
"schema_version": 1,
"diagram_type": "sequence",
"meta": {
"title": "Cache Miss Request Sequence",
"output": "examples/sequence-cache-miss-request.html",
"viewBox": [1080, 580],
"column_fit": "spread",
"animation": "trace",
"quality_profile": "showcase"
},
"participants": [
{ "id": "user", "type": "external", "label": "User", "sublabel": "browser session" },
{ "id": "web", "type": "frontend", "label": "Web App", "sublabel": "React UI" },
{ "id": "api", "type": "backend", "label": "API", "sublabel": "request handler" },
{ "id": "auth", "type": "security", "label": "Auth", "sublabel": "JWT verify" },
{ "id": "redis", "type": "database", "label": "Redis", "sublabel": "cache" },
{ "id": "db", "type": "database", "label": "Postgres", "sublabel": "source of truth" },
{ "id": "trace", "type": "messagebus", "label": "Trace", "sublabel": "async event" }
],
"segments": [
{ "from": 150, "to": 250, "label": "Request" },
{ "from": 260, "to": 370, "label": "Fallback" },
{ "from": 380, "to": 480, "label": "Response + trace" }
],
"messages": [
{ "id": "open-page", "from": "user", "to": "web", "y": 160, "label": "open page", "variant": "default" },
{ "id": "dashboard-request", "from": "web", "to": "api", "y": 185, "label": "GET /dashboard", "variant": "emphasis" },
{ "id": "verify-jwt", "from": "api", "to": "auth", "y": 210, "label": "verify JWT", "variant": "security" },
{ "id": "auth-claims", "from": "auth", "to": "api", "y": 238, "label": "claims ok", "variant": "return" },
{ "id": "cache-read", "from": "api", "to": "redis", "y": 270, "label": "read cache", "variant": "default" },
{ "id": "cache-miss", "from": "redis", "to": "api", "y": 298, "label": "miss", "variant": "return" },
{ "id": "profile-query", "from": "api", "to": "db", "y": 330, "label": "query profile + metrics", "variant": "emphasis" },
{ "id": "profile-rows", "from": "db", "to": "api", "y": 358, "label": "rows", "variant": "return" },
{ "id": "cache-write", "from": "api", "to": "redis", "y": 390, "label": "set cache", "variant": "dashed" },
{ "id": "trace-emit", "from": "api", "to": "trace", "y": 418, "label": "emit trace", "variant": "dashed" },
{ "id": "dashboard-response", "from": "api", "to": "web", "y": 443, "label": "200 JSON", "variant": "return" },
{ "id": "page-render", "from": "web", "to": "user", "y": 468, "label": "render", "variant": "return" }
],
"activations": [
{ "participant": "web", "from": 180, "to": 474, "type": "frontend" },
{ "participant": "api", "from": 185, "to": 450, "type": "backend" },
{ "participant": "auth", "from": 205, "to": 244, "type": "security" },
{ "participant": "redis", "from": 265, "to": 304, "type": "database" },
{ "participant": "db", "from": 325, "to": 364, "type": "database" },
{ "participant": "trace", "from": 413, "to": 449, "type": "messagebus" }
],
"cards": [
{
"dot": "emerald",
"title": "Happy Path",
"items": [
"The main request is Web App -> API -> data source -> response",
"Return messages are quieter than forward calls",
"Activation bars make ownership duration visible"
]
},
{
"dot": "rose",
"title": "Policy + Fallback",
"items": [
"JWT verification is colored as a security interaction",
"Cache miss is visible without overpowering the main path",
"Database access only appears after cache fallback"
]
},
{
"dot": "orange",
"title": "Async Trace",
"items": [
"Trace emission is dashed and secondary",
"It does not block the response path",
"The diagram separates user-facing latency from observability"
]
}
]
}
schema_version: 1
diagram_type: sequence
meta:
title: Cache Miss Request Sequence
output: examples/sequence-cache-miss-request.html
viewBox: [1080, 580]
column_fit: spread
animation: trace
quality_profile: showcase
participants:
- id: user
type: external
label: User
sublabel: browser session
- id: web
type: frontend
label: Web App
sublabel: React UI
- id: api
type: backend
label: API
sublabel: request handler
- id: auth
type: security
label: Auth
sublabel: JWT verify
- id: redis
type: database
label: Redis
sublabel: cache
- id: db
type: database
label: Postgres
sublabel: source of truth
- id: trace
type: messagebus
label: Trace
sublabel: async event
segments:
- from: 150
to: 250
label: Request
- from: 260
to: 370
label: Fallback
- from: 380
to: 480
label: Response + trace
messages:
- id: open-page
from: user
to: web
y: 160
label: open page
variant: default
- id: dashboard-request
from: web
to: api
y: 185
label: GET /dashboard
variant: emphasis
- id: verify-jwt
from: api
to: auth
y: 210
label: verify JWT
variant: security
- id: auth-claims
from: auth
to: api
y: 238
label: claims ok
variant: return
- id: cache-read
from: api
to: redis
y: 270
label: read cache
variant: default
- id: cache-miss
from: redis
to: api
y: 298
label: miss
variant: return
- id: profile-query
from: api
to: db
y: 330
label: query profile + metrics
variant: emphasis
- id: profile-rows
from: db
to: api
y: 358
label: rows
variant: return
- id: cache-write
from: api
to: redis
y: 390
label: set cache
variant: dashed
- id: trace-emit
from: api
to: trace
y: 418
label: emit trace
variant: dashed
- id: dashboard-response
from: api
to: web
y: 443
label: 200 JSON
variant: return
- id: page-render
from: web
to: user
y: 468
label: render
variant: return
activations:
- participant: web
from: 180
to: 474
type: frontend
- participant: api
from: 185
to: 450
type: backend
- participant: auth
from: 205
to: 244
type: security
- participant: redis
from: 265
to: 304
type: database
- participant: db
from: 325
to: 364
type: database
- participant: trace
from: 413
to: 449
type: messagebus
cards:
- dot: emerald
title: Happy Path
items:
- The main request is Web App -> API -> data source -> response
- Return messages are quieter than forward calls
- Activation bars make ownership duration visible
- dot: rose
title: Policy + Fallback
items:
- JWT verification is colored as a security interaction
- Cache miss is visible without overpowering the main path
- Database access only appears after cache fallback
- dot: orange
title: Async Trace
items:
- Trace emission is dashed and secondary
- It does not block the response path
- The diagram separates user-facing latency from observability