@vegastack/skills 0.4.0 → 0.6.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.
Files changed (64) hide show
  1. package/README.md +4 -2
  2. package/dist/index.js +38 -45
  3. package/package.json +1 -1
  4. package/skill/architect/SKILL.md +68 -0
  5. package/skill/architect/agents/openai.yaml +4 -0
  6. package/skill/architect/assets/adr-template.md +21 -0
  7. package/skill/architect/assets/arch-template.md +20 -0
  8. package/skill/architect/references/advisory.md +102 -0
  9. package/skill/architect/references/ai-agents.md +95 -0
  10. package/skill/architect/references/data.md +90 -0
  11. package/skill/architect/references/infra.md +128 -0
  12. package/skill/architect/references/mobile.md +78 -0
  13. package/skill/architect/references/pinned-facts.md +108 -0
  14. package/skill/architect/references/principles.md +91 -0
  15. package/skill/architect/references/project-profile.md +37 -0
  16. package/skill/architect/references/security.md +97 -0
  17. package/skill/architect/references/stack.md +38 -0
  18. package/skill/architect/references/web.md +152 -0
  19. package/skill/architect/refresh/REFRESH.md +29 -0
  20. package/skill/architect/refresh/sources.json +244 -0
  21. package/skill/skill-maintainer/references/release-ops.md +11 -15
  22. package/skill/skill-maintainer/refresh/REFRESH.md +3 -3
  23. package/skill-integrity.json +20 -44
  24. package/skill/arch-guardian/SKILL.md +0 -84
  25. package/skill/arch-guardian/agents/openai.yaml +0 -4
  26. package/skill/arch-guardian/assets/adr-template.md +0 -25
  27. package/skill/arch-guardian/assets/answers-example.json +0 -10
  28. package/skill/arch-guardian/assets/architecture-profile.json +0 -13
  29. package/skill/arch-guardian/assets/architecture-profile.schema.json +0 -31
  30. package/skill/arch-guardian/assets/deployment-review-template.md +0 -24
  31. package/skill/arch-guardian/assets/service-design-template.md +0 -33
  32. package/skill/arch-guardian/assets/threat-model-template.md +0 -34
  33. package/skill/arch-guardian/references/advisory-report.md +0 -65
  34. package/skill/arch-guardian/references/architecture/agent-product.md +0 -22
  35. package/skill/arch-guardian/references/architecture/ai-cost.md +0 -24
  36. package/skill/arch-guardian/references/architecture/ai-data-boundaries.md +0 -21
  37. package/skill/arch-guardian/references/architecture/ai-evals.md +0 -28
  38. package/skill/arch-guardian/references/architecture/connectors-sandbox.md +0 -39
  39. package/skill/arch-guardian/references/architecture/data-memory.md +0 -25
  40. package/skill/arch-guardian/references/architecture/delivery-operations.md +0 -34
  41. package/skill/arch-guardian/references/architecture/durable-execution.md +0 -45
  42. package/skill/arch-guardian/references/architecture/flutter.md +0 -26
  43. package/skill/arch-guardian/references/architecture/foundation.md +0 -31
  44. package/skill/arch-guardian/references/architecture/hosting-reliability.md +0 -37
  45. package/skill/arch-guardian/references/architecture/identity-tenancy.md +0 -37
  46. package/skill/arch-guardian/references/architecture/model-lifecycle.md +0 -20
  47. package/skill/arch-guardian/references/architecture/models-observability.md +0 -23
  48. package/skill/arch-guardian/references/architecture/realtime-channels.md +0 -16
  49. package/skill/arch-guardian/references/architecture/security-privacy.md +0 -27
  50. package/skill/arch-guardian/references/architecture/topology-monorepo.md +0 -47
  51. package/skill/arch-guardian/references/architecture/web.md +0 -29
  52. package/skill/arch-guardian/references/foundation-compatibility.json +0 -44
  53. package/skill/arch-guardian/references/golden-patterns.md +0 -43
  54. package/skill/arch-guardian/references/profile-governance.md +0 -40
  55. package/skill/arch-guardian/references/rule-model.json +0 -36
  56. package/skill/arch-guardian/references/workflows.md +0 -48
  57. package/skill/arch-guardian/refresh/REFRESH.md +0 -47
  58. package/skill/arch-guardian/refresh/sources.json +0 -1171
  59. package/skill/arch-guardian/scripts/lib.mjs +0 -48
  60. package/skill/arch-guardian/scripts/profile-tool.mjs +0 -217
  61. package/skill/arch-guardian/scripts/refresh-evidence.mjs +0 -366
  62. package/skill/arch-guardian/scripts/schema-validate.mjs +0 -63
  63. package/skill/arch-guardian/scripts/validate-profile.mjs +0 -65
  64. package/skill/arch-guardian/scripts/verify-corpus.mjs +0 -136
@@ -0,0 +1,152 @@
1
+ # Web — frontend, design system, backend/API taste
2
+
3
+ ## Project layout
4
+
5
+ - Top-level `server/` (or `packages/*` server code) holds DB, services, integrations — it
6
+ is sacred: never imported from client code, enforced with `server-only` + a boundary
7
+ check. The app router lives in `src/app/`; features are self-contained modules under
8
+ `src/features/<domain>/` (components/hooks per feature); shared pieces in
9
+ `src/{components,hooks,lib,store,messages}/`. Pages stay thin — they compose features.
10
+ - The house convention scopes agent instructions per directory (a short CLAUDE.md/AGENTS.md
11
+ at each boundary-bearing directory) — follow it where a project already does this.
12
+
13
+ ## Frontend architecture
14
+
15
+ - Server state → RSC + TanStack Query; URL state → nuqs; ephemeral UI state → Zustand.
16
+ Remote/tenant data is never persisted client-side (IndexedDB/local-first was evaluated and
17
+ rejected for multi-tenant SaaS on governance grounds — a confirmed single-tenant/offline
18
+ product is the only exception, and that's a decision to ask for, not assume).
19
+ - Next config: `output: 'standalone'`, `cacheComponents: true` (PPR flags no longer exist).
20
+ Query key factories live in non-`'use client'` `.keys.ts` modules so RSC pages can prefetch.
21
+ - Server Components by default; `'use client'` only at the lowest leaf that needs it.
22
+ `/server` (or `packages/*` server code) is never imported from client code — `server-only`
23
+ plus a boundary check, not convention.
24
+ - Request interception: on OpenNext/Cloudflare, `proxy.ts`/Node middleware does NOT work
25
+ as of 2026-08 (open adapter issues — see infra.md); use what the adapter actually
26
+ supports and re-check its docs per feature. Either way interception is never the auth
27
+ boundary (see security.md).
28
+ - Internal navigation uses `next/link`; bare `<a>` only for true external links/downloads.
29
+ - Never TypeScript `any` — `unknown` and narrow.
30
+ - Dependencies: prefer the native/browser API when it covers the need
31
+ (`Intl.RelativeTimeFormat` over date-fns); self-implement simple behavior (a tween, a diff
32
+ view) by composing design-system primitives before adding a library; any non-trivial new
33
+ dependency needs a stated justification and approval. **Why:** self-contained code has no
34
+ supply-chain, licensing, or upgrade surface, and MK rejects "library because library".
35
+
36
+ ## Design system (consuming `@vegastack/design` / `@vegastack/ui`)
37
+
38
+ - First-time setup in a fresh project (npm install, Tailwind wiring, provider, registry
39
+ auth) is a separate, already-built skill — `vegastack-consume` — use it; don't
40
+ re-derive the wiring here.
41
+ - Consume through the package barrel, never deep imports; never edit shipped component files.
42
+ A missing component or variant is an upstream request MK decides — the recommended
43
+ interim pattern is a local presentational composition in the app (inferred — confirm on
44
+ first use); don't fork the system.
45
+ - Semantic tokens only: no inline `style={}`, no arbitrary values (`bg-[#123]`, `h-[13px]`),
46
+ no raw palette classes (`bg-neutral-900`), not even for opacity. Dynamic values go through
47
+ CSS custom properties.
48
+ - Visual language: borders-only cards, flat surfaces (shadows only for true overlays); accent
49
+ color rationed to the primary action and real selected/active state — never hover, roughly
50
+ ≤10 accent elements a page. Focus stays visible always (WCAG 2.2 AA floor) — the house
51
+ mechanism is a darker border or native outline, never a `ring-*` utility. Control heights
52
+ on the 28/32/40 scale = `h-7`/`h-8`/`h-10` (no off-scale `h-9`); radius: `rounded-md`
53
+ controls, `rounded-sm` menu items, `rounded-lg` containers, `rounded-full` pills — never
54
+ `rounded-xl` on cards/dialogs. Touch-target minimum is genuinely unresolved (24px WCAG AA
55
+ vs 44px mobile-HIG both appear in the record) — ask MK when it matters.
56
+ - Typography: product code caps at `font-semibold` and uses it sparingly (inside the design
57
+ system package itself the cap is `font-medium`); headings `font-lora`; numbers, versions,
58
+ costs, and card digits always `font-mono`; uppercase only in mono at ≤14px. Fonts are
59
+ self-hosted via `next/font` — never a Google Fonts CDN request.
60
+ - Icons: Lucide only. Toasts: sonner, never native/OS prompts. 4px spacing scale.
61
+ - Motion: subtle and minimal — no button hover/press animations, no `transition-all`; motion
62
+ is for state feedback (success/error) and structural changes. `prefers-reduced-motion`
63
+ disables animation entirely (instant, not softened).
64
+ - No decorative filler: no gratuitous badges, eyebrow text, or "3 of 3" counters — MK cuts
65
+ these on sight as AI-generated design tells.
66
+ - Light AND dark theme on every shipped surface (internal-only tools may opt out, stated
67
+ up front).
68
+
69
+ ## UI completeness bar (every real surface, before it's "done")
70
+
71
+ - Full state matrix: loading skeleton shaped like the real content · empty state with
72
+ guidance · error routed to the specific failure (401/403, 404, 410, 429, generic — never
73
+ swallowed into `{}`) · success feedback. Optimistic updates where a mutation changes
74
+ visible state; the UI reflects backend mutations without a manual refresh.
75
+ - Forms: Enter submits; spinner replaces the button icon (not beside it); first field
76
+ auto-focused; all fields disabled while the primary action runs; state resets on error or
77
+ navigation.
78
+ - Responsive: no horizontal scroll at any width; computed layout math, never hardcoded pixel
79
+ offsets; truncation driven by available space, not character counts; iOS inputs must not
80
+ zoom on focus; the mobile keyboard must never occlude the active input.
81
+ - Systemic fixes: a defect found in one component (scroll leaking through an overlay, missing
82
+ cursor, wrong token) is fixed across the whole family in one sweep, with evidence.
83
+ - Perceived speed is the named pattern "instant shell": the layout shell renders
84
+ immediately (RSC + `cacheComponents`), every data region streams in behind a skeleton
85
+ shaped like its content — never a blank page or a full-page spinner.
86
+ - Long lists (>~50 rows) virtualize with `@tanstack/react-virtual` (the approved package —
87
+ still state the justification when adding it).
88
+ - Cloning/rebranding a reference site: strip every trace of the source tool's provenance
89
+ (class names, external asset domains, meta) so the result is fully self-contained, and
90
+ verify parity by clicking through as a real user — screenshot diffing alone doesn't count.
91
+
92
+ ## SEO and metadata (every public-facing app)
93
+
94
+ - Every route exports `metadata`/`generateMetadata` — not just the root layout. Public
95
+ apps ship `sitemap.ts` and `robots.ts`; `llms.txt` is generated at build time, never
96
+ hand-maintained. OG images follow the house convention (generated, mono for
97
+ names/numbers). i18n uses next-intl `localePrefix: 'as-needed'` (stack.md) so default-
98
+ locale URLs stay clean. **Why:** MK has demanded "100% SEO" coverage on shipped sites
99
+ twice — treat it as a completeness bar, not an enhancement.
100
+
101
+ ## Testing (web/backend — test where it pays off)
102
+
103
+ - Unit-test services and pure logic (Vitest); component/a11y tests run in Vitest browser
104
+ mode with the Playwright provider (real Chromium — jsdom's ARIA/layout gaps produce
105
+ false a11y results and are not trusted).
106
+ - E2E is a walking skeleton: one real happy path (boot → auth → core mutation → verify)
107
+ plus targeted adversarial invariants — not a blanket suite. DB-gated tests are authored
108
+ even when execution is blocked, and gated behind an env flag (`RUN_DB_TESTS=1` pattern);
109
+ E2E doubles implement real ports, never a parallel mock pathway.
110
+ - Every confirmed bug gets a regression test; no coverage-percentage targets — "100%"
111
+ means audit completeness, never a coverage metric. VRT/demo content is deterministic
112
+ (no `Date.now()`/`Math.random()`).
113
+
114
+ ## Backend / API design
115
+
116
+ - Contract-first: zod schemas are the single source → OpenAPI 3.1 under `/api/v1`, camelCase,
117
+ cursor pagination on every list, RFC 9457 problem-details errors with a stable error-code
118
+ catalog. One contract serves web, Flutter, MCP, and public consumers.
119
+ - Every route: auth before parse, through the shared route-handler wrapper — no route-local
120
+ zod, no raw `request.json()`. Sanitize responses: secrets and credential references never
121
+ leave the server. Enforce with a CI ratchet (unwrapped routes fail the build), not review.
122
+ - Return what the view renders, not everything — no mega-responses. Select columns explicitly.
123
+ - Body limits stream: count bytes as they arrive and abort at the limit; never buffer the
124
+ whole body first.
125
+ - Webhooks over polling; the database is the source of truth. Once provider state lands in
126
+ Postgres via webhook, don't re-poll the provider — and don't build intermediary "waiting"
127
+ pages; redirect on success and let the rest arrive in the background.
128
+ - Money paths (Stripe): isolated intake (own worker or route), idempotency keys on every
129
+ mutation, event dedupe, append-only ledgers as the single cost source of truth, audit
130
+ events written in the same transaction as the business change. Pricing/quoting math is
131
+ deterministic code with server-enforced invariants — AI drafts and judges; deterministic
132
+ code calculates and enforces (a proven client-project pattern; treat as the strong
133
+ default for money paths).
134
+ - Centralize the boring: one ID helper (never raw `crypto.randomUUID` scattered), one logger
135
+ (never `console.log`; request/org context auto-injected; never log secrets or PII beyond
136
+ user IDs), one typed fail-hard zod env parser validated at startup — no
137
+ `DISABLE_AUTH`-style escape hatches, no plaintext fallbacks.
138
+ - Dead endpoints get deleted, not deprecated-and-kept. (Exception: a versioned `/api/v1`
139
+ contract consumed by a shipped mobile app outlives web deploy cycles — app-store install
140
+ lag means mobile clients keep the old contract alive; see mobile.md.)
141
+ - Outbound webhooks to customers (when a product offers them): a defined event catalog,
142
+ Standard Webhooks-style signing with rotatable secrets, delivery via the transactional
143
+ outbox → queue with retries/backoff, auto-disable an endpoint after N consecutive
144
+ failures, and a replay surface. Never fire webhooks inline from request handlers.
145
+ - Platform-native mentions over plain text: when the data allows it, resolve and mention
146
+ the real entity (Slack user @mentions, Notion Person fields) instead of rendering names
147
+ as text — the recurring "don't just fix, improve" integration principle.
148
+ - Wizard/checkout flow-state persistence (Zustand + sessionStorage vs server-side draft)
149
+ is not yet a settled house rule — ask MK when building one.
150
+ - Rate-limited responses return 429 with a `Retry-After` header.
151
+ - Timestamps stored UTC (`timestamptz`), rendered in the user's timezone; durations as
152
+ integer milliseconds; money in integer minor units.
@@ -0,0 +1,29 @@
1
+ # Freshness contract — architect
2
+
3
+ Most of this skill is durable taste and recorded decisions; it does not go stale on its
4
+ own. Exactly one file decays with the platform landscape: `references/pinned-facts.md`
5
+ (plus the version claims embedded in `references/stack.md` and `references/mobile.md`).
6
+
7
+ ## Mechanism
8
+
9
+ 1. **Weekly scheduled agent (primary).** A scheduled Claude Code/Codex job re-verifies
10
+ each pinned fact against its stated source URL and opens ONE pull request quoting
11
+ evidence for anything that changed (fact text, version, date, source). The diffing
12
+ judgment lives in the agent run, not in maintained scripts. The PR is human-reviewed —
13
+ never auto-merged.
14
+ 2. **Refresh-on-use (safety net, written into SKILL.md).** When a recommendation leans on
15
+ a pinned fact older than 60 days, the consuming agent re-verifies that one fact first
16
+ and says so. Never bulk-refresh in-session.
17
+ 3. **Registry baseline (`sources.json`).** The repo-shared refresh runner
18
+ (`tooling/refresh/refresh-evidence.mjs`) keeps checksum baselines for the critical
19
+ source pages so CI can detect upstream drift deterministically between weekly runs.
20
+
21
+ ## Rules
22
+
23
+ - Critical sources (Hyperdrive supported versions, Better Auth docs, eve/Workflow SDK
24
+ deploy constraints) get `critical: true` — drift there warrants a prompt PR, not a
25
+ batch.
26
+ - Every edited fact keeps the pattern: fact → why it changes a decision → source URL →
27
+ verified date. The file carries one blanket verified-date for facts checked together;
28
+ a fact re-verified alone gets its own inline date, superseding the blanket one.
29
+ - A fact that stops being decision-changing is deleted, not kept for completeness.
@@ -0,0 +1,244 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "policy": {
4
+ "criticalTopics": [
5
+ "hyperdrive-postgres",
6
+ "better-auth",
7
+ "eve-deploy"
8
+ ],
9
+ "defaultChecksumScope": "html-text-v1",
10
+ "offline": "Use cached metadata only; fail closed when a critical entry is missing or older than thresholdDays.",
11
+ "drift": "Any drift requires reading the changed page and a human-reviewed PR updating references/pinned-facts.md (and version claims in references/stack.md / references/mobile.md); never auto-apply.",
12
+ "copyright": "Store claim metadata, URLs, hashes, and concise excerpts only; never archive third-party documentation corpora.",
13
+ "cadence": "weekly scheduled-agent refresh; thresholdDays must be >= 14 (2x cadence) so a single missed run never breaches a threshold"
14
+ },
15
+ "sources": [
16
+ {
17
+ "id": "CF-HYPERDRIVE-VERSIONS",
18
+ "service": "Cloudflare Hyperdrive supported databases",
19
+ "kind": "official-docs",
20
+ "stability": "vendor-docs",
21
+ "thresholdDays": 14,
22
+ "critical": true,
23
+ "urls": {
24
+ "primary": "https://developers.cloudflare.com/hyperdrive/reference/supported-databases-and-features/"
25
+ },
26
+ "versionDetection": {
27
+ "type": "manual-review"
28
+ },
29
+ "topics": [
30
+ "hyperdrive-postgres"
31
+ ],
32
+ "affected": [
33
+ "references/pinned-facts.md",
34
+ "references/stack.md",
35
+ "references/data.md"
36
+ ],
37
+ "checksum": "fda2870b95deffce48dca7f3df3707325b1bc4a2d58a17708ee9220bfba5eba1",
38
+ "retrievedAt": "2026-08-12T14:33:11.062Z"
39
+ },
40
+ {
41
+ "id": "CF-R2-PRICING",
42
+ "service": "Cloudflare R2 pricing",
43
+ "kind": "official-docs",
44
+ "stability": "vendor-docs",
45
+ "thresholdDays": 30,
46
+ "critical": false,
47
+ "urls": {
48
+ "primary": "https://developers.cloudflare.com/r2/pricing/"
49
+ },
50
+ "versionDetection": {
51
+ "type": "manual-review"
52
+ },
53
+ "topics": [
54
+ "r2-economics"
55
+ ],
56
+ "affected": [
57
+ "references/pinned-facts.md",
58
+ "references/stack.md"
59
+ ],
60
+ "checksum": "bd5e8d26f7bbf2f92182ad4ac1a59ae9b1d90695120062adaf54c281bd88e81f",
61
+ "retrievedAt": "2026-08-12T14:33:11.062Z"
62
+ },
63
+ {
64
+ "id": "CF-WORKFLOWS-PRICING",
65
+ "service": "Cloudflare Workflows limits and pricing",
66
+ "kind": "official-docs",
67
+ "stability": "vendor-docs",
68
+ "thresholdDays": 30,
69
+ "critical": false,
70
+ "urls": {
71
+ "primary": "https://developers.cloudflare.com/workflows/reference/limits/"
72
+ },
73
+ "versionDetection": {
74
+ "type": "manual-review"
75
+ },
76
+ "topics": [
77
+ "workflows"
78
+ ],
79
+ "affected": [
80
+ "references/pinned-facts.md",
81
+ "references/ai-agents.md"
82
+ ],
83
+ "checksum": "64e10ca4ced4edc042d12a9a24f2e165ea71cb9481c30ac5f067f2f6c9218cda",
84
+ "retrievedAt": "2026-08-12T14:33:11.062Z"
85
+ },
86
+ {
87
+ "id": "BETTER-AUTH-DOCS",
88
+ "service": "Better Auth documentation",
89
+ "kind": "official-docs",
90
+ "stability": "vendor-docs",
91
+ "thresholdDays": 14,
92
+ "critical": true,
93
+ "urls": {
94
+ "primary": "https://better-auth.com/docs/plugins/organization"
95
+ },
96
+ "versionDetection": {
97
+ "type": "npm",
98
+ "package": "better-auth"
99
+ },
100
+ "topics": [
101
+ "better-auth"
102
+ ],
103
+ "affected": [
104
+ "references/pinned-facts.md",
105
+ "references/security.md",
106
+ "references/stack.md"
107
+ ],
108
+ "currentVersion": "1.6.27",
109
+ "versionCheckedAt": "2026-08-12T14:33:11.062Z",
110
+ "checksum": "30edf1b6658a473a00005153a3eafc07de5c3decd6b8f09fc6c32f3a21c4db1c",
111
+ "retrievedAt": "2026-08-12T14:33:11.062Z"
112
+ },
113
+ {
114
+ "id": "EVE-DOCS",
115
+ "service": "Vercel eve agent framework",
116
+ "kind": "official-docs",
117
+ "stability": "beta",
118
+ "thresholdDays": 14,
119
+ "critical": true,
120
+ "urls": {
121
+ "primary": "https://vercel.com/docs/eve"
122
+ },
123
+ "versionDetection": {
124
+ "type": "npm",
125
+ "package": "eve"
126
+ },
127
+ "topics": [
128
+ "eve-deploy"
129
+ ],
130
+ "affected": [
131
+ "references/pinned-facts.md",
132
+ "references/ai-agents.md",
133
+ "references/stack.md"
134
+ ],
135
+ "currentVersion": "0.33.2",
136
+ "versionCheckedAt": "2026-08-12T14:33:11.062Z",
137
+ "checksum": "a777f9da0cb3966a9c7cc06a3c12be34b2928800b370e966e8b6e0f5a5622915",
138
+ "retrievedAt": "2026-08-12T14:33:11.062Z"
139
+ },
140
+ {
141
+ "id": "WORKFLOW-SDK-POSTGRES",
142
+ "service": "Workflow SDK Postgres world deployment constraints",
143
+ "kind": "official-docs",
144
+ "stability": "vendor-docs",
145
+ "thresholdDays": 14,
146
+ "critical": true,
147
+ "urls": {
148
+ "primary": "https://workflow-sdk.dev/worlds/postgres"
149
+ },
150
+ "versionDetection": {
151
+ "type": "npm",
152
+ "package": "@workflow/world-postgres"
153
+ },
154
+ "topics": [
155
+ "eve-deploy"
156
+ ],
157
+ "affected": [
158
+ "references/pinned-facts.md",
159
+ "references/ai-agents.md"
160
+ ],
161
+ "currentVersion": "4.3.3",
162
+ "versionCheckedAt": "2026-08-12T14:33:11.062Z",
163
+ "checksum": "3eca56b5ec9668638d4e00b290c157383dfe8ceaaa334de13bb6244b32fa6839",
164
+ "retrievedAt": "2026-08-12T14:33:11.062Z"
165
+ },
166
+ {
167
+ "id": "NEXTJS-BLOG",
168
+ "service": "Next.js release blog",
169
+ "kind": "official-docs",
170
+ "stability": "vendor-docs",
171
+ "thresholdDays": 30,
172
+ "critical": false,
173
+ "urls": {
174
+ "primary": "https://nextjs.org/blog"
175
+ },
176
+ "versionDetection": {
177
+ "type": "npm",
178
+ "package": "next"
179
+ },
180
+ "topics": [
181
+ "nextjs"
182
+ ],
183
+ "affected": [
184
+ "references/pinned-facts.md",
185
+ "references/web.md",
186
+ "references/stack.md"
187
+ ],
188
+ "currentVersion": "16.3.0",
189
+ "versionCheckedAt": "2026-08-12T14:33:11.062Z",
190
+ "checksum": "9d5d2503e2e8aa7ed1c3f0cb972c78e64b2e3aae5f3ad264bb0a79bd179708f0",
191
+ "retrievedAt": "2026-08-12T14:33:11.062Z"
192
+ },
193
+ {
194
+ "id": "PG-BOSS-NPM",
195
+ "service": "pg-boss job queue",
196
+ "kind": "package-registry",
197
+ "stability": "stable",
198
+ "thresholdDays": 30,
199
+ "critical": false,
200
+ "urls": {
201
+ "primary": "https://registry.npmjs.org/pg-boss/latest"
202
+ },
203
+ "versionDetection": {
204
+ "type": "npm",
205
+ "package": "pg-boss"
206
+ },
207
+ "topics": [
208
+ "jobs"
209
+ ],
210
+ "affected": [
211
+ "references/pinned-facts.md",
212
+ "references/ai-agents.md"
213
+ ],
214
+ "currentVersion": "12.27.0",
215
+ "versionCheckedAt": "2026-08-12T14:33:11.062Z",
216
+ "checksumScope": "http-body",
217
+ "checksum": "abf4bc2795e2df03181a21dfd29c7b9234c933a9dcafa72b4583d590cad609da",
218
+ "retrievedAt": "2026-08-12T14:33:41.513Z"
219
+ },
220
+ {
221
+ "id": "FLUTTER-RELEASES",
222
+ "service": "Flutter release notes",
223
+ "kind": "official-docs",
224
+ "stability": "vendor-docs",
225
+ "thresholdDays": 30,
226
+ "critical": false,
227
+ "urls": {
228
+ "primary": "https://docs.flutter.dev/release/release-notes"
229
+ },
230
+ "versionDetection": {
231
+ "type": "manual-review"
232
+ },
233
+ "topics": [
234
+ "flutter"
235
+ ],
236
+ "affected": [
237
+ "references/pinned-facts.md",
238
+ "references/mobile.md"
239
+ ],
240
+ "checksum": "94f9df6f67615ee05d826995f9709309c5453d0d8e4be11232ca5d463929ed2b",
241
+ "retrievedAt": "2026-08-12T14:33:11.062Z"
242
+ }
243
+ ]
244
+ }
@@ -4,26 +4,22 @@ Condensed operational playbook. The authoritative policies live at the repo root
4
4
 
5
5
  ## Semver for skill content
6
6
 
7
- Consumers depend on rule IDs and rule strength, not an API surface.
7
+ Content is advisory prose and decision tables — no rule IDs, no machine-extracted rule format.
8
8
 
9
9
  | Bump | Content change |
10
10
  |---|---|
11
- | MAJOR | Removing or renaming a rule ID (IDs are stable and permanent never renumber or reuse). Changing a `MUST`/`MUST NOT` so it permits something previously forbidden. Removing or renaming a skill. |
12
- | MINOR | New rules or rule IDs. New references or reference sections. New skill. Loosening ceremony without weakening a `MUST`. Tightening a `SHOULD` to a `MUST`. |
13
- | PATCH | Factual refreshes: version pins, vendor mechanism names, URLs, registry checksums. Typos and non-normative wording. Test/fixture-only changes. |
11
+ | MAJOR | Removing or renaming a skill. A breaking change to a per-project profile format (e.g. `.vegastack/arch.md`) that invalidates existing committed profiles. |
12
+ | MINOR | New reference file or reference section. New or changed recorded decision (e.g. a new "use/not/why" row, a new red line). New skill. |
13
+ | PATCH | Factual refreshes: pinned-fact updates, version pins, vendor mechanism names, URLs, registry checksums. Wording clarifications that don't change the recorded decision. Test/fixture-only changes. |
14
14
 
15
15
  Installer/CLI changes follow ordinary semver on the same package version; a release takes the highest bump either side requires.
16
16
 
17
- ## Two version identities — never conflate
17
+ ## One version identity
18
18
 
19
- | Identity | Lives in | Governs |
20
- |---|---|---|
21
- | Package version | `packages/cli/package.json` (changesets) | npm releases of installer + content snapshot |
22
- | Foundation version | profile schema const, `profile-tool.mjs` default, `foundation-compatibility.json` | the profile/schema contract deployed `.vegastack/architecture` profiles validate against |
23
-
24
- - Bumping the **package** (even MAJOR) must never invalidate a deployed profile — profiles bind to the foundation version.
25
- - Bumping the **foundation** version is a content-contract event: it requires a compatibility entry describing how existing baselines are treated, and at minimum a MINOR package release.
26
- - Each identity has one source of truth; never introduce additional copies of either number.
19
+ There is a single source of truth: the **package version** (`packages/cli/package.json`,
20
+ changesets-managed) — the npm release identity for the installer and every bundled skill's
21
+ content snapshot. No skill tracks a separate content-contract version, and no per-project
22
+ profile carries a schema version to validate against.
27
23
 
28
24
  ## Release flow (tag-driven)
29
25
 
@@ -44,7 +40,7 @@ Contributors do not bump versions in PRs; releases are maintainer-driven.
44
40
 
45
41
  ## Rename a skill
46
42
 
47
- Derived from the stable-ID logic in content-versioning (skill names are consumer-facing identifiers like rule IDs):
43
+ Skill names are consumer-facing identifiers treat a rename as a stable-ID break:
48
44
 
49
45
  1. Rename the directory and the frontmatter `name` in the same commit — they must always stay equal.
50
46
  2. Update every wiring point in the same PR: the packaging allowlist in `packages/cli/scripts/sync-skill.mjs`, the root README skills table row, and any cross-skill or docs links.
@@ -60,4 +56,4 @@ Derived from the stable-ID logic in content-versioning (skill names are consumer
60
56
 
61
57
  ## Refresh branches
62
58
 
63
- Branches named `refresh/**` are reserved for the automated freshness loop and are CI-restricted to `skills/*/refresh/` and `skills/*/references/foundation-compatibility.json`. Human content changes go on normal branches. Never hand-edit checksums/versions/timestamps anywhere — CI re-fetches claimed baselines, so hand-edited values cannot merge.
59
+ Branches named `refresh/**` are reserved for the automated freshness loop and are CI-restricted to `skills/*/refresh/`. Human content changes go on normal branches. Never hand-edit checksums/versions/timestamps anywhere — CI re-fetches claimed baselines, so hand-edited values cannot merge.
@@ -10,13 +10,13 @@ Instructions for the scheduled refresh agent (and any human running a manual ref
10
10
 
11
11
  ## How to refresh
12
12
 
13
- The deterministic runner is repo-shared and hosted in arch-guardian for now. Run from the repo root:
13
+ The deterministic runner is repo-shared, hosted at `tooling/refresh/`. Run from the repo root:
14
14
 
15
15
  1. **Deterministic pass first** (no LLM judgment):
16
- `node skills/arch-guardian/scripts/refresh-evidence.mjs --registry skills/skill-maintainer/refresh/sources.json`
16
+ `node tooling/refresh/refresh-evidence.mjs --registry skills/skill-maintainer/refresh/sources.json`
17
17
  drift/stale/unavailable results are the work-list. Exit 1 with a critical entry means fail-closed: the run must not be silently skipped. All four sources here are critical.
18
18
  2. **Accept verified changes** in the same code path:
19
- `node skills/arch-guardian/scripts/refresh-evidence.mjs --registry skills/skill-maintainer/refresh/sources.json --accept-baselines`
19
+ `node tooling/refresh/refresh-evidence.mjs --registry skills/skill-maintainer/refresh/sources.json --accept-baselines`
20
20
  This writes registry, cache, and drift report together — never hand-edit checksums, versions, or timestamps; they must always come from a run. Baselines are runner-seeded; when a new source is added or a verified change is accepted, this accept-baselines invocation is the only sanctioned way to update them.
21
21
  3. **Semantic verification** for every source the deterministic pass flagged: read the changed page (fetch the registry URL), decide whether any `<!-- source: X -->` marked sentence in `references/standards.md` (or the mirrored SKILL.md hard-limits row) is now wrong, and propose the minimal edit. Unlike version-pin registries, checksum drift here is presumed meaningful until a human reads the diff — these pages define the standards themselves. Editorial churn may be accepted silently only after that read.
22
22
  4. **One standing refresh PR**, branch `refresh/weekly`, force-updated on every run (never stacked duplicates; the weekly workflow .github/workflows/refresh.yml maintains it). PR body lists: each changed source, old→new checksum, links to the evidence, and which marked sentences changed and why. A maintainer review is mandatory before merge.
@@ -1,58 +1,34 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "skills": {
4
- "arch-guardian": {
4
+ "architect": {
5
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"
6
+ "SKILL.md": "70327518548075edd58f140710273df6dba6bd49327252a085b6881aae2f6663",
7
+ "agents/openai.yaml": "5bee46acf49a8c01856eec2a51a57aad95257c064302fca7f5e952016054b4e0",
8
+ "assets/adr-template.md": "72c84eebf90a7de8a6fc79c5165bada2683b38e86ccb1e3936e305f71be67d91",
9
+ "assets/arch-template.md": "a3dbfbd8b8f115e5cf3a922f26571ca469e0f4962d924e88bd9d8fd280b75d89",
10
+ "references/advisory.md": "ecba7d92cbf4dee9a6c9b7e0cb86f863748435be9fde4c0c8f493bcbc8e48249",
11
+ "references/ai-agents.md": "f39af3e8e6ea111157225c2786b428d66c944546898b08e45f12069633cf007e",
12
+ "references/data.md": "6c0384b53b66c914e39b4ca5f146cb50f1b91ca3ca5106e43b5cc2ce17bc59d5",
13
+ "references/infra.md": "cd56381da2d59fb2362fc162246269116cba92f796d0847cbac03e478b600add",
14
+ "references/mobile.md": "19932670613c064c979cf6d675c94213d3b12a5382d6fff4eacd58cb8b2a609c",
15
+ "references/pinned-facts.md": "07212409f708bd00ed69c77e98c61303ed1718514d907eb135c4c8ffe081196e",
16
+ "references/principles.md": "1d33c9f2912c04341c50398e30482c348d98a22ea218b06eca47b7aa247685b1",
17
+ "references/project-profile.md": "f3455643044260405ac47cdbeef5238e87a8ff9fbb285ce256a2aca9be9ff522",
18
+ "references/security.md": "4be060806c63c8c56559c293a818af581c2d7aec29f1830b57570dfda3c69d4a",
19
+ "references/stack.md": "b3aea9bb500b14c5bdb7576252e0af3be012d8c1f849d812c446e82ca2192af4",
20
+ "references/web.md": "df296df0a3c4fbbeda47f49ac96b4f0e9f4c5bba5dd68a428a3e390abd7f2261",
21
+ "refresh/REFRESH.md": "cdf7a06dd70f4b9483aa7a1db8c5e6c8e0a1f1724be22031d1aba1f609d69e22",
22
+ "refresh/sources.json": "38cf2a3fb13b5b4f3eec59d40d4faa4e5edcc0aecb66fbdd031aeefb92fecc01"
47
23
  }
48
24
  },
49
25
  "skill-maintainer": {
50
26
  "files": {
51
27
  "SKILL.md": "bbbf15a9900d9d2009ccfbe163cface9654c81a9a84777718348d97b30739aeb",
52
28
  "agents/openai.yaml": "0b89d4e6416cf20b448f5322f3d7433cfde333d2b4a05b42ed53db3759701fb4",
53
- "references/release-ops.md": "2bde6c55cbe7674678e14b915fc5ebe565413aeb25c3d51a86e195af53004d01",
29
+ "references/release-ops.md": "a32c6dd6fff7b5c44d3d6dbcb32d7f3eb14f1ca61db85c0b31de032727952c3d",
54
30
  "references/standards.md": "3646d0dd0560a87b333f70febf670b093c89b35111132cdb641b763bf184b02f",
55
- "refresh/REFRESH.md": "a9a86a979ef720cf2f316c76f05db0fd9beef591401b95ceb475474fe40bc936",
31
+ "refresh/REFRESH.md": "badbf807de2b2b38a7acb77d4e5a82ec7677afa1cb97abef34c429a81b855508",
56
32
  "refresh/sources.json": "cf38cdf8123a50ea7ef2d1466a87faa648c12e5bc90d9ee9b6ae45632e7d0800"
57
33
  }
58
34
  },