Skip to content

Commit a2f0890

Browse files
committed
chore: point module skills to installed provider guidance
Teach module maintenance skills to load installed shared provider, framework, database, SDK, and platform skills before changing provider-specific behavior.
1 parent ba7df18 commit a2f0890

408 files changed

Lines changed: 2439 additions & 453 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/maintenance.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ These files teach maintainers:
1616

1717
This is a core part of the product, not an afterthought.
1818

19-
## Shared Technology Skills
19+
## Shared Provider And Technology Skills
2020

21-
Technology guidance that applies to multiple modules lives in:
21+
Provider, framework, database, SDK, and platform guidance that applies to multiple modules lives in:
2222

2323
```text
24-
registry/skills/<technology>/SKILL.md
24+
registry/skills/<name>/SKILL.md
2525
```
2626

2727
Reference shared skills from `module.json` in `maintenance.skills`:
@@ -36,6 +36,8 @@ Reference shared skills from `module.json` in `maintenance.skills`:
3636

3737
By default, a skill named the same as the module is read from `skill/SKILL.md`. Other skill names are read from `registry/skills/<name>/SKILL.md`.
3838

39+
Module skills should not duplicate provider API guidance. They should point maintainers to the installed shared skill, for example `.stackfoundry/skills/stripe/SKILL.md`, and keep the module skill focused on ownership, installed files, environment variables, deployment checks, and module-specific invariants.
40+
3941
For modules that need a custom source or install location, use an object entry:
4042

4143
```json
@@ -51,15 +53,15 @@ For modules that need a custom source or install location, use an object entry:
5153

5254
## Installed Location
5355

54-
When a module is installed, module and technology skills are copied to:
56+
When a module is installed, module and shared skills are copied to:
5557

5658
```text
5759
.stackfoundry/skills/<skill>/SKILL.md
5860
```
5961

6062
Generated registry blocks also embed `maintenanceSkills`, so installs from `https://stackfoundry.dev/r/<module>.json` carry the same maintenance guidance as local module installs.
6163

62-
Module skills should explain the files owned by the module, required environment variables, deployment checks, and invariants that future maintainers must preserve. Shared technology skills should stay provider- or framework-level and avoid repeating module-specific instructions.
64+
Module skills should explain the files owned by the module, required environment variables, deployment checks, and invariants that future maintainers must preserve. Shared skills should stay provider-, framework-, database-, SDK-, or platform-level and avoid repeating module-specific instructions.
6365

6466
## Provider Adapter Blocks
6567

@@ -72,4 +74,4 @@ Provider adapter modules should include:
7274
- smoke-test routes or helpers when possible
7375
- rules for keeping secrets server-only
7476

75-
Run `pnpm registry:doctor` to verify module skills, shared technology skills, custom skill targets, and manifest references.
77+
Run `pnpm registry:doctor` to verify module skills, shared provider and technology skills, custom skill targets, and manifest references.

docs/modules.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ The registry now includes core modules, provider adapter examples, and registry-
2121
- maintenance guidance
2222
- install metadata for diff/update safety
2323

24+
Module-specific skills stay focused on ownership, installed files, environment variables, deployment checks, and invariants. Provider, framework, database, SDK, and platform guidance lives in shared skills such as `.stackfoundry/skills/stripe/SKILL.md`, copied from `registry/skills/stripe/SKILL.md` during install.
25+
2426
## Module Families
2527

2628
### Foundation

public/r/account-deletion.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,17 @@
3333
{
3434
"name": "account-deletion",
3535
"target": ".stackfoundry/skills/account-deletion/SKILL.md",
36-
"content": "---\nname: account-deletion\ndescription: Maintain the Account Deletion module installed by StackFoundry.\n---\n\n# Account Deletion Maintenance Instructions\n\n- Preserve the ownership and setup guidance in `docs.md`.\n- Keep source templates small and provider-neutral.\n- Update `tests/checklist.md` with behavior changes.\n- Do not commit secrets, local state, or generated machine metadata.\n- Keep Drizzle schema exports synchronized with `module.json`.\n"
36+
"content": "---\nname: account-deletion\ndescription: Maintain the Account Deletion module installed by StackFoundry.\n---\n\n# Account Deletion Maintenance Instructions\n\n- Preserve the ownership and setup guidance in `docs.md`.\n- Keep source templates small and provider-neutral.\n- Update `tests/checklist.md` with behavior changes.\n- Do not commit secrets, local state, or generated machine metadata.\n- Keep Drizzle schema exports synchronized with `module.json`.\n\n## Shared Skills\n\nWhen provider, framework, or database behavior changes, load the installed shared skill before editing implementation details:\n\n- `.stackfoundry/skills/nextjs/SKILL.md` (source: `registry/skills/nextjs/SKILL.md`)\n- `.stackfoundry/skills/drizzle/SKILL.md` (source: `registry/skills/drizzle/SKILL.md`)\n\nKeep this module skill focused on ownership, installed files, env vars, deployment checks, and module-specific invariants.\n\n"
3737
},
3838
{
3939
"name": "nextjs",
4040
"target": ".stackfoundry/skills/nextjs/SKILL.md",
41-
"content": "---\nname: nextjs\ndescription: Maintain Next.js App Router code installed by StackFoundry modules.\n---\n\n# Next.js Operating Instructions\n\n- Keep server-only data access out of Client Components.\n- Put route handlers under `app/api` and UI routes under the relevant App Router segment.\n- Prefer Server Components for data loading and add `\"use client\"` only for interactivity.\n- Keep public environment variables prefixed with `NEXT_PUBLIC_`; keep secrets server-only.\n- Re-run typecheck and build after changing route handlers, layouts, or shared app configuration.\n"
41+
"content": "---\nname: nextjs\ndescription: Maintain Next.js App Router code installed by StackFoundry modules.\n---\n\n# Next.js Operating Instructions\n\n## Installed Location\n\n- Installed target: `.stackfoundry/skills/nextjs/SKILL.md`\n- Registry source: `registry/skills/nextjs/SKILL.md`\n\nAgents maintaining an installed module should load this shared skill from the installed target when provider, framework, database, SDK, or platform behavior is involved. Keep provider-specific API details here instead of duplicating them inside module maintenance skills.\n\n- Keep server-only data access out of Client Components.\n- Put route handlers under `app/api` and UI routes under the relevant App Router segment.\n- Prefer Server Components for data loading and add `\"use client\"` only for interactivity.\n- Keep public environment variables prefixed with `NEXT_PUBLIC_`; keep secrets server-only.\n- Re-run typecheck and build after changing route handlers, layouts, or shared app configuration.\n"
4242
},
4343
{
4444
"name": "drizzle",
4545
"target": ".stackfoundry/skills/drizzle/SKILL.md",
46-
"content": "---\nname: drizzle\ndescription: Maintain Drizzle ORM and Postgres code installed by StackFoundry modules.\n---\n\n# Drizzle Operating Instructions\n\n- Keep database access in server-only code.\n- Add schema changes under `packages/db/src/schema` and export shared tables from the schema barrel.\n- Generate and commit migrations when schema changes are intended.\n- Use typed query helpers instead of raw SQL unless the query needs a documented escape hatch.\n- Include tenant, organization, or user scope in queries and cache tags whenever data is not global.\n"
46+
"content": "---\nname: drizzle\ndescription: Maintain Drizzle ORM and Postgres code installed by StackFoundry modules.\n---\n\n# Drizzle Operating Instructions\n\n## Installed Location\n\n- Installed target: `.stackfoundry/skills/drizzle/SKILL.md`\n- Registry source: `registry/skills/drizzle/SKILL.md`\n\nAgents maintaining an installed module should load this shared skill from the installed target when provider, framework, database, SDK, or platform behavior is involved. Keep provider-specific API details here instead of duplicating them inside module maintenance skills.\n\n- Keep database access in server-only code.\n- Add schema changes under `packages/db/src/schema` and export shared tables from the schema barrel.\n- Generate and commit migrations when schema changes are intended.\n- Use typed query helpers instead of raw SQL unless the query needs a documented escape hatch.\n- Include tenant, organization, or user scope in queries and cache tags whenever data is not global.\n"
4747
}
4848
],
4949
"envVars": {},

public/r/account-modes.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,17 @@
3535
{
3636
"name": "account-modes",
3737
"target": ".stackfoundry/skills/account-modes/SKILL.md",
38-
"content": "---\nname: account-modes\ndescription: Maintain the Account Modes module installed by StackFoundry.\n---\n\n# Account Modes Skill\n\n- Do not mix personal and organization data without an explicit active account context.\n- Hide organization invitations, roles, and seat billing when the app is personal-only.\n- Keep billing customer ownership aligned with the active account mode.\n- Make account switching explicit and auditable.\n- Update onboarding, navigation, and settings together when the account mode changes.\n"
38+
"content": "---\nname: account-modes\ndescription: Maintain the Account Modes module installed by StackFoundry.\n---\n\n# Account Modes Skill\n\n- Do not mix personal and organization data without an explicit active account context.\n- Hide organization invitations, roles, and seat billing when the app is personal-only.\n- Keep billing customer ownership aligned with the active account mode.\n- Make account switching explicit and auditable.\n- Update onboarding, navigation, and settings together when the account mode changes.\n\n## Shared Skills\n\nWhen provider, framework, or database behavior changes, load the installed shared skill before editing implementation details:\n\n- `.stackfoundry/skills/nextjs/SKILL.md` (source: `registry/skills/nextjs/SKILL.md`)\n- `.stackfoundry/skills/drizzle/SKILL.md` (source: `registry/skills/drizzle/SKILL.md`)\n\nKeep this module skill focused on ownership, installed files, env vars, deployment checks, and module-specific invariants.\n\n"
3939
},
4040
{
4141
"name": "nextjs",
4242
"target": ".stackfoundry/skills/nextjs/SKILL.md",
43-
"content": "---\nname: nextjs\ndescription: Maintain Next.js App Router code installed by StackFoundry modules.\n---\n\n# Next.js Operating Instructions\n\n- Keep server-only data access out of Client Components.\n- Put route handlers under `app/api` and UI routes under the relevant App Router segment.\n- Prefer Server Components for data loading and add `\"use client\"` only for interactivity.\n- Keep public environment variables prefixed with `NEXT_PUBLIC_`; keep secrets server-only.\n- Re-run typecheck and build after changing route handlers, layouts, or shared app configuration.\n"
43+
"content": "---\nname: nextjs\ndescription: Maintain Next.js App Router code installed by StackFoundry modules.\n---\n\n# Next.js Operating Instructions\n\n## Installed Location\n\n- Installed target: `.stackfoundry/skills/nextjs/SKILL.md`\n- Registry source: `registry/skills/nextjs/SKILL.md`\n\nAgents maintaining an installed module should load this shared skill from the installed target when provider, framework, database, SDK, or platform behavior is involved. Keep provider-specific API details here instead of duplicating them inside module maintenance skills.\n\n- Keep server-only data access out of Client Components.\n- Put route handlers under `app/api` and UI routes under the relevant App Router segment.\n- Prefer Server Components for data loading and add `\"use client\"` only for interactivity.\n- Keep public environment variables prefixed with `NEXT_PUBLIC_`; keep secrets server-only.\n- Re-run typecheck and build after changing route handlers, layouts, or shared app configuration.\n"
4444
},
4545
{
4646
"name": "drizzle",
4747
"target": ".stackfoundry/skills/drizzle/SKILL.md",
48-
"content": "---\nname: drizzle\ndescription: Maintain Drizzle ORM and Postgres code installed by StackFoundry modules.\n---\n\n# Drizzle Operating Instructions\n\n- Keep database access in server-only code.\n- Add schema changes under `packages/db/src/schema` and export shared tables from the schema barrel.\n- Generate and commit migrations when schema changes are intended.\n- Use typed query helpers instead of raw SQL unless the query needs a documented escape hatch.\n- Include tenant, organization, or user scope in queries and cache tags whenever data is not global.\n"
48+
"content": "---\nname: drizzle\ndescription: Maintain Drizzle ORM and Postgres code installed by StackFoundry modules.\n---\n\n# Drizzle Operating Instructions\n\n## Installed Location\n\n- Installed target: `.stackfoundry/skills/drizzle/SKILL.md`\n- Registry source: `registry/skills/drizzle/SKILL.md`\n\nAgents maintaining an installed module should load this shared skill from the installed target when provider, framework, database, SDK, or platform behavior is involved. Keep provider-specific API details here instead of duplicating them inside module maintenance skills.\n\n- Keep database access in server-only code.\n- Add schema changes under `packages/db/src/schema` and export shared tables from the schema barrel.\n- Generate and commit migrations when schema changes are intended.\n- Use typed query helpers instead of raw SQL unless the query needs a documented escape hatch.\n- Include tenant, organization, or user scope in queries and cache tags whenever data is not global.\n"
4949
}
5050
],
5151
"envVars": {},

public/r/account-settings.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@
2525
{
2626
"name": "account-settings",
2727
"target": ".stackfoundry/skills/account-settings/SKILL.md",
28-
"content": "---\nname: account-settings\ndescription: Maintain the Account Settings module installed by StackFoundry.\n---\n\n# Account Settings Maintenance Instructions\n\n- Preserve the module boundary described in `docs.md`.\n- Keep public APIs small and typed.\n- Update tests/checklist.md when behavior changes.\n- Do not introduce secrets, generated machine metadata, or provider lock-in.\n"
28+
"content": "---\nname: account-settings\ndescription: Maintain the Account Settings module installed by StackFoundry.\n---\n\n# Account Settings Maintenance Instructions\n\n- Preserve the module boundary described in `docs.md`.\n- Keep public APIs small and typed.\n- Update tests/checklist.md when behavior changes.\n- Do not introduce secrets, generated machine metadata, or provider lock-in.\n\n## Shared Skills\n\nWhen provider, framework, or database behavior changes, load the installed shared skill before editing implementation details:\n\n- `.stackfoundry/skills/nextjs/SKILL.md` (source: `registry/skills/nextjs/SKILL.md`)\n\nKeep this module skill focused on ownership, installed files, env vars, deployment checks, and module-specific invariants.\n\n"
2929
},
3030
{
3131
"name": "nextjs",
3232
"target": ".stackfoundry/skills/nextjs/SKILL.md",
33-
"content": "---\nname: nextjs\ndescription: Maintain Next.js App Router code installed by StackFoundry modules.\n---\n\n# Next.js Operating Instructions\n\n- Keep server-only data access out of Client Components.\n- Put route handlers under `app/api` and UI routes under the relevant App Router segment.\n- Prefer Server Components for data loading and add `\"use client\"` only for interactivity.\n- Keep public environment variables prefixed with `NEXT_PUBLIC_`; keep secrets server-only.\n- Re-run typecheck and build after changing route handlers, layouts, or shared app configuration.\n"
33+
"content": "---\nname: nextjs\ndescription: Maintain Next.js App Router code installed by StackFoundry modules.\n---\n\n# Next.js Operating Instructions\n\n## Installed Location\n\n- Installed target: `.stackfoundry/skills/nextjs/SKILL.md`\n- Registry source: `registry/skills/nextjs/SKILL.md`\n\nAgents maintaining an installed module should load this shared skill from the installed target when provider, framework, database, SDK, or platform behavior is involved. Keep provider-specific API details here instead of duplicating them inside module maintenance skills.\n\n- Keep server-only data access out of Client Components.\n- Put route handlers under `app/api` and UI routes under the relevant App Router segment.\n- Prefer Server Components for data loading and add `\"use client\"` only for interactivity.\n- Keep public environment variables prefixed with `NEXT_PUBLIC_`; keep secrets server-only.\n- Re-run typecheck and build after changing route handlers, layouts, or shared app configuration.\n"
3434
}
3535
],
3636
"envVars": {},

public/r/admin-console.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@
2727
{
2828
"name": "admin-console",
2929
"target": ".stackfoundry/skills/admin-console/SKILL.md",
30-
"content": "---\nname: admin-console\ndescription: Maintain the Admin Console module installed by StackFoundry.\n---\n\n# Admin Console Maintenance Instructions\n\n- Preserve the module ownership described in `docs.md`.\n- Keep default source templates compact, typed, and provider-neutral.\n- Update `tests/checklist.md` when behavior changes.\n- Do not commit secrets, local state, or generated machine metadata.\n"
30+
"content": "---\nname: admin-console\ndescription: Maintain the Admin Console module installed by StackFoundry.\n---\n\n# Admin Console Maintenance Instructions\n\n- Preserve the module ownership described in `docs.md`.\n- Keep default source templates compact, typed, and provider-neutral.\n- Update `tests/checklist.md` when behavior changes.\n- Do not commit secrets, local state, or generated machine metadata.\n\n## Shared Skills\n\nWhen provider, framework, or database behavior changes, load the installed shared skill before editing implementation details:\n\n- `.stackfoundry/skills/nextjs/SKILL.md` (source: `registry/skills/nextjs/SKILL.md`)\n\nKeep this module skill focused on ownership, installed files, env vars, deployment checks, and module-specific invariants.\n\n"
3131
},
3232
{
3333
"name": "nextjs",
3434
"target": ".stackfoundry/skills/nextjs/SKILL.md",
35-
"content": "---\nname: nextjs\ndescription: Maintain Next.js App Router code installed by StackFoundry modules.\n---\n\n# Next.js Operating Instructions\n\n- Keep server-only data access out of Client Components.\n- Put route handlers under `app/api` and UI routes under the relevant App Router segment.\n- Prefer Server Components for data loading and add `\"use client\"` only for interactivity.\n- Keep public environment variables prefixed with `NEXT_PUBLIC_`; keep secrets server-only.\n- Re-run typecheck and build after changing route handlers, layouts, or shared app configuration.\n"
35+
"content": "---\nname: nextjs\ndescription: Maintain Next.js App Router code installed by StackFoundry modules.\n---\n\n# Next.js Operating Instructions\n\n## Installed Location\n\n- Installed target: `.stackfoundry/skills/nextjs/SKILL.md`\n- Registry source: `registry/skills/nextjs/SKILL.md`\n\nAgents maintaining an installed module should load this shared skill from the installed target when provider, framework, database, SDK, or platform behavior is involved. Keep provider-specific API details here instead of duplicating them inside module maintenance skills.\n\n- Keep server-only data access out of Client Components.\n- Put route handlers under `app/api` and UI routes under the relevant App Router segment.\n- Prefer Server Components for data loading and add `\"use client\"` only for interactivity.\n- Keep public environment variables prefixed with `NEXT_PUBLIC_`; keep secrets server-only.\n- Re-run typecheck and build after changing route handlers, layouts, or shared app configuration.\n"
3636
}
3737
],
3838
"envVars": {},

0 commit comments

Comments
 (0)