arkaos 4.32.0 → 4.34.0
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.
- package/README.md +1 -1
- package/THE-ARKAOS-GUIDE.md +1 -1
- package/VERSION +1 -1
- package/arka/SKILL.md +1 -1
- package/arka/skills/forge/references/workflows.md +10 -0
- package/config/claude-agents/architect.md +1 -1
- package/config/claude-agents/backend-dev.md +1 -1
- package/config/claude-agents/devops-eng.md +1 -1
- package/config/claude-agents/frontend-dev.md +1 -1
- package/config/claude-agents/ops-lead.md +1 -1
- package/config/claude-agents/pm-director.md +1 -1
- package/config/claude-agents/strategy-director.md +1 -1
- package/config/hooks/session-start.sh +1 -1
- package/config/skills-curated.yaml +2 -2
- package/config/skills-provenance.yaml +7 -0
- package/config/statusline.sh +6 -1
- package/core/hooks/session_start.py +69 -28
- package/departments/dev/agents/architect.yaml +1 -0
- package/departments/dev/agents/backend-dev.yaml +1 -0
- package/departments/dev/agents/devops-eng.yaml +1 -0
- package/departments/dev/agents/frontend-dev.yaml +1 -0
- package/departments/dev/agents/tech-lead.yaml +1 -0
- package/departments/dev/skills/diagram/SKILL.md +175 -0
- package/departments/dev/skills/diagram/examples/archify-repo-grid.architecture.json +57 -0
- package/departments/dev/skills/diagram/vendor/LICENSE +22 -0
- package/departments/dev/skills/diagram/vendor/SKILL.md +367 -0
- package/departments/dev/skills/diagram/vendor/assets/template.html +11470 -0
- package/departments/dev/skills/diagram/vendor/bin/archify.mjs +600 -0
- package/departments/dev/skills/diagram/vendor/bin/open-artifact.mjs +67 -0
- package/departments/dev/skills/diagram/vendor/examples/agent-run.lifecycle.json +71 -0
- package/departments/dev/skills/diagram/vendor/examples/agent-tool-call.workflow.json +111 -0
- package/departments/dev/skills/diagram/vendor/examples/async-job-roundtrip.sequence.json +62 -0
- package/departments/dev/skills/diagram/vendor/examples/cache-miss-request.sequence.json +82 -0
- package/departments/dev/skills/diagram/vendor/examples/deployment-release.lifecycle.json +50 -0
- package/departments/dev/skills/diagram/vendor/examples/event-stream.dataflow.json +58 -0
- package/departments/dev/skills/diagram/vendor/examples/incident-response.workflow.json +65 -0
- package/departments/dev/skills/diagram/vendor/examples/product-analytics.dataflow.json +77 -0
- package/departments/dev/skills/diagram/vendor/examples/production-deployment.architecture.json +70 -0
- package/departments/dev/skills/diagram/vendor/examples/release-delivery.workflow.json +63 -0
- package/departments/dev/skills/diagram/vendor/examples/web-app.architecture.json +47 -0
- package/departments/dev/skills/diagram/vendor/package-lock.json +80 -0
- package/departments/dev/skills/diagram/vendor/package.json +28 -0
- package/departments/dev/skills/diagram/vendor/recipes/scenarios.mjs +350 -0
- package/departments/dev/skills/diagram/vendor/renderers/architecture/grid.mjs +62 -0
- package/departments/dev/skills/diagram/vendor/renderers/architecture/render-architecture.mjs +490 -0
- package/departments/dev/skills/diagram/vendor/renderers/dataflow/README.md +93 -0
- package/departments/dev/skills/diagram/vendor/renderers/dataflow/render-dataflow.mjs +396 -0
- package/departments/dev/skills/diagram/vendor/renderers/lifecycle/README.md +103 -0
- package/departments/dev/skills/diagram/vendor/renderers/lifecycle/render-lifecycle.mjs +482 -0
- package/departments/dev/skills/diagram/vendor/renderers/sequence/README.md +96 -0
- package/departments/dev/skills/diagram/vendor/renderers/sequence/render-sequence.mjs +357 -0
- package/departments/dev/skills/diagram/vendor/renderers/shared/cli.mjs +176 -0
- package/departments/dev/skills/diagram/vendor/renderers/shared/generated-validators.mjs +13 -0
- package/departments/dev/skills/diagram/vendor/renderers/shared/geometry.mjs +992 -0
- package/departments/dev/skills/diagram/vendor/renderers/shared/layout-report.mjs +40 -0
- package/departments/dev/skills/diagram/vendor/renderers/shared/utils.mjs +156 -0
- package/departments/dev/skills/diagram/vendor/renderers/shared/validator.mjs +40 -0
- package/departments/dev/skills/diagram/vendor/renderers/workflow/README.md +114 -0
- package/departments/dev/skills/diagram/vendor/renderers/workflow/render-workflow.mjs +598 -0
- package/departments/dev/skills/diagram/vendor/schemas/README.md +93 -0
- package/departments/dev/skills/diagram/vendor/schemas/architecture.schema.json +125 -0
- package/departments/dev/skills/diagram/vendor/schemas/common.schema.json +62 -0
- package/departments/dev/skills/diagram/vendor/schemas/dataflow.schema.json +240 -0
- package/departments/dev/skills/diagram/vendor/schemas/lifecycle.schema.json +260 -0
- package/departments/dev/skills/diagram/vendor/schemas/sequence.schema.json +205 -0
- package/departments/dev/skills/diagram/vendor/schemas/workflow.schema.json +351 -0
- package/departments/dev/skills/diagram/vendor/scripts/check-render-output.mjs +774 -0
- package/departments/dev/skills/diagram/vendor/scripts/generate-validators.mjs +66 -0
- package/departments/dev/skills/diagram/vendor/scripts/render-examples.mjs +26 -0
- package/departments/dev/skills/spec/SKILL.md +19 -0
- package/departments/ops/agents/ops-lead.yaml +1 -0
- package/departments/pm/agents/pm-director.yaml +1 -0
- package/departments/strategy/agents/strategy-director.yaml +1 -0
- package/harness/codex/AGENTS.md +1 -1
- package/harness/copilot/copilot-instructions.md +1 -1
- package/harness/cursor/rules/arkaos.mdc +2 -2
- package/harness/gemini/GEMINI.md +1 -1
- package/harness/opencode/AGENTS.md +1 -1
- package/harness/zed/.rules +1 -1
- package/installer/autoupdate.js +249 -0
- package/installer/cli.js +7 -0
- package/installer/core-snapshot.js +5 -1
- package/installer/doctor.js +11 -0
- package/installer/index.js +11 -0
- package/installer/update.js +11 -0
- package/knowledge/agents-registry-v2.json +9 -1
- package/knowledge/skills-manifest.json +14 -1
- package/package.json +3 -2
- package/pyproject.toml +1 -1
- package/scripts/auto-update.sh +188 -0
- package/scripts/skill_validator.py +10 -2
- package/scripts/tools/docs_stats.py +8 -2
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "dataflow",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Product Analytics Data Flow",
|
|
6
|
+
"subtitle": "Events, consent, PII isolation, warehouse sync, and downstream analytics",
|
|
7
|
+
"output": "examples/dataflow-product-analytics.html",
|
|
8
|
+
"viewBox": [1080, 760],
|
|
9
|
+
"animation": "trace",
|
|
10
|
+
"quality_profile": "showcase",
|
|
11
|
+
"views": [
|
|
12
|
+
{ "id": "collection-path", "label": "Collection path", "focus": ["web", "mobile", "edge", "stream"], "note": "Follow product events from clients into the ordered event stream." },
|
|
13
|
+
{ "id": "consent-boundary", "label": "Consent and PII", "focus": ["edge", "consent", "pii"], "note": "Isolate the policy gate and restricted identity store." },
|
|
14
|
+
{ "id": "analytics-consumers", "label": "Curated consumers", "focus": ["stream", "warehouse", "dashboard", "features", "model"], "note": "See curated facts, dashboards, and the derived feature path." }
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"stages": [
|
|
18
|
+
{ "label": "Sources" },
|
|
19
|
+
{ "label": "Ingest" },
|
|
20
|
+
{ "label": "Process" },
|
|
21
|
+
{ "label": "Store" },
|
|
22
|
+
{ "label": "Consume" }
|
|
23
|
+
],
|
|
24
|
+
"nodes": [
|
|
25
|
+
{ "id": "web", "type": "frontend", "label": "Web App", "sublabel": "browser SDK", "stage": 0, "row": 0, "tag": "events" },
|
|
26
|
+
{ "id": "mobile", "type": "frontend", "label": "Mobile", "sublabel": "iOS / Android", "stage": 0, "row": 2, "tag": "events" },
|
|
27
|
+
{ "id": "edge", "type": "cloud", "label": "Edge API", "sublabel": "collector", "stage": 1, "row": 1, "tag": "TLS" },
|
|
28
|
+
{ "id": "consent", "type": "security", "label": "Consent Gate", "sublabel": "policy filter", "stage": 2, "row": 0, "tag": "PII guard" },
|
|
29
|
+
{ "id": "stream", "type": "messagebus", "label": "Event Stream", "sublabel": "Kafka topic", "stage": 2, "row": 2, "tag": "ordered" },
|
|
30
|
+
{ "id": "pii", "type": "security", "label": "PII Vault", "sublabel": "encrypted", "stage": 3, "row": 0, "tag": "restricted" },
|
|
31
|
+
{ "id": "warehouse", "type": "database", "label": "Warehouse", "sublabel": "analytics tables", "stage": 3, "row": 2, "tag": "curated" },
|
|
32
|
+
{ "id": "features", "type": "database", "label": "Feature Store", "sublabel": "daily batch", "stage": 3, "row": 4, "tag": "derived" },
|
|
33
|
+
{ "id": "dashboard", "type": "backend", "label": "Dashboards", "sublabel": "product metrics", "stage": 4, "row": 1, "tag": "SQL" },
|
|
34
|
+
{ "id": "model", "type": "backend", "label": "ML Model", "sublabel": "ranking job", "stage": 4, "row": 4, "tag": "features" }
|
|
35
|
+
],
|
|
36
|
+
"flows": [
|
|
37
|
+
{ "id": "web-clickstream", "from": "web", "to": "edge", "label": "clickstream", "classification": "user events", "variant": "emphasis", "fromSide": "right", "toSide": "left", "via": [[205, 157], [205, 271]], "labelAt": [204, 190] },
|
|
38
|
+
{ "id": "mobile-events", "from": "mobile", "to": "edge", "label": "app events", "classification": "device events", "variant": "default", "fromSide": "right", "toSide": "left", "via": [[222, 385], [222, 271]], "labelAt": [220, 342] },
|
|
39
|
+
{ "id": "consent-enrichment", "from": "edge", "to": "consent", "label": "identity + consent", "classification": "PII touch", "variant": "security", "fromSide": "top", "toSide": "left", "via": [[315, 112], [450, 112], [450, 157]], "labelAt": [382, 100] },
|
|
40
|
+
{ "id": "accepted-events", "from": "edge", "to": "stream", "label": "accepted events", "classification": "append-only", "variant": "emphasis", "fromSide": "right", "toSide": "left", "via": [[420, 271], [420, 385]], "labelAt": [438, 324] },
|
|
41
|
+
{ "id": "identity-map", "from": "consent", "to": "pii", "label": "identity map", "classification": "encrypted PII", "variant": "security", "route": "straight", "labelAt": [638, 144] },
|
|
42
|
+
{ "id": "normalized-facts", "from": "stream", "to": "warehouse", "label": "normalized facts", "classification": "non-PII", "variant": "emphasis", "route": "straight", "labelAt": [638, 372] },
|
|
43
|
+
{ "id": "daily-aggregates", "from": "warehouse", "to": "features", "label": "daily aggregates", "classification": "batch", "variant": "dashed", "fromSide": "bottom", "toSide": "top", "route": "straight", "labelAt": [745, 496] },
|
|
44
|
+
{ "id": "metrics-query", "from": "warehouse", "to": "dashboard", "label": "metrics SQL", "classification": "read-only", "variant": "default", "fromSide": "right", "toSide": "left", "via": [[852, 385], [852, 271]], "labelAt": [830, 326] },
|
|
45
|
+
{ "id": "feature-vectors", "from": "features", "to": "model", "label": "feature vectors", "classification": "derived", "variant": "dashed", "route": "straight", "labelAt": [852, 598] },
|
|
46
|
+
{ "id": "restricted-join", "from": "pii", "to": "dashboard", "label": "restricted join", "classification": "approved only", "variant": "security", "fromSide": "right", "toSide": "top", "via": [[878, 157], [878, 212], [960, 212]], "labelAt": [880, 198] }
|
|
47
|
+
],
|
|
48
|
+
"cards": [
|
|
49
|
+
{
|
|
50
|
+
"dot": "emerald",
|
|
51
|
+
"title": "Primary Data Path",
|
|
52
|
+
"items": [
|
|
53
|
+
"Events move left to right through source, ingest, process, store, and consume stages",
|
|
54
|
+
"The hot path stays visually clear even with secondary batch flows",
|
|
55
|
+
"Labels name data assets instead of generic API verbs"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"dot": "rose",
|
|
60
|
+
"title": "Sensitive Boundary",
|
|
61
|
+
"items": [
|
|
62
|
+
"Consent and PII paths are styled as security flows",
|
|
63
|
+
"PII lands in a restricted vault, separate from the analytics warehouse",
|
|
64
|
+
"Restricted joins are visible without implying default access"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"dot": "orange",
|
|
69
|
+
"title": "Derived Consumers",
|
|
70
|
+
"items": [
|
|
71
|
+
"Dashboards read curated facts from the warehouse",
|
|
72
|
+
"Feature vectors are derived by batch from analytics tables",
|
|
73
|
+
"Consumption paths stay distinct from collection and consent handling"
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
package/departments/dev/skills/diagram/vendor/examples/production-deployment.architecture.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "architecture",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Production Deployment Ownership",
|
|
6
|
+
"subtitle": "Regions, network boundaries, workload owners, state, and named crossings",
|
|
7
|
+
"output": "examples/production-deployment.html",
|
|
8
|
+
"visual_preset": "blueprint",
|
|
9
|
+
"animation": "trace",
|
|
10
|
+
"quality_profile": "showcase",
|
|
11
|
+
"views": [
|
|
12
|
+
{
|
|
13
|
+
"id": "request-boundary",
|
|
14
|
+
"label": "Request crosses the edge",
|
|
15
|
+
"focus": ["clients", "edge", "gateway", "api_a", "api_b"],
|
|
16
|
+
"note": "Follow public traffic into the private application network."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "state-ownership",
|
|
20
|
+
"label": "State and ownership",
|
|
21
|
+
"focus": ["api_a", "api_b", "redis", "postgres", "replica"],
|
|
22
|
+
"note": "Separate stateless platform workloads from data-team-owned state."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "async-operations",
|
|
26
|
+
"label": "Async and operations",
|
|
27
|
+
"focus": ["api_b", "events", "worker", "audit", "observability"],
|
|
28
|
+
"note": "See the asynchronous work and the evidence it emits."
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"components": [
|
|
33
|
+
{ "id": "clients", "type": "external", "label": "Customers", "sublabel": "web + mobile", "pos": [38, 300], "size": [122, 60] },
|
|
34
|
+
{ "id": "edge", "type": "cloud", "label": "Global Edge", "sublabel": "CDN + WAF", "pos": [230, 300], "size": [126, 60], "tag": "edge team" },
|
|
35
|
+
{ "id": "gateway", "type": "security", "label": "API Gateway", "sublabel": "public :443", "pos": [430, 300], "size": [128, 60], "tag": "platform" },
|
|
36
|
+
{ "id": "api_a", "type": "backend", "label": "API Pods / AZ-a", "sublabel": "private subnet", "pos": [630, 195], "size": [136, 62], "tag": "app team" },
|
|
37
|
+
{ "id": "api_b", "type": "backend", "label": "API Pods / AZ-b", "sublabel": "private subnet", "pos": [630, 405], "size": [136, 62], "tag": "app team" },
|
|
38
|
+
{ "id": "redis", "type": "database", "label": "Redis", "sublabel": "multi-AZ cache", "pos": [840, 195], "size": [126, 62], "tag": "platform" },
|
|
39
|
+
{ "id": "postgres", "type": "database", "label": "PostgreSQL", "sublabel": "primary / encrypted", "pos": [840, 405], "size": [126, 62], "tag": "data team" },
|
|
40
|
+
{ "id": "events", "type": "messagebus", "label": "Event Bus", "sublabel": "orders.v1", "pos": [1040, 300], "size": [126, 60], "tag": "platform" },
|
|
41
|
+
{ "id": "worker", "type": "backend", "label": "Workers", "sublabel": "private workload", "pos": [1240, 300], "size": [126, 60], "tag": "app team" },
|
|
42
|
+
{ "id": "replica", "type": "database", "label": "DR Replica", "sublabel": "eu-west-1", "pos": [1040, 610], "size": [126, 62], "tag": "data team" },
|
|
43
|
+
{ "id": "audit", "type": "cloud", "label": "Audit Archive", "sublabel": "immutable objects", "pos": [1240, 465], "size": [126, 62], "tag": "security" },
|
|
44
|
+
{ "id": "observability", "type": "external", "label": "Observability", "sublabel": "metrics + traces", "pos": [1240, 85], "size": [126, 62], "tag": "SRE" }
|
|
45
|
+
],
|
|
46
|
+
"boundaries": [
|
|
47
|
+
{ "kind": "region", "label": "AWS us-east-1 / production", "wraps": ["edge", "gateway", "api_a", "api_b", "redis", "postgres", "events", "worker", "audit"] },
|
|
48
|
+
{ "kind": "security-group", "label": "private application network", "wraps": ["api_a", "api_b", "redis", "postgres", "events", "worker"] },
|
|
49
|
+
{ "kind": "region", "label": "AWS eu-west-1 / disaster recovery", "wraps": ["replica"] }
|
|
50
|
+
],
|
|
51
|
+
"connections": [
|
|
52
|
+
{ "from": "clients", "to": "edge", "label": "HTTPS", "variant": "emphasis" },
|
|
53
|
+
{ "from": "edge", "to": "gateway", "label": "mTLS", "variant": "security" },
|
|
54
|
+
{ "from": "gateway", "to": "api_a", "variant": "emphasis", "route": "orthogonal-h" },
|
|
55
|
+
{ "from": "gateway", "to": "api_b", "variant": "emphasis", "route": "orthogonal-h" },
|
|
56
|
+
{ "from": "api_a", "to": "redis", "label": "cache", "route": "straight" },
|
|
57
|
+
{ "from": "api_b", "to": "postgres", "label": "SQL", "route": "straight" },
|
|
58
|
+
{ "from": "api_a", "to": "events", "label": "publish", "variant": "dashed", "fromSide": "top", "toSide": "top", "via": [[698, 170], [1103, 170]] },
|
|
59
|
+
{ "from": "api_b", "to": "events", "variant": "dashed", "fromSide": "top", "toSide": "bottom", "via": [[698, 380], [1103, 380]] },
|
|
60
|
+
{ "from": "events", "to": "worker", "variant": "emphasis" },
|
|
61
|
+
{ "from": "postgres", "to": "replica", "label": "cross-region WAL", "variant": "security", "route": "orthogonal-v", "labelAt": [1003, 529] },
|
|
62
|
+
{ "from": "worker", "to": "audit", "label": "evidence", "variant": "dashed", "fromSide": "bottom", "toSide": "top", "labelDy": 58 },
|
|
63
|
+
{ "from": "worker", "to": "observability", "label": "OTLP", "variant": "dashed", "route": "orthogonal-v" }
|
|
64
|
+
],
|
|
65
|
+
"cards": [
|
|
66
|
+
{ "dot": "cyan", "title": "Runtime Ownership", "items": ["Platform owns the edge, gateway, cache, and event bus", "Application teams own API pods and workers", "Data owns primary and disaster-recovery state"] },
|
|
67
|
+
{ "dot": "rose", "title": "Named Crossings", "items": ["Public HTTPS terminates at the managed edge", "mTLS crosses into the application network", "Cross-region WAL is explicit and encrypted"] },
|
|
68
|
+
{ "dot": "emerald", "title": "Operational Evidence", "items": ["Workers emit traces to SRE-owned observability", "Audit evidence lands in immutable storage", "Unknown placement should remain marked, never invented"] }
|
|
69
|
+
]
|
|
70
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "workflow",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Release Delivery Workflow",
|
|
6
|
+
"subtitle": "Commit, blocking checks, approval, production verification, and rollback",
|
|
7
|
+
"output": "examples/release-delivery.html",
|
|
8
|
+
"animation": "trace",
|
|
9
|
+
"quality_profile": "showcase",
|
|
10
|
+
"views": [
|
|
11
|
+
{ "id": "commit-to-checks", "label": "Commit to green build", "focus": ["commit", "pull_request", "build", "checks"], "note": "Follow the change through reproducible build and blocking quality gates." },
|
|
12
|
+
{ "id": "approval-to-production", "label": "Approve and promote", "focus": ["checks", "approval", "deploy", "verify_prod", "announce"], "note": "See who authorizes production and how success is verified." },
|
|
13
|
+
{ "id": "rollback-path", "label": "Failure and rollback", "focus": ["checks", "failed", "verify_prod", "rollback", "deploy"], "note": "Isolate the two places where delivery stops or reverses safely." }
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"lanes": [
|
|
17
|
+
{ "id": "dev", "label": "Developer" },
|
|
18
|
+
{ "id": "ci", "label": "Continuous Integration" },
|
|
19
|
+
{ "id": "approval", "label": "Release Governance" },
|
|
20
|
+
{ "id": "environment", "label": "Production Environment" },
|
|
21
|
+
{ "id": "communication", "label": "Release Communication" },
|
|
22
|
+
{ "id": "exceptions", "label": "Failure + Rollback", "variant": "exception" }
|
|
23
|
+
],
|
|
24
|
+
"phases": [
|
|
25
|
+
{ "id": "change", "label": "Change", "fromCol": 0, "toCol": 1 },
|
|
26
|
+
{ "id": "verify", "label": "Build + verify", "fromCol": 2, "toCol": 3, "variant": "emphasis" },
|
|
27
|
+
{ "id": "promote", "label": "Promote + observe", "fromCol": 4, "toCol": 5, "variant": "dashed" }
|
|
28
|
+
],
|
|
29
|
+
"groups": [
|
|
30
|
+
{ "id": "blocking_checks", "label": "Blocking checks", "lane": "ci", "fromCol": 2, "toCol": 3, "variant": "emphasis" },
|
|
31
|
+
{ "id": "rollback_work", "label": "Recovery path", "lane": "exceptions", "fromCol": 3, "toCol": 5, "variant": "security" }
|
|
32
|
+
],
|
|
33
|
+
"mainPath": ["commit", "pull_request", "build", "checks", "approval", "deploy", "verify_prod", "announce"],
|
|
34
|
+
"nodes": [
|
|
35
|
+
{ "id": "commit", "lane": "dev", "col": 0, "type": "frontend", "label": "Commit", "sublabel": "signed change" },
|
|
36
|
+
{ "id": "pull_request", "lane": "dev", "col": 1, "type": "frontend", "label": "Pull Request", "sublabel": "reviewed diff" },
|
|
37
|
+
{ "id": "build", "lane": "ci", "col": 2, "type": "backend", "label": "Build", "sublabel": "locked inputs", "tag": "reproducible" },
|
|
38
|
+
{ "id": "checks", "lane": "ci", "col": 3, "type": "security", "label": "Quality Gates", "sublabel": "test + scan", "tag": "blocking" },
|
|
39
|
+
{ "id": "approval", "lane": "approval", "col": 4, "type": "security", "label": "Approve", "sublabel": "release owner", "tag": "human gate" },
|
|
40
|
+
{ "id": "deploy", "lane": "environment", "col": 4, "type": "cloud", "label": "Deploy", "sublabel": "canary 10%", "tag": "production" },
|
|
41
|
+
{ "id": "verify_prod", "lane": "environment", "col": 5, "type": "backend", "label": "Verify", "sublabel": "smoke + SLO" },
|
|
42
|
+
{ "id": "announce", "lane": "communication", "col": 5, "type": "external", "label": "Announce", "sublabel": "status + notes" },
|
|
43
|
+
{ "id": "failed", "lane": "exceptions", "col": 2, "type": "security", "label": "Stop Release", "sublabel": "gate failed" },
|
|
44
|
+
{ "id": "rollback", "lane": "exceptions", "col": 4, "width": 64, "type": "messagebus", "label": "Rollback", "sublabel": "last good image", "tag": "owner: on-call" }
|
|
45
|
+
],
|
|
46
|
+
"edges": [
|
|
47
|
+
{ "from": "commit", "to": "pull_request" },
|
|
48
|
+
{ "from": "pull_request", "to": "build", "label": "merge", "variant": "emphasis", "route": "drop", "fromSide": "bottom", "toSide": "top" },
|
|
49
|
+
{ "from": "build", "to": "checks" },
|
|
50
|
+
{ "from": "checks", "to": "approval", "variant": "emphasis", "route": "drop", "fromSide": "bottom", "toSide": "top" },
|
|
51
|
+
{ "from": "approval", "to": "deploy", "variant": "security", "route": "drop", "fromSide": "bottom", "toSide": "top" },
|
|
52
|
+
{ "from": "deploy", "to": "verify_prod" },
|
|
53
|
+
{ "from": "verify_prod", "to": "announce", "label": "healthy", "variant": "emphasis", "route": "drop", "fromSide": "bottom", "toSide": "top" },
|
|
54
|
+
{ "from": "checks", "to": "failed", "label": "red", "variant": "security", "role": "error", "route": "drop", "fromSide": "bottom", "toSide": "top" },
|
|
55
|
+
{ "from": "verify_prod", "to": "rollback", "variant": "security", "role": "error", "route": "outside-right", "fromSide": "right", "toSide": "right" },
|
|
56
|
+
{ "from": "rollback", "to": "deploy", "label": "restore", "variant": "dashed", "role": "return", "route": "return-left", "fromSide": "left", "toSide": "left" }
|
|
57
|
+
],
|
|
58
|
+
"cards": [
|
|
59
|
+
{ "dot": "emerald", "title": "One Happy Path", "items": ["Every change is reviewed before a reproducible build", "Blocking checks must be green before human approval", "Production is complete only after smoke and SLO verification"] },
|
|
60
|
+
{ "dot": "rose", "title": "Stop Conditions", "items": ["Test or security failure stops promotion", "Production health can reverse a release", "Rollback ownership is visible before an incident"] },
|
|
61
|
+
{ "dot": "cyan", "title": "Release Evidence", "items": ["Approval, immutable image, and check results are retained", "The release announcement follows verification", "The main path remains readable without hiding failure"] }
|
|
62
|
+
]
|
|
63
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"diagram_type": "architecture",
|
|
4
|
+
"meta": {
|
|
5
|
+
"title": "Sample Web App",
|
|
6
|
+
"subtitle": "Classic 3-tier SaaS on AWS — rendered by Archify",
|
|
7
|
+
"output": "web-app-rendered.html",
|
|
8
|
+
"quality_profile": "showcase",
|
|
9
|
+
"views": [
|
|
10
|
+
{ "id": "request-path", "label": "Primary request path", "focus": ["users", "cdn", "lb", "api", "db"], "note": "Follow the primary customer request from the edge to durable state." },
|
|
11
|
+
{ "id": "identity-and-cache", "label": "Identity and cache", "focus": ["auth", "api", "cache"], "note": "Isolate authentication and the read-through cache beside the request path." },
|
|
12
|
+
{ "id": "async-work", "label": "Static and async work", "focus": ["cdn", "s3", "api", "queue", "worker"], "note": "See the two secondary paths without adding noise to the main request." }
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
"components": [
|
|
16
|
+
{ "id": "users", "type": "external", "label": "Users", "sublabel": "Browser / Mobile", "pos": [40, 300], "size": [120, 60] },
|
|
17
|
+
{ "id": "auth", "type": "security", "label": "Auth Provider", "sublabel": "OAuth 2.0", "pos": [40, 110], "size": [120, 64], "tag": "JWT + PKCE" },
|
|
18
|
+
{ "id": "cdn", "type": "cloud", "label": "CloudFront", "sublabel": "CDN", "pos": [250, 300], "size": [130, 60] },
|
|
19
|
+
{ "id": "lb", "type": "cloud", "label": "Load Balancer", "sublabel": "HTTPS :443", "pos": [460, 300], "size": [130, 60] },
|
|
20
|
+
{ "id": "api", "type": "backend", "label": "API Server", "sublabel": "FastAPI :8000", "pos": [670, 300], "size": [130, 60] },
|
|
21
|
+
{ "id": "cache", "type": "database", "label": "Redis", "sublabel": "cache :6379", "pos": [670, 150], "size": [130, 60] },
|
|
22
|
+
{ "id": "db", "type": "database", "label": "PostgreSQL", "sublabel": "primary :5432", "pos": [880, 300], "size": [130, 60] },
|
|
23
|
+
{ "id": "s3", "type": "cloud", "label": "S3", "sublabel": "static assets", "pos": [250, 440], "size": [130, 60], "tag": "OAI protected" },
|
|
24
|
+
{ "id": "queue", "type": "messagebus", "label": "SQS", "sublabel": "job queue", "pos": [670, 440], "size": [130, 60] },
|
|
25
|
+
{ "id": "worker", "type": "backend", "label": "Worker", "sublabel": "async jobs", "pos": [880, 440], "size": [130, 60] }
|
|
26
|
+
],
|
|
27
|
+
"boundaries": [
|
|
28
|
+
{ "kind": "region", "label": "AWS Region: us-west-2", "wraps": ["cdn", "lb", "api", "cache", "db", "s3", "queue", "worker"] },
|
|
29
|
+
{ "kind": "security-group", "label": "sg-api :443/:8000", "wraps": ["lb", "api"] }
|
|
30
|
+
],
|
|
31
|
+
"connections": [
|
|
32
|
+
{ "id": "users-to-cdn", "from": "users", "to": "cdn", "label": "HTTPS", "variant": "emphasis" },
|
|
33
|
+
{ "id": "jwt-verification", "from": "auth", "to": "api", "label": "verify JWT", "variant": "security", "fromSide": "right", "toSide": "top", "via": [[620, 142], [620, 246], [735, 246]] },
|
|
34
|
+
{ "id": "cdn-to-lb", "from": "cdn", "to": "lb" },
|
|
35
|
+
{ "id": "static-assets", "from": "cdn", "to": "s3", "label": "static", "variant": "dashed", "fromSide": "bottom", "toSide": "top", "labelDy": 58 },
|
|
36
|
+
{ "id": "lb-to-api", "from": "lb", "to": "api" },
|
|
37
|
+
{ "id": "cache-read-through", "from": "api", "to": "cache", "label": "read-through", "fromSide": "top", "toSide": "bottom", "labelDy": -68 },
|
|
38
|
+
{ "id": "api-sql", "from": "api", "to": "db", "label": "SQL" },
|
|
39
|
+
{ "id": "enqueue-job", "from": "api", "to": "queue", "label": "enqueue", "variant": "dashed", "fromSide": "bottom", "toSide": "top", "labelDy": 58 },
|
|
40
|
+
{ "id": "queue-to-worker", "from": "queue", "to": "worker" }
|
|
41
|
+
],
|
|
42
|
+
"cards": [
|
|
43
|
+
{ "dot": "cyan", "title": "Edge", "items": ["CloudFront CDN fronts all traffic", "S3 serves static assets via OAI"] },
|
|
44
|
+
{ "dot": "emerald", "title": "Application", "items": ["FastAPI behind an HTTPS load balancer", "Redis read-through cache", "Async work drained from SQS by a worker"] },
|
|
45
|
+
{ "dot": "rose", "title": "Security", "items": ["OAuth 2.0 with JWT + PKCE", "API + LB isolated in a security group"] }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "archify",
|
|
3
|
+
"version": "2.11.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "archify",
|
|
9
|
+
"version": "2.11.0",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"bin": {
|
|
12
|
+
"archify": "bin/archify.mjs"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"ajv": "^8.17.1"
|
|
16
|
+
},
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=18"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"node_modules/ajv": {
|
|
22
|
+
"version": "8.20.0",
|
|
23
|
+
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
|
|
24
|
+
"integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
|
|
25
|
+
"dev": true,
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"fast-deep-equal": "^3.1.3",
|
|
29
|
+
"fast-uri": "^3.0.1",
|
|
30
|
+
"json-schema-traverse": "^1.0.0",
|
|
31
|
+
"require-from-string": "^2.0.2"
|
|
32
|
+
},
|
|
33
|
+
"funding": {
|
|
34
|
+
"type": "github",
|
|
35
|
+
"url": "https://github.com/sponsors/epoberezkin"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"node_modules/fast-deep-equal": {
|
|
39
|
+
"version": "3.1.3",
|
|
40
|
+
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
|
41
|
+
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
|
42
|
+
"dev": true,
|
|
43
|
+
"license": "MIT"
|
|
44
|
+
},
|
|
45
|
+
"node_modules/fast-uri": {
|
|
46
|
+
"version": "3.1.3",
|
|
47
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz",
|
|
48
|
+
"integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==",
|
|
49
|
+
"dev": true,
|
|
50
|
+
"funding": [
|
|
51
|
+
{
|
|
52
|
+
"type": "github",
|
|
53
|
+
"url": "https://github.com/sponsors/fastify"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"type": "opencollective",
|
|
57
|
+
"url": "https://opencollective.com/fastify"
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"license": "BSD-3-Clause"
|
|
61
|
+
},
|
|
62
|
+
"node_modules/json-schema-traverse": {
|
|
63
|
+
"version": "1.0.0",
|
|
64
|
+
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
|
65
|
+
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
|
66
|
+
"dev": true,
|
|
67
|
+
"license": "MIT"
|
|
68
|
+
},
|
|
69
|
+
"node_modules/require-from-string": {
|
|
70
|
+
"version": "2.0.2",
|
|
71
|
+
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
|
72
|
+
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
|
|
73
|
+
"dev": true,
|
|
74
|
+
"license": "MIT",
|
|
75
|
+
"engines": {
|
|
76
|
+
"node": ">=0.10.0"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "archify",
|
|
3
|
+
"version": "2.11.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "JSON-IR diagram renderers (architecture / workflow / sequence / dataflow / lifecycle).",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"bin": {
|
|
9
|
+
"archify": "./bin/archify.mjs"
|
|
10
|
+
},
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": ">=18"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"generate:validators": "node scripts/generate-validators.mjs",
|
|
16
|
+
"check:validators": "node scripts/generate-validators.mjs --check",
|
|
17
|
+
"build:gallery": "node ../scripts/build-gallery.mjs ../docs",
|
|
18
|
+
"build:guide": "node ../scripts/build-guide.mjs ../docs/guide.html",
|
|
19
|
+
"build:start": "node ../scripts/build-start.mjs ../docs/start.html",
|
|
20
|
+
"build:readme-showcase": "node ../scripts/build-readme-showcase.mjs",
|
|
21
|
+
"test:webm": "node test/webm-artifact.smoke.mjs",
|
|
22
|
+
"test": "npm run check:validators && node test/golden.mjs && node --test test/*.test.mjs",
|
|
23
|
+
"render:examples": "node scripts/render-examples.mjs ../examples"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"ajv": "^8.17.1"
|
|
27
|
+
}
|
|
28
|
+
}
|