@vegastack/skills 0.1.0 → 0.3.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 +27 -7
- package/dist/index.js +195 -99
- package/package.json +16 -5
- package/skill/arch-guardian/SKILL.md +84 -0
- package/skill/arch-guardian/agents/openai.yaml +4 -0
- package/skill/arch-guardian/assets/adr-template.md +25 -0
- package/skill/arch-guardian/assets/answers-example.json +10 -0
- package/skill/arch-guardian/assets/architecture-profile.json +13 -0
- package/skill/arch-guardian/assets/architecture-profile.schema.json +31 -0
- package/skill/arch-guardian/references/advisory-report.md +65 -0
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/ai-cost.md +2 -0
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/ai-data-boundaries.md +2 -0
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/ai-evals.md +2 -0
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/connectors-sandbox.md +2 -2
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/delivery-operations.md +5 -5
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/durable-execution.md +3 -1
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/flutter.md +1 -1
- package/skill/arch-guardian/references/architecture/foundation.md +31 -0
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/hosting-reliability.md +1 -1
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/identity-tenancy.md +7 -7
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/model-lifecycle.md +5 -3
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/models-observability.md +1 -1
- package/skill/arch-guardian/references/architecture/security-privacy.md +27 -0
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/topology-monorepo.md +1 -1
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/web.md +1 -1
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/foundation-compatibility.json +1 -1
- package/skill/arch-guardian/references/profile-governance.md +40 -0
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/rule-model.json +2 -2
- package/skill/{vegastack-arch-guardian → arch-guardian}/references/workflows.md +15 -12
- package/skill/{vegastack-arch-guardian → arch-guardian}/refresh/REFRESH.md +10 -3
- package/skill/{vegastack-arch-guardian → arch-guardian}/refresh/sources.json +34 -22
- package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/lib.mjs +1 -10
- package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/profile-tool.mjs +43 -49
- package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/refresh-evidence.mjs +46 -5
- package/skill/arch-guardian/scripts/validate-profile.mjs +65 -0
- package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/verify-corpus.mjs +1 -13
- package/skill/skill-maintainer/SKILL.md +79 -0
- package/skill/skill-maintainer/agents/openai.yaml +4 -0
- package/skill/skill-maintainer/references/release-ops.md +63 -0
- package/skill/skill-maintainer/references/standards.md +92 -0
- package/skill/skill-maintainer/refresh/REFRESH.md +40 -0
- package/skill/skill-maintainer/refresh/sources.json +103 -0
- package/skill/skillify/SKILL.md +154 -0
- package/skill/skillify/agents/openai.yaml +4 -0
- package/skill/skillify/assets/templates/README.md.template +26 -0
- package/skill/skillify/assets/templates/REFRESH.md.template +21 -0
- package/skill/skillify/assets/templates/SKILL.md.template +26 -0
- package/skill/skillify/assets/templates/openai.yaml.template +4 -0
- package/skill/skillify/assets/templates/skill.test.ts.template +40 -0
- package/skill/skillify/assets/templates/sources.json.template +6 -0
- package/skill/skillify/references/authoring.md +72 -0
- package/skill/skillify/references/eval-playbook.md +62 -0
- package/skill/skillify/refresh/REFRESH.md +24 -0
- package/skill/skillify/refresh/sources.json +6 -0
- package/skill/skillify/scripts/scaffold-skill.mjs +138 -0
- package/skill-integrity.json +74 -45
- package/skill/vegastack-arch-guardian/SKILL.md +0 -96
- package/skill/vegastack-arch-guardian/agents/openai.yaml +0 -4
- package/skill/vegastack-arch-guardian/assets/adr-template.md +0 -40
- package/skill/vegastack-arch-guardian/assets/answers-example.json +0 -20
- package/skill/vegastack-arch-guardian/assets/architecture-profile.json +0 -25
- package/skill/vegastack-arch-guardian/assets/architecture-profile.schema.json +0 -213
- package/skill/vegastack-arch-guardian/references/architecture/foundation.md +0 -33
- package/skill/vegastack-arch-guardian/references/architecture/security-privacy.md +0 -23
- package/skill/vegastack-arch-guardian/references/control-catalog.json +0 -55
- package/skill/vegastack-arch-guardian/references/profile-governance.md +0 -54
- package/skill/vegastack-arch-guardian/scripts/architecture-check.mjs +0 -323
- package/skill/vegastack-arch-guardian/scripts/validate-profile.mjs +0 -241
- /package/skill/{vegastack-arch-guardian → arch-guardian}/assets/deployment-review-template.md +0 -0
- /package/skill/{vegastack-arch-guardian → arch-guardian}/assets/service-design-template.md +0 -0
- /package/skill/{vegastack-arch-guardian → arch-guardian}/assets/threat-model-template.md +0 -0
- /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/agent-product.md +0 -0
- /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/data-memory.md +0 -0
- /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/realtime-channels.md +0 -0
- /package/skill/{vegastack-arch-guardian → arch-guardian}/references/golden-patterns.md +0 -0
- /package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/schema-validate.mjs +0 -0
package/skill-integrity.json
CHANGED
|
@@ -1,48 +1,77 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion":
|
|
3
|
-
"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"skills": {
|
|
4
|
+
"arch-guardian": {
|
|
5
|
+
"files": {
|
|
6
|
+
"SKILL.md": "46eb5d40506c3e7b2f9d15a3cbfa189acb690ba55e7af924d463e003ae8eeb70",
|
|
7
|
+
"agents/openai.yaml": "9553ddb318a4b7f0d610343f28fc8af636fc4b24832a00e818c3b824449b0a59",
|
|
8
|
+
"assets/adr-template.md": "db813ef4621a76e1101b3a19fc944de60a38591b423d9a9ad6c8f0b1db38120c",
|
|
9
|
+
"assets/answers-example.json": "eed87446717032c60015232674272689bd68a7c8f5f43ff166aeaa0f649b7a9f",
|
|
10
|
+
"assets/architecture-profile.json": "70d78d81f2c65f7aa37d9ea7b7a5f0518961037262ae2db6da8e6c1f24757ee8",
|
|
11
|
+
"assets/architecture-profile.schema.json": "bcf370b882ef6e605abf530c8245d599471e8aa54f0ef42fc99b5119550b8905",
|
|
12
|
+
"assets/deployment-review-template.md": "e9be2feb153138d936f9ebd5763c3be10597cee639616f86cc082c498fd60cd2",
|
|
13
|
+
"assets/service-design-template.md": "670798e3bf26a76d593294ff60763e1a6a35866fa84ea74345406b05b4b0b61b",
|
|
14
|
+
"assets/threat-model-template.md": "ffcf22e3fc81c803d976ac6c41cbac4fb0f552d81653b89a5b587a46b59d9aed",
|
|
15
|
+
"references/advisory-report.md": "bfc0dc8e985e33312ed0617705b359457eaea7b6056307e94ea293d167992dd4",
|
|
16
|
+
"references/architecture/agent-product.md": "3b8039ef9ca6aa30fc8781475e005d7bbb9d8d415705a6e8c79b4a602ee1ed5e",
|
|
17
|
+
"references/architecture/ai-cost.md": "9cb300e5718c15d5e6c29d22293b4ca80340e73d2b77267fbc529016c6262dd2",
|
|
18
|
+
"references/architecture/ai-data-boundaries.md": "0d756d0132d05e0e45dcd1b582e6c4bfe04a9043ab8df64d9a88fb086d8b29ff",
|
|
19
|
+
"references/architecture/ai-evals.md": "9b9698acd8b73c17ea301569b6c57bbdede304cfec7fa6f7d6d4af017a64fa6c",
|
|
20
|
+
"references/architecture/connectors-sandbox.md": "c12248cb0eddf51143e6f14c71541042d676b405bf274271bb69148c621ab41f",
|
|
21
|
+
"references/architecture/data-memory.md": "3d2ccbcd90a00dddda7096877c874d4fa7b61b96e2e4061c3c82b40bd990cf19",
|
|
22
|
+
"references/architecture/delivery-operations.md": "82fafe5f0f157f7a870ff6c9aad64564ab121ac049446318fcf9c1b7f4517f36",
|
|
23
|
+
"references/architecture/durable-execution.md": "4dd1c7d69e41fb0abf7f469c8eadd1695b15c502e0219108c76d8aea06f9ffe6",
|
|
24
|
+
"references/architecture/flutter.md": "f024292b89b4667c65993bba906fb16afd278824f205f0e39c96a58384c6f423",
|
|
25
|
+
"references/architecture/foundation.md": "19536e03fdbb8720e263600a298b11e980cf6c24a724f8692db83b04302b39f1",
|
|
26
|
+
"references/architecture/hosting-reliability.md": "c69b00a354d78e2a7b2845cddc0d8a642911bc009efefa141075d1d774756142",
|
|
27
|
+
"references/architecture/identity-tenancy.md": "5fb2e5d74ae24ad2efe3ba01c06b8fcc16ba1dce1b9c531b7d955352af38d4c2",
|
|
28
|
+
"references/architecture/model-lifecycle.md": "eacdeade0fa88caaca11de9a9e69f0db8a9ecfc8b472070afb7158f5e30f6ba2",
|
|
29
|
+
"references/architecture/models-observability.md": "5501655b71d85e9653e5a8c276e481e2765b2a0c67c5bc23759f869529278b94",
|
|
30
|
+
"references/architecture/realtime-channels.md": "a95738c431f3f4c8c42c153a0b940897bae8d679ed0c2dfced3cb1c4c9c67ca5",
|
|
31
|
+
"references/architecture/security-privacy.md": "28d8d1a6347df95807d274829b2fbbd852c07a74d52d7e0be18d208b559504ea",
|
|
32
|
+
"references/architecture/topology-monorepo.md": "fdad26c8eaa32b977139e6f70c90a3954332a1fa6dd6e8d98bc9fb7c5a613117",
|
|
33
|
+
"references/architecture/web.md": "560957d179f9372ff01e3e216fdc8ad1cbee290ac95f42094d04da4af08a4c0a",
|
|
34
|
+
"references/foundation-compatibility.json": "dfbf106631ebd229d683b18855e126cdc4684a252038123b25d002724571ac14",
|
|
35
|
+
"references/golden-patterns.md": "0b00ece15e0ae20450d5c20409e7be34bab0d9b47c1614fb48cef780ca66605b",
|
|
36
|
+
"references/profile-governance.md": "b3ed0b4580c73fa0340c33267707ee9515071ac2b64bdc3dd56b8c558431a0b3",
|
|
37
|
+
"references/rule-model.json": "b9d4d13d152eecbb73a5add12c8ab9bb050e0f1001495c90c8b801d029b56598",
|
|
38
|
+
"references/workflows.md": "f54c284d831e14da00886fd186bc711bb8598fca4f2fc309f6caa197835e79ae",
|
|
39
|
+
"refresh/REFRESH.md": "db15a4304d0a3d3ab7f53722d30fb76609f1823cb2dc998f1807f092e79e008a",
|
|
40
|
+
"refresh/sources.json": "d35735620325c45693c8eddb5de5e7e1867cae19554e118b45867f8984250950",
|
|
41
|
+
"scripts/lib.mjs": "4ef4910518134eea7f89b6e397e5871f66a416429c75f59bf37e0864e4cf7ca0",
|
|
42
|
+
"scripts/profile-tool.mjs": "c13230b1c6a7bce9b91fb8a6a7d6eb84e9ef8855bf8b2a544e7bbfdc38e94877",
|
|
43
|
+
"scripts/refresh-evidence.mjs": "4759cedd15470247df23485b4c8d258e7e8f22cbceaac60f7e63cb42159af779",
|
|
44
|
+
"scripts/schema-validate.mjs": "329cca29ead284949107a5e0984588373522e9ef6624dffd18d4d207ef51fc99",
|
|
45
|
+
"scripts/validate-profile.mjs": "0b1f6b6d9e21267fd1ac545fd47fe46d9ecddc6a2efe67c5518e0845719a2b4d",
|
|
46
|
+
"scripts/verify-corpus.mjs": "d752efb00145afeaa7d2e758e10c5c11670253c1387326a52d6dda7fc67cda1c"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"skill-maintainer": {
|
|
50
|
+
"files": {
|
|
51
|
+
"SKILL.md": "bbbf15a9900d9d2009ccfbe163cface9654c81a9a84777718348d97b30739aeb",
|
|
52
|
+
"agents/openai.yaml": "0b89d4e6416cf20b448f5322f3d7433cfde333d2b4a05b42ed53db3759701fb4",
|
|
53
|
+
"references/release-ops.md": "2bde6c55cbe7674678e14b915fc5ebe565413aeb25c3d51a86e195af53004d01",
|
|
54
|
+
"references/standards.md": "3646d0dd0560a87b333f70febf670b093c89b35111132cdb641b763bf184b02f",
|
|
55
|
+
"refresh/REFRESH.md": "a9a86a979ef720cf2f316c76f05db0fd9beef591401b95ceb475474fe40bc936",
|
|
56
|
+
"refresh/sources.json": "cf38cdf8123a50ea7ef2d1466a87faa648c12e5bc90d9ee9b6ae45632e7d0800"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"skillify": {
|
|
60
|
+
"files": {
|
|
61
|
+
"SKILL.md": "35a194eb6a1638153898b0f8e0f97f8384ab0e75d5a1ebb0f280464e23a01ac8",
|
|
62
|
+
"agents/openai.yaml": "df320cf32a8db06c213f7892844dab810b7e96cfbf32502d25185d4a4167ef87",
|
|
63
|
+
"assets/templates/README.md.template": "68230ada702ad39f5de1f35e838ba590d89ca19b23868d4499353db6034fcc2c",
|
|
64
|
+
"assets/templates/REFRESH.md.template": "eef8dddbe6da5437e44b0e0412ff89a5cc4d2e45db95c05aa4adaa1c40fb0819",
|
|
65
|
+
"assets/templates/SKILL.md.template": "7fafee929e9d4db8f2a773f7093603ec5bc9bfc5aee0e03127023fa5e5883bb9",
|
|
66
|
+
"assets/templates/openai.yaml.template": "2fbf488369825109d6cad4f17e7b729a40d9e3c43c7f01bc5dfa16361d59c086",
|
|
67
|
+
"assets/templates/skill.test.ts.template": "7b852def3575da1ec90f3786caba286a2b6981ed41cac3ed9900996ad8ef68e6",
|
|
68
|
+
"assets/templates/sources.json.template": "df665176a12b6a86c014cd719ee79f149854f79c544a4eff3b1755fe71f99a15",
|
|
69
|
+
"references/authoring.md": "1ee846b6e210b5cbb4db328c6218274caa42dc61cbddaf159c531daef41683fd",
|
|
70
|
+
"references/eval-playbook.md": "e810158fbb56c4422b5ee4b5f2f57329e0b7544aa9d22b0fcb3c9cd6d225befe",
|
|
71
|
+
"refresh/REFRESH.md": "ca7bdd7de656a8ebec779506beeec8637b6de9dca7a635041f6fcd3e9b9c4ee7",
|
|
72
|
+
"refresh/sources.json": "e554e80c72c16dc70587361804db9e0cf2716c128820b2612d5983a009b2b242",
|
|
73
|
+
"scripts/scaffold-skill.mjs": "1b5de288bcc2170dc24738dc939c960bb1b54b100a19614ff592a7ad1311d73f"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
47
76
|
}
|
|
48
77
|
}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: vegastack-arch-guardian
|
|
3
|
-
description: Architecture advisor for VegaStack projects. Use when designing a new service or feature, reviewing architecture or a risky change (auth, tenancy, agents, jobs, connectors, data lifecycle, hosting), deciding between architectural options, writing or validating an ADR or .vegastack/architecture.json profile, threat modeling, planning a migration, or checking dependency and source drift. Gives one scoped recommendation with an explicit verdict; activates only the capabilities a project has actually enabled. Covers web-only, Flutter, agentic and non-agentic, single- and multi-tenant, internal, public, platform-service, and shared-package projects.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# VegaStack Architecture Guardian
|
|
7
|
-
|
|
8
|
-
Act as the project's decisive senior architect. Apply only activated capabilities. Treat the foundation as an advisory recommendation: state `GUARDIAN VERDICT: REJECT` when warranted, while allowing a project owner to accept any scoped risk through a valid ADR. Never invent compliance or project facts.
|
|
9
|
-
|
|
10
|
-
## Start every task
|
|
11
|
-
|
|
12
|
-
1. Identify the actual decision, its scope, and how expensive it is to reverse.
|
|
13
|
-
2. Inspect repository instructions and existing facts before asking questions. Keep read-only work read-only; never create a profile or artifact merely because it is absent.
|
|
14
|
-
3. Separate **facts**, **constraints**, **assumptions**, **preferences**, and **accepted project decisions**. Distinguish current, target, and migration state.
|
|
15
|
-
4. Ask at most three material questions at a time. If unanswered, proceed with bounded assumptions and the smallest architecture that meets stated requirements.
|
|
16
|
-
5. Read only the directly relevant references below. Use committed profiles, designs, and ADRs as architecture memory; never rely on hidden chat state.
|
|
17
|
-
6. Prioritize security/correctness, recovery, ownership, contracts, operability, delivery, then optional optimization. Make one primary recommendation, identify the rejected alternative, and surface irreversible or expensive choices first.
|
|
18
|
-
7. Evidence labels (**OBSERVED**, **DOCUMENTED**, **REPRODUCED**, **INFERRED**, **RECOMMENDED**, **NOT VERIFIED**) are optional; reserve them for review and drift reports where provenance matters. A static sentinel or declared control is never a reproduced runtime test.
|
|
19
|
-
|
|
20
|
-
Script invocations below write `<skill-dir>` as a placeholder: replace it with the absolute path of the directory containing this SKILL.md before running (no environment variable is set for you).
|
|
21
|
-
|
|
22
|
-
## Answer at the right size
|
|
23
|
-
|
|
24
|
-
- **Questions and explanations:** answer directly — the verdict (if one applies), the recommendation, and at most one material risk. No section headers, no full contract.
|
|
25
|
-
- **Design reviews, ADRs, migration plans:** use the full response contract: (1) Verdict, (2) Recommended architecture/decision, (3) Why it fits, (4) Material assumptions, (5) Rejected alternative and reason, (6) Implementation/migration sequence, (7) Risks and required evidence, (8) Artifacts/ADRs to update.
|
|
26
|
-
|
|
27
|
-
## Route progressively
|
|
28
|
-
|
|
29
|
-
| Need | Read |
|
|
30
|
-
|---|---|
|
|
31
|
-
| operating model, project types, profiles, exceptions | [foundation](references/architecture/foundation.md), [profile and governance](references/profile-governance.md) |
|
|
32
|
-
| greenfield, brownfield, migration, continuous work | [adaptive workflows](references/workflows.md) |
|
|
33
|
-
| topology, deployables, packages, contracts | [topology and monorepo](references/architecture/topology-monorepo.md) |
|
|
34
|
-
| web/Next/OpenAPI/cache | [web](references/architecture/web.md) |
|
|
35
|
-
| Flutter/mobile | [Flutter](references/architecture/flutter.md) |
|
|
36
|
-
| identity, organizations, tenancy, RLS | [identity and tenancy](references/architecture/identity-tenancy.md) |
|
|
37
|
-
| agent product and durable execution/jobs | [agent product](references/architecture/agent-product.md), [durable execution](references/architecture/durable-execution.md) |
|
|
38
|
-
| connectors, MCP, webhooks, sandbox, egress | [connectors and sandbox](references/architecture/connectors-sandbox.md) |
|
|
39
|
-
| data, knowledge, memory, objects | [data and memory](references/architecture/data-memory.md) |
|
|
40
|
-
| PII, prompt injection, output moderation | [AI data boundaries](references/architecture/ai-data-boundaries.md) |
|
|
41
|
-
| evals, prompt/model regression gates | [AI evals](references/architecture/ai-evals.md) |
|
|
42
|
-
| model pinning, deprecations, canary, backpressure | [model lifecycle](references/architecture/model-lifecycle.md) |
|
|
43
|
-
| model spend, budgets, cost attribution | [AI cost](references/architecture/ai-cost.md) |
|
|
44
|
-
| realtime, notifications, channels | [realtime and channels](references/architecture/realtime-channels.md) |
|
|
45
|
-
| models, BYOK, telemetry, audit | [models and observability](references/architecture/models-observability.md) |
|
|
46
|
-
| security, privacy, threat model | [security and privacy](references/architecture/security-privacy.md) |
|
|
47
|
-
| hosting, Cloudflare/OpenNext, SLO/recovery | [hosting and reliability](references/architecture/hosting-reliability.md) |
|
|
48
|
-
| delivery, migration, verification | [delivery and operations](references/architecture/delivery-operations.md) |
|
|
49
|
-
| fragile boundary implementation | [golden patterns](references/golden-patterns.md) |
|
|
50
|
-
|
|
51
|
-
Consult [refresh/sources.json](refresh/sources.json) only for affected unstable claims and [foundation compatibility](references/foundation-compatibility.json) for version adoption. Before advice that leans on a **critical** source (`critical: true` in the registry), check freshness: run `node <skill-dir>/scripts/refresh-evidence.mjs --topics <affected-topics>` when online, or treat the claim as `NOT VERIFIED` when offline and the registry snapshot is older than its `thresholdDays`. Source drift requests review; it never silently expires an ADR.
|
|
52
|
-
|
|
53
|
-
## Execute the task-specific workflow
|
|
54
|
-
|
|
55
|
-
- **Greenfield:** Follow the adaptive intake in [workflows](references/workflows.md). Recommend capability set, topology, ownership, boundaries, immediate/deferred decisions, risks, implementation order, and qualification. Offer scaffolding only after confirmation.
|
|
56
|
-
- **Brownfield/review:** Inspect instructions, manifests/locks, deployables, packages, schemas/migrations, auth, APIs/clients, jobs/workflows, infra, ADRs, observability, and runbooks before interviewing. Derive an observed draft without mutation; compare current, intended, and target states; prefer controlled migration over rewrites.
|
|
57
|
-
- **ADR/design/threat/deploy:** Use the relevant asset only after write authorization. Every action includes owner, risk, evidence, rollback/migration, and review trigger.
|
|
58
|
-
- **Continuous work:** Load only affected references and checks. Do not force absent capabilities into scope.
|
|
59
|
-
- **Source drift:** Follow [refresh/REFRESH.md](refresh/REFRESH.md). Refresh only affected topics; map changes to rules/capabilities and preserve unrelated fast paths.
|
|
60
|
-
|
|
61
|
-
## Profiles, checks, and mutation safety
|
|
62
|
-
|
|
63
|
-
The committed profile lives at `.vegastack/architecture.json` (legacy `.yaml`-named JSON is still discovered, with a deprecation notice). Inspect or draft without mutation:
|
|
64
|
-
|
|
65
|
-
```sh
|
|
66
|
-
node <skill-dir>/scripts/profile-tool.mjs inspect .
|
|
67
|
-
node <skill-dir>/scripts/profile-tool.mjs scaffold answers.json --dir .
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
`inspect` prints a compact summary; add `--json` for the full draft. The answers format is documented by example in `<skill-dir>/assets/answers-example.json`.
|
|
71
|
-
|
|
72
|
-
Write only after explicit authorization; writes are atomic, refuse symlinks, stay inside `--dir`, and require `--force` to replace differing content:
|
|
73
|
-
|
|
74
|
-
```sh
|
|
75
|
-
node <skill-dir>/scripts/profile-tool.mjs scaffold answers.json --dir . --write
|
|
76
|
-
node <skill-dir>/scripts/profile-tool.mjs migrate-v2 .vegastack/architecture.yaml --dir .
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Validate and review (prefer `--summary` in conversation; `--json` is for CI):
|
|
80
|
-
|
|
81
|
-
```sh
|
|
82
|
-
node <skill-dir>/scripts/validate-profile.mjs .vegastack/architecture.json
|
|
83
|
-
node <skill-dir>/scripts/architecture-check.mjs . --summary
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
`architecture-check` exit codes: 0 = no FAIL findings, 1 = FAIL findings present, 2 = tool/usage error. A non-zero exit is a review result, not a crash. Paths can be excluded deliberately via a `.guardianignore` file (path prefixes, one per line). Symlinks, agent-skill trees, and generated/bundled files (very large or very long-line files) are skipped automatically and reported in one `NOT VERIFIED` finding.
|
|
87
|
-
|
|
88
|
-
Interpret outcomes exactly: `PASS` satisfies the recommendation; `FAIL` violates it without a valid exception; `EXCEPTED` is active project-owner accepted risk and remains visibly noncompliant although CI may pass; `NOT VERIFIED` records reason, risk, owner, and next action. Invalid, expired, or mismatched exceptions fail. Continue to recommend rejection when accepted risk remains unsafe.
|
|
89
|
-
|
|
90
|
-
## Guardrails
|
|
91
|
-
|
|
92
|
-
- Product-owned enabled capabilities are the default. Shared/external management is rare and requires the complete declared contract in [profile and governance](references/profile-governance.md).
|
|
93
|
-
- Challenge project proposals and foundation defaults when evidence warrants. Choose the smallest architecture meeting current requirements and measured objectives.
|
|
94
|
-
- Never require SQL/RLS, Better Auth, Flutter, EVE, pg-boss, sandbox, connectors, enterprise identity, realtime, notifications, knowledge, or OpenBao when their activation condition is absent.
|
|
95
|
-
- Never mutate a repository for an explanation or read-only review. Draft first and ask before writing.
|
|
96
|
-
- Never create paid/cloud resources or claim live recovery, isolation, failover, credential-backed, or provider tests ran unless they actually ran.
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
interface:
|
|
2
|
-
display_name: "VegaStack Architecture Guardian"
|
|
3
|
-
short_description: "Design and guard adaptive VegaStack architecture"
|
|
4
|
-
default_prompt: "Use $vegastack-arch-guardian to make one scoped architecture recommendation for this project without assuming absent capabilities."
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# ADR-NNN: Decision title
|
|
2
|
-
|
|
3
|
-
- Status: proposed | accepted | superseded | rejected
|
|
4
|
-
- Date: YYYY-MM-DD
|
|
5
|
-
- Project-Owner: accountable person
|
|
6
|
-
- Scope-Paths: comma-separated exact repository-relative paths
|
|
7
|
-
- Rule-ID: canonical rule identifier or `none`
|
|
8
|
-
- Control-IDs: comma-separated exact checker/manual control IDs, or `all` for a rule-level exception that omits the profile controls list
|
|
9
|
-
- Exception-ID: profile exception ID or `none`
|
|
10
|
-
- Foundation-Deviation-Acknowledged: true | false
|
|
11
|
-
- Review-Date: YYYY-MM-DD | none
|
|
12
|
-
- Review-Event: concrete event | none
|
|
13
|
-
|
|
14
|
-
## Context and facts
|
|
15
|
-
|
|
16
|
-
Separate observed facts, constraints, assumptions, preferences and prior accepted decisions. Identify current, target and migration states.
|
|
17
|
-
|
|
18
|
-
## Decision and rationale
|
|
19
|
-
|
|
20
|
-
State the primary decision, ownership, boundaries and why it fits. State the rejected alternative and reason.
|
|
21
|
-
|
|
22
|
-
## Risks and accepted deviation
|
|
23
|
-
|
|
24
|
-
Describe each risk, who accepts it, affected paths/tenants/data, and why the foundation recommendation remains unmet.
|
|
25
|
-
|
|
26
|
-
## Compensating controls
|
|
27
|
-
|
|
28
|
-
Map preventive, detective and recovery controls to each risk. Do not claim an untested control works.
|
|
29
|
-
|
|
30
|
-
## Verification
|
|
31
|
-
|
|
32
|
-
List static sentinels, declared controls, reproduced tests, and `NOT VERIFIED` environment behavior with reason, risk, owner and next action.
|
|
33
|
-
|
|
34
|
-
## Rollback or migration
|
|
35
|
-
|
|
36
|
-
Describe rollback, migration/exit behavior, compatibility window, irreversible steps and cleanup.
|
|
37
|
-
|
|
38
|
-
## Review trigger
|
|
39
|
-
|
|
40
|
-
Give an expiry date or concrete event. Missing, expired or malformed exception ADRs fail validation.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"profileStatus": "draft",
|
|
3
|
-
"project": { "name": "example-product", "kind": "saas-product", "lifecycle": "greenfield", "access": "authenticated", "tenancy": "multi-tenant-shared-schema" },
|
|
4
|
-
"environments": { "production": { "hosting": "cloudflare-opennext" }, "localDevelopment": { "trusted": true, "allowances": ["local-secrets"] } },
|
|
5
|
-
"capabilities": {
|
|
6
|
-
"webControlPlane": { "status": "enabled", "ownership": "owned", "versions": { "next": "16.3.0", "node": "24.18.0", "bun": "1.3.14", "openNext": "1.20.2", "betterAuth": "1.6.26" }, "placement": "open-next-worker", "sourceRoots": ["apps/web"], "controls": { "canonicalApi": "rest-openapi", "openapiGenerated": true, "secureCookies": true } },
|
|
7
|
-
"flutter": { "status": "disabled", "ownership": "not-applicable" },
|
|
8
|
-
"agents": { "status": "disabled", "ownership": "not-applicable" },
|
|
9
|
-
"jobs": { "status": "disabled", "ownership": "not-applicable" },
|
|
10
|
-
"sandbox": { "status": "disabled", "ownership": "not-applicable" },
|
|
11
|
-
"connectors": { "status": "disabled", "ownership": "not-applicable" },
|
|
12
|
-
"knowledge": { "status": "disabled", "ownership": "not-applicable" },
|
|
13
|
-
"modelRouting": { "status": "disabled", "ownership": "not-applicable" },
|
|
14
|
-
"enterpriseIdentity": { "status": "disabled", "ownership": "not-applicable" },
|
|
15
|
-
"realtime": { "status": "disabled", "ownership": "not-applicable" },
|
|
16
|
-
"notifications": { "status": "disabled", "ownership": "not-applicable" },
|
|
17
|
-
"secrets": { "status": "enabled", "ownership": "owned", "versions": { "openbao": "2.3.2" }, "placement": "external-service", "sourceRoots": ["infra/secrets"], "controls": { "provider": "openbao" } }
|
|
18
|
-
},
|
|
19
|
-
"exceptions": []
|
|
20
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schemaVersion": 3,
|
|
3
|
-
"profileStatus": "draft",
|
|
4
|
-
"foundation": { "version": "0.3.0", "baseline": "vs-2026-08-07", "adoption": "supported" },
|
|
5
|
-
"project": { "name": "REQUIRED-CONFIRMED-PROJECT-NAME", "kind": "REQUIRED-CONFIRMED-PROJECT-KIND", "lifecycle": "REQUIRED-CONFIRMED-LIFECYCLE", "access": "REQUIRED-CONFIRMED-ACCESS", "tenancy": "REQUIRED-CONFIRMED-TENANCY" },
|
|
6
|
-
"environments": {
|
|
7
|
-
"production": { "hosting": "REQUIRED-CONFIRMED-PRODUCTION-TARGET" },
|
|
8
|
-
"localDevelopment": { "trusted": true, "allowances": [] }
|
|
9
|
-
},
|
|
10
|
-
"capabilities": {
|
|
11
|
-
"webControlPlane": { "status": "disabled", "ownership": "not-applicable" },
|
|
12
|
-
"flutter": { "status": "disabled", "ownership": "not-applicable" },
|
|
13
|
-
"agents": { "status": "disabled", "ownership": "not-applicable" },
|
|
14
|
-
"jobs": { "status": "disabled", "ownership": "not-applicable" },
|
|
15
|
-
"sandbox": { "status": "disabled", "ownership": "not-applicable" },
|
|
16
|
-
"connectors": { "status": "disabled", "ownership": "not-applicable" },
|
|
17
|
-
"knowledge": { "status": "disabled", "ownership": "not-applicable" },
|
|
18
|
-
"modelRouting": { "status": "disabled", "ownership": "not-applicable" },
|
|
19
|
-
"enterpriseIdentity": { "status": "disabled", "ownership": "not-applicable" },
|
|
20
|
-
"realtime": { "status": "disabled", "ownership": "not-applicable" },
|
|
21
|
-
"notifications": { "status": "disabled", "ownership": "not-applicable" },
|
|
22
|
-
"secrets": { "status": "disabled", "ownership": "not-applicable" }
|
|
23
|
-
},
|
|
24
|
-
"exceptions": []
|
|
25
|
-
}
|
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/vegastack/vegastack-skills/main/skills/vegastack-arch-guardian/assets/architecture-profile.schema.json",
|
|
4
|
-
"title": "VegaStack Architecture Profile v3",
|
|
5
|
-
"type": "object",
|
|
6
|
-
"additionalProperties": false,
|
|
7
|
-
"required": ["schemaVersion", "profileStatus", "foundation", "project", "environments", "capabilities", "exceptions"],
|
|
8
|
-
"$defs": {
|
|
9
|
-
"exactVersion": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+(?:\\.[0-9]+)?(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$" },
|
|
10
|
-
"relativePath": { "type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+$" },
|
|
11
|
-
"nonEmptyStrings": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
|
|
12
|
-
"serviceContract": {
|
|
13
|
-
"type": "object",
|
|
14
|
-
"additionalProperties": false,
|
|
15
|
-
"required": ["ownerService", "contract", "version", "tenantSecurityBoundary", "identityAudience", "dataResidency", "sloRecovery", "incidentOwner", "compatibility", "migrationExit"],
|
|
16
|
-
"properties": {
|
|
17
|
-
"ownerService": { "type": "string", "minLength": 1 },
|
|
18
|
-
"contract": { "type": "string", "minLength": 1 },
|
|
19
|
-
"version": { "$ref": "#/$defs/exactVersion" },
|
|
20
|
-
"tenantSecurityBoundary": { "type": "string", "minLength": 1 },
|
|
21
|
-
"identityAudience": { "type": "string", "minLength": 1 },
|
|
22
|
-
"dataResidency": { "type": "string", "minLength": 1 },
|
|
23
|
-
"sloRecovery": { "type": "string", "minLength": 1 },
|
|
24
|
-
"incidentOwner": { "type": "string", "minLength": 1 },
|
|
25
|
-
"compatibility": { "type": "string", "minLength": 1 },
|
|
26
|
-
"migrationExit": { "type": "string", "minLength": 1 }
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
"removal": {
|
|
30
|
-
"type": "object",
|
|
31
|
-
"additionalProperties": false,
|
|
32
|
-
"required": ["durableData", "credentials", "queues", "contracts", "owner", "verification", "rollback"],
|
|
33
|
-
"properties": {
|
|
34
|
-
"durableData": { "type": "string", "minLength": 1 },
|
|
35
|
-
"credentials": { "type": "string", "minLength": 1 },
|
|
36
|
-
"queues": { "type": "string", "minLength": 1 },
|
|
37
|
-
"contracts": { "type": "string", "minLength": 1 },
|
|
38
|
-
"owner": { "type": "string", "minLength": 1 },
|
|
39
|
-
"verification": { "type": "string", "minLength": 1 },
|
|
40
|
-
"rollback": { "type": "string", "minLength": 1 }
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
"capability": {
|
|
44
|
-
"type": "object",
|
|
45
|
-
"additionalProperties": false,
|
|
46
|
-
"required": ["status", "ownership"],
|
|
47
|
-
"properties": {
|
|
48
|
-
"status": { "enum": ["enabled", "disabled"] },
|
|
49
|
-
"ownership": { "enum": ["owned", "shared-managed", "external-managed", "not-applicable"] },
|
|
50
|
-
"versions": {
|
|
51
|
-
"type": "object",
|
|
52
|
-
"minProperties": 1,
|
|
53
|
-
"propertyNames": { "pattern": "^[A-Za-z][A-Za-z0-9]*$" },
|
|
54
|
-
"additionalProperties": { "$ref": "#/$defs/exactVersion" }
|
|
55
|
-
},
|
|
56
|
-
"placement": { "type": "string", "minLength": 1 },
|
|
57
|
-
"sourceRoots": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/relativePath" } },
|
|
58
|
-
"contract": { "$ref": "#/$defs/serviceContract" },
|
|
59
|
-
"controls": { "type": "object", "additionalProperties": { "type": ["string", "boolean", "number", "array"], "items": { "type": "string" } } },
|
|
60
|
-
"transitionFrom": { "enum": ["enabled", "disabled"] },
|
|
61
|
-
"removal": { "$ref": "#/$defs/removal" }
|
|
62
|
-
},
|
|
63
|
-
"allOf": [
|
|
64
|
-
{
|
|
65
|
-
"if": { "properties": { "status": { "const": "enabled" } }, "required": ["status"] },
|
|
66
|
-
"then": { "required": ["versions", "placement"], "properties": { "ownership": { "enum": ["owned", "shared-managed", "external-managed"] } } }
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"if": { "properties": { "status": { "const": "disabled" } }, "required": ["status"] },
|
|
70
|
-
"then": { "properties": { "ownership": { "const": "not-applicable" } } }
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"if": { "properties": { "status": { "const": "enabled" }, "ownership": { "const": "owned" } }, "required": ["status", "ownership"] },
|
|
74
|
-
"then": { "required": ["sourceRoots"] }
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"if": { "properties": { "ownership": { "enum": ["shared-managed", "external-managed"] } }, "required": ["ownership"] },
|
|
78
|
-
"then": { "required": ["contract"], "not": { "required": ["sourceRoots"] } }
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"if": { "properties": { "status": { "const": "disabled" }, "transitionFrom": { "const": "enabled" } }, "required": ["status", "transitionFrom"] },
|
|
82
|
-
"then": { "required": ["removal"] }
|
|
83
|
-
}
|
|
84
|
-
]
|
|
85
|
-
},
|
|
86
|
-
"exception": {
|
|
87
|
-
"type": "object",
|
|
88
|
-
"additionalProperties": false,
|
|
89
|
-
"required": ["id", "ruleId", "paths", "adr", "projectOwner", "status", "verificationType", "rationale", "decision", "risks", "compensatingControls", "verification", "rollbackOrMigration", "review", "foundationDeviationAcknowledged"],
|
|
90
|
-
"properties": {
|
|
91
|
-
"id": { "type": "string", "pattern": "^EXC-[0-9]{3,}$" },
|
|
92
|
-
"ruleId": { "type": "string", "pattern": "^[A-Z]+-[0-9]{3}$" },
|
|
93
|
-
"controls": { "$ref": "#/$defs/nonEmptyStrings" },
|
|
94
|
-
"paths": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/relativePath" } },
|
|
95
|
-
"adr": { "$ref": "#/$defs/relativePath" },
|
|
96
|
-
"projectOwner": { "type": "string", "minLength": 1 },
|
|
97
|
-
"status": { "enum": ["active", "withdrawn"] },
|
|
98
|
-
"verificationType": { "enum": ["static-sentinel", "manual-qualification"] },
|
|
99
|
-
"rationale": { "type": "string", "minLength": 1 },
|
|
100
|
-
"decision": { "type": "string", "minLength": 1 },
|
|
101
|
-
"risks": { "$ref": "#/$defs/nonEmptyStrings" },
|
|
102
|
-
"compensatingControls": { "$ref": "#/$defs/nonEmptyStrings" },
|
|
103
|
-
"verification": { "$ref": "#/$defs/nonEmptyStrings" },
|
|
104
|
-
"rollbackOrMigration": { "type": "string", "minLength": 1 },
|
|
105
|
-
"review": {
|
|
106
|
-
"oneOf": [
|
|
107
|
-
{ "type": "object", "additionalProperties": false, "required": ["date"], "properties": { "date": { "type": "string", "format": "date" } } },
|
|
108
|
-
{ "type": "object", "additionalProperties": false, "required": ["event"], "properties": { "event": { "type": "string", "minLength": 1 } } }
|
|
109
|
-
]
|
|
110
|
-
},
|
|
111
|
-
"foundationDeviationAcknowledged": { "const": true }
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
"properties": {
|
|
116
|
-
"schemaVersion": { "const": 3 },
|
|
117
|
-
"profileStatus": { "enum": ["draft", "confirmed"] },
|
|
118
|
-
"foundation": {
|
|
119
|
-
"type": "object",
|
|
120
|
-
"additionalProperties": false,
|
|
121
|
-
"required": ["version", "baseline", "adoption"],
|
|
122
|
-
"properties": {
|
|
123
|
-
"version": { "const": "0.3.0" },
|
|
124
|
-
"baseline": { "type": "string", "minLength": 1 },
|
|
125
|
-
"adoption": { "enum": ["supported", "candidate", "deprecated"] }
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
"project": {
|
|
129
|
-
"type": "object",
|
|
130
|
-
"additionalProperties": false,
|
|
131
|
-
"required": ["name", "kind", "lifecycle", "access", "tenancy"],
|
|
132
|
-
"properties": {
|
|
133
|
-
"name": { "type": "string", "minLength": 1 },
|
|
134
|
-
"kind": { "enum": ["saas-product", "internal-product", "public-product", "platform-service", "shared-package"] },
|
|
135
|
-
"lifecycle": { "enum": ["greenfield", "brownfield", "migration", "maintenance"] },
|
|
136
|
-
"access": { "enum": ["public", "authenticated", "internal", "mixed"] },
|
|
137
|
-
"tenancy": { "enum": ["none", "single-tenant", "multi-tenant-shared-schema", "multi-tenant-isolated"] }
|
|
138
|
-
}
|
|
139
|
-
},
|
|
140
|
-
"environments": {
|
|
141
|
-
"type": "object",
|
|
142
|
-
"additionalProperties": false,
|
|
143
|
-
"required": ["production", "localDevelopment"],
|
|
144
|
-
"properties": {
|
|
145
|
-
"production": {
|
|
146
|
-
"type": "object",
|
|
147
|
-
"additionalProperties": false,
|
|
148
|
-
"required": ["hosting"],
|
|
149
|
-
"properties": { "hosting": { "enum": ["self-hosted", "vercel", "cloudflare-opennext", "external", "none"] }, "region": { "type": "string", "minLength": 1 } }
|
|
150
|
-
},
|
|
151
|
-
"localDevelopment": {
|
|
152
|
-
"type": "object",
|
|
153
|
-
"additionalProperties": false,
|
|
154
|
-
"required": ["trusted", "allowances"],
|
|
155
|
-
"properties": { "trusted": { "const": true }, "allowances": { "type": "array", "uniqueItems": true, "items": { "enum": ["local-workflow-world", "local-secrets", "local-unsandboxed-code", "single-process"] } } }
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
"capabilities": {
|
|
160
|
-
"type": "object",
|
|
161
|
-
"additionalProperties": false,
|
|
162
|
-
"required": ["webControlPlane", "flutter", "agents", "jobs", "sandbox", "connectors", "knowledge", "modelRouting", "enterpriseIdentity", "realtime", "notifications", "secrets"],
|
|
163
|
-
"properties": {
|
|
164
|
-
"webControlPlane": { "$ref": "#/$defs/capability" },
|
|
165
|
-
"flutter": { "$ref": "#/$defs/capability" },
|
|
166
|
-
"agents": { "$ref": "#/$defs/capability" },
|
|
167
|
-
"jobs": { "$ref": "#/$defs/capability" },
|
|
168
|
-
"sandbox": { "$ref": "#/$defs/capability" },
|
|
169
|
-
"connectors": { "$ref": "#/$defs/capability" },
|
|
170
|
-
"knowledge": { "$ref": "#/$defs/capability" },
|
|
171
|
-
"modelRouting": { "$ref": "#/$defs/capability" },
|
|
172
|
-
"enterpriseIdentity": { "$ref": "#/$defs/capability" },
|
|
173
|
-
"realtime": { "$ref": "#/$defs/capability" },
|
|
174
|
-
"notifications": { "$ref": "#/$defs/capability" },
|
|
175
|
-
"secrets": { "$ref": "#/$defs/capability" }
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
"data": {
|
|
179
|
-
"type": "object",
|
|
180
|
-
"additionalProperties": false,
|
|
181
|
-
"required": ["classes"],
|
|
182
|
-
"properties": {
|
|
183
|
-
"classes": {
|
|
184
|
-
"type": "array",
|
|
185
|
-
"minItems": 1,
|
|
186
|
-
"items": {
|
|
187
|
-
"type": "object",
|
|
188
|
-
"additionalProperties": false,
|
|
189
|
-
"required": ["name"],
|
|
190
|
-
"properties": {
|
|
191
|
-
"name": { "enum": ["public", "internal", "confidential", "restricted"] },
|
|
192
|
-
"residency": { "type": "string", "minLength": 1 },
|
|
193
|
-
"retention": { "type": "string", "minLength": 1 },
|
|
194
|
-
"owner": { "type": "string", "minLength": 1 }
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
"objectives": {
|
|
201
|
-
"type": "object",
|
|
202
|
-
"additionalProperties": false,
|
|
203
|
-
"properties": {
|
|
204
|
-
"availability": { "type": "string", "minLength": 1 },
|
|
205
|
-
"latency": { "type": "string", "minLength": 1 },
|
|
206
|
-
"rpoMinutes": { "type": "number", "minimum": 0 },
|
|
207
|
-
"rtoMinutes": { "type": "number", "minimum": 0 }
|
|
208
|
-
},
|
|
209
|
-
"minProperties": 1
|
|
210
|
-
},
|
|
211
|
-
"exceptions": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/exception" } }
|
|
212
|
-
}
|
|
213
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Foundation
|
|
2
|
-
|
|
3
|
-
## Operating model
|
|
4
|
-
|
|
5
|
-
VegaStack projects may be SaaS, internal/public products, platform services or shared packages; single- or multi-tenant; web-only, Flutter-enabled, agentic or non-agentic. Activate only declared or observed capabilities. Resolve decisions in this order: security/correctness; recovery; ownership; contracts; operability; delivery; optional optimization.
|
|
6
|
-
|
|
7
|
-
- **FOUND-001 — Confirmed profile.** For architecture conformance checks, a project **MUST** commit a confirmed v3 `.vegastack/architecture.json` containing only applicable, confirmed facts (legacy `.yaml`-named JSON is accepted with a deprecation notice). [invariant; activation: CI/profile work; verification: structural+semantic; waiver: project ADR]
|
|
8
|
-
- **FOUND-002 — Project exceptions.** A project exception **MUST** use exact rule/control/path scope and a contained accepted ADR with project owner, rationale/decision, risks, controls, verification, rollback/migration, review date or event, and foundation-deviation acknowledgement. [invariant; activation: exception declared; verification: semantic+filesystem; waiver: project ADR]
|
|
9
|
-
- **FOUND-003 — Honest outcomes.** The guardian **MUST NOT** represent accepted risk as safe or foundation-compliant: report `PASS`, `FAIL`, `EXCEPTED`, and `NOT VERIFIED` exactly, and keep a rejection recommendation when warranted. [invariant; activation: every decision/review; verification: output review; waiver: project ADR]
|
|
10
|
-
- **FOUND-004 — Capability alignment.** Declared capability status, ownership, versions, placement, roots and contracts **MUST** match project intent and repository evidence; removal **MUST** clean durable data, credentials, queues and contracts. [invariant; activation: capability declared/observed/removed; verification: static+semantic+runtime; waiver: project ADR]
|
|
11
|
-
|
|
12
|
-
Every project architecture rule is waivable by an active project-owner ADR. A valid ADR changes a matching violation to `EXCEPTED` and may allow CI success, but it never proves safety. Invalid, expired or mismatched exceptions fail. Foundation changes and project accepted risks remain distinct.
|
|
13
|
-
|
|
14
|
-
Prefer reproduced behavior over prose and official primary sources over secondary material. Apply pinned claims to the pinned baseline; current documentation describes current capability. Source drift requests scoped review and does not automatically expire ADRs.
|
|
15
|
-
|
|
16
|
-
## Ownership and portability
|
|
17
|
-
|
|
18
|
-
Product-owned enabled capabilities are the default. Shared-managed and external-managed services are explicit exceptions to ownership, not compliance exceptions; require the complete service contract in the profile. A consumer of shared EVE or another shared service does not contain the provider's source roots.
|
|
19
|
-
|
|
20
|
-
Use PostgreSQL, REST/OpenAPI, OCI, S3-compatible objects, OpenTelemetry, OAuth/OIDC and provider-neutral sandbox/model interfaces when their capabilities apply. Provider features must not become hidden correctness dependencies.
|
|
21
|
-
|
|
22
|
-
The foundation excludes billing, pricing and Stripe. Usage, quota, capacity, token, sandbox and storage accounting remain applicable when those resources exist. Add optional infrastructure only after the trigger in its reference is met.
|
|
23
|
-
|
|
24
|
-
## Enforcement
|
|
25
|
-
|
|
26
|
-
| Class | Treatment |
|
|
27
|
-
|---|---|
|
|
28
|
-
| invariant / forbidden design | CI failure when detectable; otherwise manual qualification |
|
|
29
|
-
| preferred default | warning with evidence-backed reason to vary |
|
|
30
|
-
| permitted option | supported only inside declared activation and ownership boundaries |
|
|
31
|
-
| valid project ADR | visible `EXCEPTED`; CI may pass; recommendation remains unmet |
|
|
32
|
-
|
|
33
|
-
Choose the smallest design meeting current requirements and measured objectives. Challenge a foundation default when project evidence shows it does not fit; use an ADR to record the project decision.
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Security and privacy
|
|
2
|
-
|
|
3
|
-
Apply threat scenarios to enabled/exposed services and capabilities. Absence of a capability is not a missing control; observed sensitive data, secrets or execution activates the relevant boundary.
|
|
4
|
-
|
|
5
|
-
- **SEC-001 — Threat model.** Every enabled/exposed service and capability **MUST** model its applicable tenant crossing, confused deputy, prompt/tool injection, SSRF, credential theft, replay, support abuse, sandbox escape/exfiltration, supply-chain, resource exhaustion, and deletion-failure scenarios.
|
|
6
|
-
- **SEC-002 — Secret custody.** When production secrets exist, workspace BYOK and connector tokens **MUST** persist only as encrypted ciphertext/reference; project-owned production secret/KMS functions, service identities, rotation, revocation, and audit **MUST** use OpenBao. Plaintext secrets in code, profiles, logs, telemetry, agents, or sandboxes are forbidden. [OPENBAO-DOCS]
|
|
7
|
-
- **SEC-003 — Enforced authorization.** Prompts and model instructions **MUST NOT** be treated as security controls. Typed authorization, capabilities, EVE approval gates, database RLS, egress policy, quotas, and immutable audit enforce decisions.
|
|
8
|
-
- **SEC-004 — Supply chain.** Builds **MUST** use reviewed locks, registry integrity, canonical tags/commits, isolated builders, vulnerability/license review, pinned image digests, SBOM, provenance, and signatures for release artifacts.
|
|
9
|
-
- **SEC-005 — Abuse controls.** Systems **MUST** apply tenant/identity/IP/risk-class quotas, payload and output limits, anomaly detection, suspension/kill switches, appeal/restore paths, and immutable administrative audit.
|
|
10
|
-
|
|
11
|
-
| Control objective | Required mechanism |
|
|
12
|
-
|---|---|
|
|
13
|
-
| tenant isolation | `TEN-001` through `TEN-004`, typed grants, negative tests |
|
|
14
|
-
| least privilege | `AUTH-002`, `CONN-001`, short-lived service identities |
|
|
15
|
-
| untrusted execution | `SBX-001` through `SBX-005` |
|
|
16
|
-
| confidentiality | `SEC-002`, `MODEL-002`, `OBS-002`, encryption and redaction |
|
|
17
|
-
| durable accountability | EVE checkpoints, AgentRun projection, `OBS-003` |
|
|
18
|
-
| privacy lifecycle | `DATA-004`, export/deletion reconciliation, legal-hold scope |
|
|
19
|
-
| recovery | qualified backups, PITR, restore and incident drills |
|
|
20
|
-
|
|
21
|
-
Map evidence to applicable SOC 2 security/availability/confidentiality/privacy criteria and GDPR principles, lawful basis, data-subject rights, processor/subprocessor duties, breach response, transfers, and retention. This mapping supports control design; it is not a certification or legal conclusion.
|
|
22
|
-
|
|
23
|
-
Threat and deployment reviews identify detection, containment, evidence preservation, recovery, communication, owner, and verification for every material scenario.
|