@bonesofspring/ai-rules 0.2.28 → 0.2.29
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/CHANGELOG.md +7 -0
- package/README.md +1 -1
- package/docs/MAVIS-COMPATIBILITY.md +10 -6
- package/docs/MAVIS.md +15 -6
- package/docs/OPENCODE-COMPATIBILITY.md +2 -2
- package/docs/OPENCODE.md +1 -1
- package/package.json +1 -1
- package/presets/_shared/core/meta/preset-pr-checklist.md +2 -2
- package/presets/claude/android-kotlin/CLAUDE.md +3 -1
- package/presets/claude/android-kotlin/REPO_AGENTS.md +1 -1
- package/presets/claude/android-kotlin/hooks/README.md +6 -5
- package/presets/claude/android-kotlin/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/android-kotlin/hooks/examples/README.md +2 -0
- package/presets/claude/android-kotlin/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/android-kotlin/rules/README.md +1 -1
- package/presets/claude/android-kotlin/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/android-kotlin/settings.json +23 -0
- package/presets/claude/go/CLAUDE.md +3 -1
- package/presets/claude/go/REPO_AGENTS.md +1 -1
- package/presets/claude/go/hooks/README.md +6 -5
- package/presets/claude/go/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/go/hooks/examples/README.md +2 -0
- package/presets/claude/go/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/go/rules/README.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/go/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/go/settings.json +23 -0
- package/presets/claude/ios-swift/CLAUDE.md +3 -1
- package/presets/claude/ios-swift/REPO_AGENTS.md +1 -1
- package/presets/claude/ios-swift/hooks/README.md +6 -5
- package/presets/claude/ios-swift/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/ios-swift/hooks/examples/README.md +2 -0
- package/presets/claude/ios-swift/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/ios-swift/rules/README.md +1 -1
- package/presets/claude/ios-swift/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/ios-swift/settings.json +23 -0
- package/presets/claude/java/CLAUDE.md +3 -1
- package/presets/claude/java/REPO_AGENTS.md +1 -1
- package/presets/claude/java/hooks/README.md +6 -5
- package/presets/claude/java/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/java/hooks/examples/README.md +2 -0
- package/presets/claude/java/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/java/rules/README.md +1 -1
- package/presets/claude/java/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/java/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/java/settings.json +23 -0
- package/presets/claude/mcp-ts/CLAUDE.md +3 -1
- package/presets/claude/mcp-ts/REPO_AGENTS.md +1 -1
- package/presets/claude/mcp-ts/hooks/README.md +8 -3
- package/presets/claude/mcp-ts/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/mcp-ts/hooks/examples/README.md +5 -0
- package/presets/claude/mcp-ts/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/mcp-ts/rules/README.md +1 -1
- package/presets/claude/mcp-ts/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/mcp-ts/settings.json +23 -0
- package/presets/claude/next/CLAUDE.md +3 -1
- package/presets/claude/next/REPO_AGENTS.md +1 -1
- package/presets/claude/next/hooks/README.md +10 -1
- package/presets/claude/next/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/next/hooks/examples/README.md +2 -0
- package/presets/claude/next/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/next/rules/README.md +1 -1
- package/presets/claude/next/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/next/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/next/settings.json +23 -0
- package/presets/claude/nuxt/CLAUDE.md +3 -1
- package/presets/claude/nuxt/REPO_AGENTS.md +1 -1
- package/presets/claude/nuxt/hooks/README.md +7 -4
- package/presets/claude/nuxt/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/nuxt/hooks/examples/README.md +2 -0
- package/presets/claude/nuxt/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/nuxt/rules/README.md +1 -1
- package/presets/claude/nuxt/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/nuxt/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/nuxt/settings.json +23 -0
- package/presets/claude/php-hexagonal/CLAUDE.md +3 -1
- package/presets/claude/php-hexagonal/REPO_AGENTS.md +1 -1
- package/presets/claude/php-hexagonal/hooks/README.md +6 -5
- package/presets/claude/php-hexagonal/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/php-hexagonal/hooks/examples/README.md +3 -1
- package/presets/claude/php-hexagonal/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/php-hexagonal/rules/README.md +1 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/php-hexagonal/settings.json +23 -0
- package/presets/claude/php-laravel/CLAUDE.md +6 -0
- package/presets/claude/php-laravel/REPO_AGENTS.md +1 -1
- package/presets/claude/php-laravel/hooks/README.md +6 -5
- package/presets/claude/php-laravel/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/php-laravel/hooks/examples/README.md +3 -1
- package/presets/claude/php-laravel/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/php-laravel/rules/README.md +1 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/php-laravel/settings.json +23 -0
- package/presets/claude/svelte/CLAUDE.md +3 -1
- package/presets/claude/svelte/REPO_AGENTS.md +1 -1
- package/presets/claude/svelte/hooks/README.md +7 -4
- package/presets/claude/svelte/hooks/chain-team-phases.sh +18 -0
- package/presets/claude/svelte/hooks/examples/README.md +2 -0
- package/presets/claude/svelte/hooks/guard-shell-command.sh +32 -9
- package/presets/claude/svelte/rules/README.md +1 -1
- package/presets/claude/svelte/rules/tooling-and-review/ai-local-overlay.md +0 -5
- package/presets/claude/svelte/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/svelte/settings.json +23 -0
- package/presets/cursor/android-kotlin/REPO_AGENTS.md +1 -1
- package/presets/cursor/android-kotlin/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/go/REPO_AGENTS.md +1 -1
- package/presets/cursor/go/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/ios-swift/REPO_AGENTS.md +1 -1
- package/presets/cursor/ios-swift/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/java/REPO_AGENTS.md +1 -1
- package/presets/cursor/java/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/mcp-ts/REPO_AGENTS.md +1 -1
- package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/next/REPO_AGENTS.md +1 -1
- package/presets/cursor/next/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/nuxt/REPO_AGENTS.md +1 -1
- package/presets/cursor/nuxt/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/php-hexagonal/REPO_AGENTS.md +1 -1
- package/presets/cursor/php-hexagonal/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/php-laravel/REPO_AGENTS.md +1 -1
- package/presets/cursor/php-laravel/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/svelte/REPO_AGENTS.md +1 -1
- package/presets/cursor/svelte/rules/preset-pr-checklist.mdc +2 -2
- package/presets/mavis/README.md +2 -0
- package/presets/mavis/android-kotlin/MAVIS.md +10 -1
- package/presets/mavis/android-kotlin/REPO_AGENTS.md +1 -1
- package/presets/mavis/android-kotlin/adapter-map.json +1 -1
- package/presets/mavis/android-kotlin/rules/preset-pr-checklist.md +2 -2
- package/presets/mavis/go/MAVIS.md +10 -1
- package/presets/mavis/go/REPO_AGENTS.md +1 -1
- package/presets/mavis/go/adapter-map.json +1 -1
- package/presets/mavis/go/rules/preset-pr-checklist.md +2 -2
- package/presets/mavis/ios-swift/MAVIS.md +10 -1
- package/presets/mavis/ios-swift/REPO_AGENTS.md +1 -1
- package/presets/mavis/ios-swift/adapter-map.json +1 -1
- package/presets/mavis/ios-swift/rules/preset-pr-checklist.md +2 -2
- package/presets/mavis/java/MAVIS.md +10 -1
- package/presets/mavis/java/REPO_AGENTS.md +1 -1
- package/presets/mavis/java/adapter-map.json +1 -1
- package/presets/mavis/java/rules/preset-pr-checklist.md +2 -2
- package/presets/mavis/mcp-ts/MAVIS.md +10 -1
- package/presets/mavis/mcp-ts/REPO_AGENTS.md +1 -1
- package/presets/mavis/mcp-ts/adapter-map.json +1 -1
- package/presets/mavis/mcp-ts/rules/preset-pr-checklist.md +2 -2
- package/presets/mavis/next/MAVIS.md +10 -1
- package/presets/mavis/next/REPO_AGENTS.md +1 -1
- package/presets/mavis/next/adapter-map.json +1 -1
- package/presets/mavis/next/rules/preset-pr-checklist.md +2 -2
- package/presets/mavis/nuxt/MAVIS.md +10 -1
- package/presets/mavis/nuxt/REPO_AGENTS.md +1 -1
- package/presets/mavis/nuxt/adapter-map.json +1 -1
- package/presets/mavis/nuxt/rules/preset-pr-checklist.md +2 -2
- package/presets/mavis/php-hexagonal/MAVIS.md +10 -1
- package/presets/mavis/php-hexagonal/REPO_AGENTS.md +1 -1
- package/presets/mavis/php-hexagonal/adapter-map.json +1 -1
- package/presets/mavis/php-hexagonal/rules/preset-pr-checklist.md +2 -2
- package/presets/mavis/php-laravel/MAVIS.md +10 -1
- package/presets/mavis/php-laravel/REPO_AGENTS.md +1 -1
- package/presets/mavis/php-laravel/adapter-map.json +1 -1
- package/presets/mavis/php-laravel/rules/preset-pr-checklist.md +2 -2
- package/presets/mavis/platform-contract.json +4 -4
- package/presets/mavis/svelte/MAVIS.md +10 -1
- package/presets/mavis/svelte/REPO_AGENTS.md +1 -1
- package/presets/mavis/svelte/adapter-map.json +1 -1
- package/presets/mavis/svelte/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/README.md +1 -1
- package/presets/opencode/android-kotlin/OPENCODE.md +8 -1
- package/presets/opencode/android-kotlin/REPO_AGENTS.md +1 -1
- package/presets/opencode/android-kotlin/adapter-map.json +1 -1
- package/presets/opencode/android-kotlin/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/go/OPENCODE.md +8 -1
- package/presets/opencode/go/REPO_AGENTS.md +1 -1
- package/presets/opencode/go/adapter-map.json +1 -1
- package/presets/opencode/go/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/ios-swift/OPENCODE.md +8 -1
- package/presets/opencode/ios-swift/REPO_AGENTS.md +1 -1
- package/presets/opencode/ios-swift/adapter-map.json +1 -1
- package/presets/opencode/ios-swift/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/java/OPENCODE.md +8 -1
- package/presets/opencode/java/REPO_AGENTS.md +1 -1
- package/presets/opencode/java/adapter-map.json +1 -1
- package/presets/opencode/java/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/mcp-ts/OPENCODE.md +8 -1
- package/presets/opencode/mcp-ts/REPO_AGENTS.md +1 -1
- package/presets/opencode/mcp-ts/adapter-map.json +1 -1
- package/presets/opencode/mcp-ts/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/next/OPENCODE.md +8 -1
- package/presets/opencode/next/REPO_AGENTS.md +1 -1
- package/presets/opencode/next/adapter-map.json +1 -1
- package/presets/opencode/next/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/nuxt/OPENCODE.md +8 -1
- package/presets/opencode/nuxt/REPO_AGENTS.md +1 -1
- package/presets/opencode/nuxt/adapter-map.json +1 -1
- package/presets/opencode/nuxt/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/php-hexagonal/OPENCODE.md +8 -1
- package/presets/opencode/php-hexagonal/REPO_AGENTS.md +1 -1
- package/presets/opencode/php-hexagonal/adapter-map.json +1 -1
- package/presets/opencode/php-hexagonal/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/php-laravel/OPENCODE.md +8 -1
- package/presets/opencode/php-laravel/REPO_AGENTS.md +1 -1
- package/presets/opencode/php-laravel/adapter-map.json +1 -1
- package/presets/opencode/php-laravel/rules/preset-pr-checklist.md +2 -2
- package/presets/opencode/platform-contract.json +1 -1
- package/presets/opencode/svelte/OPENCODE.md +8 -1
- package/presets/opencode/svelte/REPO_AGENTS.md +1 -1
- package/presets/opencode/svelte/adapter-map.json +1 -1
- package/presets/opencode/svelte/rules/preset-pr-checklist.md +2 -2
- package/scripts/check-local-overlay.sh +40 -4
- package/scripts/check-mavis-local-overlay.mjs +23 -0
- package/scripts/check-mavis-platform-contract.mjs +5 -2
- package/scripts/check-opencode-local-overlay.mjs +19 -0
- package/scripts/check-opencode-platform-contract.mjs +5 -2
- package/scripts/check-preset-token-budget.sh +7 -0
- package/scripts/fixtures/cli-golden/claude/next.json +10 -10
- package/scripts/fixtures/cli-golden/cursor/next.json +2 -2
- package/scripts/fixtures/cli-golden/mavis/android-kotlin.json +3 -3
- package/scripts/fixtures/cli-golden/mavis/go.json +3 -3
- package/scripts/fixtures/cli-golden/mavis/ios-swift.json +3 -3
- package/scripts/fixtures/cli-golden/mavis/java.json +3 -3
- package/scripts/fixtures/cli-golden/mavis/mcp-ts.json +3 -3
- package/scripts/fixtures/cli-golden/mavis/next.json +3 -3
- package/scripts/fixtures/cli-golden/mavis/nuxt.json +3 -3
- package/scripts/fixtures/cli-golden/mavis/php-hexagonal.json +3 -3
- package/scripts/fixtures/cli-golden/mavis/php-laravel.json +3 -3
- package/scripts/fixtures/cli-golden/mavis/svelte.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/android-kotlin.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/go.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/ios-swift.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/java.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/mcp-ts.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/next.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/nuxt.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/php-hexagonal.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/php-laravel.json +3 -3
- package/scripts/fixtures/cli-golden/opencode/svelte.json +3 -3
- package/scripts/lib/generate-mavis-adapter.mjs +10 -1
- package/scripts/lib/generate-opencode-adapter.mjs +8 -1
- package/scripts/sync-claude-settings.mjs +25 -0
- package/scripts/sync-dogfood-claude.sh +62 -0
- package/scripts/test-mavis-orchestration.mjs +3 -2
|
@@ -21,7 +21,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
21
21
|
- [ ] **README:** stack `rules/README.md` core→stack mapping / catalog updated if stems added
|
|
22
22
|
- [ ] **CHANGELOG / package README:** note when public preset paths or install surface change
|
|
23
23
|
- [ ] **i18n anchors:** kept-marked Cyrillic fragments in `tests-unit.md(c)` stay consistent with their English counterparts. Run `packages/ai-rules/scripts/check-preset-i18n.sh`.
|
|
24
|
-
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`
|
|
24
|
+
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, and `sync-dogfood-opencode.sh` when those platforms changed, or document an intentional skip, when maintaining this monorepo
|
|
25
25
|
- [ ] **shared-core drift:** for embed-mode stems, run `packages/ai-rules/scripts/check-shared-core-drift.sh` (or document intentional fork)
|
|
26
26
|
|
|
27
27
|
## Pointers
|
|
@@ -31,6 +31,6 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
31
31
|
- Budget: `preset-token-budget`
|
|
32
32
|
- Leakage: `preset-no-cross-stack-leakage`
|
|
33
33
|
- Validation: stack `agents/build-verifier.md` → preset-structure section
|
|
34
|
-
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
34
|
+
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
35
35
|
- Drift script: `packages/ai-rules/scripts/check-shared-core-drift.sh`
|
|
36
36
|
- Orchestrator: when editing presets, load this checklist + twin-sync
|
|
@@ -12,7 +12,9 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
12
12
|
- Other rules: lazy `Read` `.opencode/rules/<stem>.md` when the task matches.
|
|
13
13
|
- Agents: native `@name` / Task from `.opencode/agents/`.
|
|
14
14
|
- Commands: native `/task` from `.opencode/commands/`.
|
|
15
|
-
- After a producer receipt, run `
|
|
15
|
+
- After a producer receipt, run the chain by hand (`projectHooks` is `manual`; this preset ships no plugin):
|
|
16
|
+
`printf '%s\n' '{"status":"completed"}' | bash .opencode/hooks/chain-team-phases.sh`.
|
|
17
|
+
Slash commands are native (`/task` from `.opencode/commands/`). Do not assume `SubagentStop` auto-chain.
|
|
16
18
|
Agents must not write lifecycle fields in `status.json` / `metrics.json`.
|
|
17
19
|
|
|
18
20
|
## Essential rules (read every turn)
|
|
@@ -22,6 +24,11 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
22
24
|
- `.opencode/rules/code-quality-and-refactoring.md`
|
|
23
25
|
- `.opencode/rules/ai-local-overlay.md`
|
|
24
26
|
|
|
27
|
+
Every turn, probe `ls -la .ai.local`, then apply `.ai.local/rules/*.md` and
|
|
28
|
+
`.ai.local/conventions.md`. Acknowledge `Using .ai.local: <rule-name>`.
|
|
29
|
+
Guide: `docs/LOCAL-OVERLAY.md`. These essential rules are a prompt contract.
|
|
30
|
+
`nativeProjectRules` is `no-equivalent` — do not claim engine `alwaysApply`.
|
|
31
|
+
|
|
25
32
|
See `.opencode/rules/README.md` for the full catalog and loading strategy.
|
|
26
33
|
|
|
27
34
|
## Harness wiring
|
|
@@ -71,4 +71,4 @@ A `.ai.local/` directory MAY exist at the repo root or at any nesting depth in m
|
|
|
71
71
|
|
|
72
72
|
Plain markdown rules under `.ai.local/rules/*.md` are read by the agent with higher priority than preset rules. Living gotchas live in `.ai.local/conventions.md`.
|
|
73
73
|
|
|
74
|
-
Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule
|
|
74
|
+
On every turn, probe `ls -la .ai.local`, apply `.ai.local/rules/*.md` and `.ai.local/conventions.md`, and acknowledge `Using .ai.local: <rule-name>`. Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule is always-on on Cursor and session-start on Claude (no `paths:`). Mavis and OpenCode have no native `alwaysApply`; this section plus the platform entry's essential-rules list is the reinforcement.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "opencode",
|
|
4
4
|
"stack": "next",
|
|
5
5
|
"semanticSource": "cursor/next",
|
|
6
|
-
"sourceRevision": "
|
|
6
|
+
"sourceRevision": "d4543a561129f18289d5c83d94038bbf7a973c57bb498f9b58c2ed37ceca3a07",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
9
9
|
"source": "AGENTS.md",
|
|
@@ -21,7 +21,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
21
21
|
- [ ] **README:** stack `rules/README.md` core→stack mapping / catalog updated if stems added
|
|
22
22
|
- [ ] **CHANGELOG / package README:** note when public preset paths or install surface change
|
|
23
23
|
- [ ] **i18n anchors:** kept-marked Cyrillic fragments in `tests-unit.md(c)` stay consistent with their English counterparts. Run `packages/ai-rules/scripts/check-preset-i18n.sh`.
|
|
24
|
-
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`
|
|
24
|
+
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, and `sync-dogfood-opencode.sh` when those platforms changed, or document an intentional skip, when maintaining this monorepo
|
|
25
25
|
- [ ] **shared-core drift:** for embed-mode stems, run `packages/ai-rules/scripts/check-shared-core-drift.sh` (or document intentional fork)
|
|
26
26
|
|
|
27
27
|
## Pointers
|
|
@@ -31,6 +31,6 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
31
31
|
- Budget: `preset-token-budget`
|
|
32
32
|
- Leakage: `preset-no-cross-stack-leakage`
|
|
33
33
|
- Validation: stack `agents/build-verifier.md` → preset-structure section
|
|
34
|
-
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
34
|
+
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
35
35
|
- Drift script: `packages/ai-rules/scripts/check-shared-core-drift.sh`
|
|
36
36
|
- Orchestrator: when editing presets, load this checklist + twin-sync
|
|
@@ -12,7 +12,9 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
12
12
|
- Other rules: lazy `Read` `.opencode/rules/<stem>.md` when the task matches.
|
|
13
13
|
- Agents: native `@name` / Task from `.opencode/agents/`.
|
|
14
14
|
- Commands: native `/task` from `.opencode/commands/`.
|
|
15
|
-
- After a producer receipt, run `
|
|
15
|
+
- After a producer receipt, run the chain by hand (`projectHooks` is `manual`; this preset ships no plugin):
|
|
16
|
+
`printf '%s\n' '{"status":"completed"}' | bash .opencode/hooks/chain-team-phases.sh`.
|
|
17
|
+
Slash commands are native (`/task` from `.opencode/commands/`). Do not assume `SubagentStop` auto-chain.
|
|
16
18
|
Agents must not write lifecycle fields in `status.json` / `metrics.json`.
|
|
17
19
|
|
|
18
20
|
## Essential rules (read every turn)
|
|
@@ -22,6 +24,11 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
22
24
|
- `.opencode/rules/code-quality-and-refactoring.md`
|
|
23
25
|
- `.opencode/rules/ai-local-overlay.md`
|
|
24
26
|
|
|
27
|
+
Every turn, probe `ls -la .ai.local`, then apply `.ai.local/rules/*.md` and
|
|
28
|
+
`.ai.local/conventions.md`. Acknowledge `Using .ai.local: <rule-name>`.
|
|
29
|
+
Guide: `docs/LOCAL-OVERLAY.md`. These essential rules are a prompt contract.
|
|
30
|
+
`nativeProjectRules` is `no-equivalent` — do not claim engine `alwaysApply`.
|
|
31
|
+
|
|
25
32
|
See `.opencode/rules/README.md` for the full catalog and loading strategy.
|
|
26
33
|
|
|
27
34
|
## Harness wiring
|
|
@@ -72,4 +72,4 @@ A `.ai.local/` directory MAY exist at the repo root or at any nesting depth in m
|
|
|
72
72
|
|
|
73
73
|
Plain markdown rules under `.ai.local/rules/*.md` are read by the agent with higher priority than preset rules. Living gotchas live in `.ai.local/conventions.md`.
|
|
74
74
|
|
|
75
|
-
Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule
|
|
75
|
+
On every turn, probe `ls -la .ai.local`, apply `.ai.local/rules/*.md` and `.ai.local/conventions.md`, and acknowledge `Using .ai.local: <rule-name>`. Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule is always-on on Cursor and session-start on Claude (no `paths:`). Mavis and OpenCode have no native `alwaysApply`; this section plus the platform entry's essential-rules list is the reinforcement.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "opencode",
|
|
4
4
|
"stack": "nuxt",
|
|
5
5
|
"semanticSource": "cursor/nuxt",
|
|
6
|
-
"sourceRevision": "
|
|
6
|
+
"sourceRevision": "f7f0e3abbcd5d9c3a51bc16d2c1e1ed8d6cae98351f48f74fc9984e1e374675d",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
9
9
|
"source": "AGENTS.md",
|
|
@@ -21,7 +21,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
21
21
|
- [ ] **README:** stack `rules/README.md` core→stack mapping / catalog updated if stems added
|
|
22
22
|
- [ ] **CHANGELOG / package README:** note when public preset paths or install surface change
|
|
23
23
|
- [ ] **i18n anchors:** kept-marked Cyrillic fragments in `tests-unit.md(c)` stay consistent with their English counterparts. Run `packages/ai-rules/scripts/check-preset-i18n.sh`.
|
|
24
|
-
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`
|
|
24
|
+
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, and `sync-dogfood-opencode.sh` when those platforms changed, or document an intentional skip, when maintaining this monorepo
|
|
25
25
|
- [ ] **shared-core drift:** for embed-mode stems, run `packages/ai-rules/scripts/check-shared-core-drift.sh` (or document intentional fork)
|
|
26
26
|
|
|
27
27
|
## Pointers
|
|
@@ -31,6 +31,6 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
31
31
|
- Budget: `preset-token-budget`
|
|
32
32
|
- Leakage: `preset-no-cross-stack-leakage`
|
|
33
33
|
- Validation: stack `agents/build-verifier.md` → preset-structure section
|
|
34
|
-
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
34
|
+
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
35
35
|
- Drift script: `packages/ai-rules/scripts/check-shared-core-drift.sh`
|
|
36
36
|
- Orchestrator: when editing presets, load this checklist + twin-sync
|
|
@@ -12,7 +12,9 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
12
12
|
- Other rules: lazy `Read` `.opencode/rules/<stem>.md` when the task matches.
|
|
13
13
|
- Agents: native `@name` / Task from `.opencode/agents/`.
|
|
14
14
|
- Commands: native `/task` from `.opencode/commands/`.
|
|
15
|
-
- After a producer receipt, run `
|
|
15
|
+
- After a producer receipt, run the chain by hand (`projectHooks` is `manual`; this preset ships no plugin):
|
|
16
|
+
`printf '%s\n' '{"status":"completed"}' | bash .opencode/hooks/chain-team-phases.sh`.
|
|
17
|
+
Slash commands are native (`/task` from `.opencode/commands/`). Do not assume `SubagentStop` auto-chain.
|
|
16
18
|
Agents must not write lifecycle fields in `status.json` / `metrics.json`.
|
|
17
19
|
|
|
18
20
|
## Essential rules (read every turn)
|
|
@@ -22,6 +24,11 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
22
24
|
- `.opencode/rules/code-quality-and-refactoring.md`
|
|
23
25
|
- `.opencode/rules/ai-local-overlay.md`
|
|
24
26
|
|
|
27
|
+
Every turn, probe `ls -la .ai.local`, then apply `.ai.local/rules/*.md` and
|
|
28
|
+
`.ai.local/conventions.md`. Acknowledge `Using .ai.local: <rule-name>`.
|
|
29
|
+
Guide: `docs/LOCAL-OVERLAY.md`. These essential rules are a prompt contract.
|
|
30
|
+
`nativeProjectRules` is `no-equivalent` — do not claim engine `alwaysApply`.
|
|
31
|
+
|
|
25
32
|
See `.opencode/rules/README.md` for the full catalog and loading strategy.
|
|
26
33
|
|
|
27
34
|
## Harness wiring
|
|
@@ -70,4 +70,4 @@ A `.ai.local/` directory MAY exist at the repo root or at any nesting depth in m
|
|
|
70
70
|
|
|
71
71
|
Plain markdown rules under `.ai.local/rules/*.md` are read by the agent with higher priority than preset rules. Living gotchas live in `.ai.local/conventions.md`.
|
|
72
72
|
|
|
73
|
-
Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule
|
|
73
|
+
On every turn, probe `ls -la .ai.local`, apply `.ai.local/rules/*.md` and `.ai.local/conventions.md`, and acknowledge `Using .ai.local: <rule-name>`. Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule is always-on on Cursor and session-start on Claude (no `paths:`). Mavis and OpenCode have no native `alwaysApply`; this section plus the platform entry's essential-rules list is the reinforcement.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "opencode",
|
|
4
4
|
"stack": "php-hexagonal",
|
|
5
5
|
"semanticSource": "cursor/php-hexagonal",
|
|
6
|
-
"sourceRevision": "
|
|
6
|
+
"sourceRevision": "024d2f6c371002d6a02c2c92d52ee17c3d9aea24991f692b1581a06ed7734f5c",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
9
9
|
"source": "AGENTS.md",
|
|
@@ -21,7 +21,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
21
21
|
- [ ] **README:** stack `rules/README.md` core→stack mapping / catalog updated if stems added
|
|
22
22
|
- [ ] **CHANGELOG / package README:** note when public preset paths or install surface change
|
|
23
23
|
- [ ] **i18n anchors:** kept-marked Cyrillic fragments in `tests-unit.md(c)` stay consistent with their English counterparts. Run `packages/ai-rules/scripts/check-preset-i18n.sh`.
|
|
24
|
-
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`
|
|
24
|
+
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, and `sync-dogfood-opencode.sh` when those platforms changed, or document an intentional skip, when maintaining this monorepo
|
|
25
25
|
- [ ] **shared-core drift:** for embed-mode stems, run `packages/ai-rules/scripts/check-shared-core-drift.sh` (or document intentional fork)
|
|
26
26
|
|
|
27
27
|
## Pointers
|
|
@@ -31,6 +31,6 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
31
31
|
- Budget: `preset-token-budget`
|
|
32
32
|
- Leakage: `preset-no-cross-stack-leakage`
|
|
33
33
|
- Validation: stack `agents/build-verifier.md` → preset-structure section
|
|
34
|
-
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
34
|
+
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
35
35
|
- Drift script: `packages/ai-rules/scripts/check-shared-core-drift.sh`
|
|
36
36
|
- Orchestrator: when editing presets, load this checklist + twin-sync
|
|
@@ -12,7 +12,9 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
12
12
|
- Other rules: lazy `Read` `.opencode/rules/<stem>.md` when the task matches.
|
|
13
13
|
- Agents: native `@name` / Task from `.opencode/agents/`.
|
|
14
14
|
- Commands: native `/task` from `.opencode/commands/`.
|
|
15
|
-
- After a producer receipt, run `
|
|
15
|
+
- After a producer receipt, run the chain by hand (`projectHooks` is `manual`; this preset ships no plugin):
|
|
16
|
+
`printf '%s\n' '{"status":"completed"}' | bash .opencode/hooks/chain-team-phases.sh`.
|
|
17
|
+
Slash commands are native (`/task` from `.opencode/commands/`). Do not assume `SubagentStop` auto-chain.
|
|
16
18
|
Agents must not write lifecycle fields in `status.json` / `metrics.json`.
|
|
17
19
|
|
|
18
20
|
## Essential rules (read every turn)
|
|
@@ -22,6 +24,11 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
22
24
|
- `.opencode/rules/code-quality-and-refactoring.md`
|
|
23
25
|
- `.opencode/rules/ai-local-overlay.md`
|
|
24
26
|
|
|
27
|
+
Every turn, probe `ls -la .ai.local`, then apply `.ai.local/rules/*.md` and
|
|
28
|
+
`.ai.local/conventions.md`. Acknowledge `Using .ai.local: <rule-name>`.
|
|
29
|
+
Guide: `docs/LOCAL-OVERLAY.md`. These essential rules are a prompt contract.
|
|
30
|
+
`nativeProjectRules` is `no-equivalent` — do not claim engine `alwaysApply`.
|
|
31
|
+
|
|
25
32
|
See `.opencode/rules/README.md` for the full catalog and loading strategy.
|
|
26
33
|
|
|
27
34
|
## Harness wiring
|
|
@@ -71,4 +71,4 @@ A `.ai.local/` directory MAY exist at the repo root or at any nesting depth in m
|
|
|
71
71
|
|
|
72
72
|
Plain markdown rules under `.ai.local/rules/*.md` are read by the agent with higher priority than preset rules. Living gotchas live in `.ai.local/conventions.md`.
|
|
73
73
|
|
|
74
|
-
Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule
|
|
74
|
+
On every turn, probe `ls -la .ai.local`, apply `.ai.local/rules/*.md` and `.ai.local/conventions.md`, and acknowledge `Using .ai.local: <rule-name>`. Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule is always-on on Cursor and session-start on Claude (no `paths:`). Mavis and OpenCode have no native `alwaysApply`; this section plus the platform entry's essential-rules list is the reinforcement.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "opencode",
|
|
4
4
|
"stack": "php-laravel",
|
|
5
5
|
"semanticSource": "cursor/php-laravel",
|
|
6
|
-
"sourceRevision": "
|
|
6
|
+
"sourceRevision": "79fe8a7f094030719cb421ad283f548b993ec8d198b7e4656d0d3ef30c9c33b0",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
9
9
|
"source": "AGENTS.md",
|
|
@@ -21,7 +21,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
21
21
|
- [ ] **README:** stack `rules/README.md` core→stack mapping / catalog updated if stems added
|
|
22
22
|
- [ ] **CHANGELOG / package README:** note when public preset paths or install surface change
|
|
23
23
|
- [ ] **i18n anchors:** kept-marked Cyrillic fragments in `tests-unit.md(c)` stay consistent with their English counterparts. Run `packages/ai-rules/scripts/check-preset-i18n.sh`.
|
|
24
|
-
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`
|
|
24
|
+
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, and `sync-dogfood-opencode.sh` when those platforms changed, or document an intentional skip, when maintaining this monorepo
|
|
25
25
|
- [ ] **shared-core drift:** for embed-mode stems, run `packages/ai-rules/scripts/check-shared-core-drift.sh` (or document intentional fork)
|
|
26
26
|
|
|
27
27
|
## Pointers
|
|
@@ -31,6 +31,6 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
31
31
|
- Budget: `preset-token-budget`
|
|
32
32
|
- Leakage: `preset-no-cross-stack-leakage`
|
|
33
33
|
- Validation: stack `agents/build-verifier.md` → preset-structure section
|
|
34
|
-
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
34
|
+
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
35
35
|
- Drift script: `packages/ai-rules/scripts/check-shared-core-drift.sh`
|
|
36
36
|
- Orchestrator: when editing presets, load this checklist + twin-sync
|
|
@@ -12,7 +12,9 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
12
12
|
- Other rules: lazy `Read` `.opencode/rules/<stem>.md` when the task matches.
|
|
13
13
|
- Agents: native `@name` / Task from `.opencode/agents/`.
|
|
14
14
|
- Commands: native `/task` from `.opencode/commands/`.
|
|
15
|
-
- After a producer receipt, run `
|
|
15
|
+
- After a producer receipt, run the chain by hand (`projectHooks` is `manual`; this preset ships no plugin):
|
|
16
|
+
`printf '%s\n' '{"status":"completed"}' | bash .opencode/hooks/chain-team-phases.sh`.
|
|
17
|
+
Slash commands are native (`/task` from `.opencode/commands/`). Do not assume `SubagentStop` auto-chain.
|
|
16
18
|
Agents must not write lifecycle fields in `status.json` / `metrics.json`.
|
|
17
19
|
|
|
18
20
|
## Essential rules (read every turn)
|
|
@@ -22,6 +24,11 @@ Root `AGENTS.md` is native always-on. Read it first, then this file.
|
|
|
22
24
|
- `.opencode/rules/code-quality-and-refactoring.md`
|
|
23
25
|
- `.opencode/rules/ai-local-overlay.md`
|
|
24
26
|
|
|
27
|
+
Every turn, probe `ls -la .ai.local`, then apply `.ai.local/rules/*.md` and
|
|
28
|
+
`.ai.local/conventions.md`. Acknowledge `Using .ai.local: <rule-name>`.
|
|
29
|
+
Guide: `docs/LOCAL-OVERLAY.md`. These essential rules are a prompt contract.
|
|
30
|
+
`nativeProjectRules` is `no-equivalent` — do not claim engine `alwaysApply`.
|
|
31
|
+
|
|
25
32
|
See `.opencode/rules/README.md` for the full catalog and loading strategy.
|
|
26
33
|
|
|
27
34
|
## Harness wiring
|
|
@@ -72,4 +72,4 @@ A `.ai.local/` directory MAY exist at the repo root or at any nesting depth in m
|
|
|
72
72
|
|
|
73
73
|
Plain markdown rules under `.ai.local/rules/*.md` are read by the agent with higher priority than preset rules. Living gotchas live in `.ai.local/conventions.md`.
|
|
74
74
|
|
|
75
|
-
Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule
|
|
75
|
+
On every turn, probe `ls -la .ai.local`, apply `.ai.local/rules/*.md` and `.ai.local/conventions.md`, and acknowledge `Using .ai.local: <rule-name>`. Authoring guide: `docs/LOCAL-OVERLAY.md` in the `@bonesofspring/ai-rules` package. The `ai-local-overlay` rule is always-on on Cursor and session-start on Claude (no `paths:`). Mavis and OpenCode have no native `alwaysApply`; this section plus the platform entry's essential-rules list is the reinforcement.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "opencode",
|
|
4
4
|
"stack": "svelte",
|
|
5
5
|
"semanticSource": "cursor/svelte",
|
|
6
|
-
"sourceRevision": "
|
|
6
|
+
"sourceRevision": "e2647db5026c557c38d7dcfdc4595afac8832b3459c75ab3f663568d8dbc0289",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
9
9
|
"source": "AGENTS.md",
|
|
@@ -21,7 +21,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
21
21
|
- [ ] **README:** stack `rules/README.md` core→stack mapping / catalog updated if stems added
|
|
22
22
|
- [ ] **CHANGELOG / package README:** note when public preset paths or install surface change
|
|
23
23
|
- [ ] **i18n anchors:** kept-marked Cyrillic fragments in `tests-unit.md(c)` stay consistent with their English counterparts. Run `packages/ai-rules/scripts/check-preset-i18n.sh`.
|
|
24
|
-
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`
|
|
24
|
+
- [ ] **Dogfood:** run `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, and `sync-dogfood-opencode.sh` when those platforms changed, or document an intentional skip, when maintaining this monorepo
|
|
25
25
|
- [ ] **shared-core drift:** for embed-mode stems, run `packages/ai-rules/scripts/check-shared-core-drift.sh` (or document intentional fork)
|
|
26
26
|
|
|
27
27
|
## Pointers
|
|
@@ -31,6 +31,6 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
31
31
|
- Budget: `preset-token-budget`
|
|
32
32
|
- Leakage: `preset-no-cross-stack-leakage`
|
|
33
33
|
- Validation: stack `agents/build-verifier.md` → preset-structure section
|
|
34
|
-
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
34
|
+
- Dogfood scripts: `packages/ai-rules/scripts/sync-dogfood-cursor.sh`, `sync-dogfood-claude.sh`, `sync-dogfood-mavis.sh`, `sync-dogfood-opencode.sh`
|
|
35
35
|
- Drift script: `packages/ai-rules/scripts/check-shared-core-drift.sh`
|
|
36
36
|
- Orchestrator: when editing presets, load this checklist + twin-sync
|
|
@@ -95,7 +95,7 @@ for stack in STACKS:
|
|
|
95
95
|
if sf == 0:
|
|
96
96
|
print(f" OK: {cursor_path.name} (alwaysApply + MANDATORY + ack + pointer)")
|
|
97
97
|
|
|
98
|
-
# Claude must exist (flat or topic folder)
|
|
98
|
+
# Claude must exist (flat or topic folder) as session-start (no paths:) + ack + pointer.
|
|
99
99
|
if not claude_path.is_file():
|
|
100
100
|
# Try to find a topic-folder placement (e.g. tooling-and-review/ai-local-overlay.md).
|
|
101
101
|
candidates = list((presets / "claude" / stack / "rules").rglob(CLAUDE_NAME))
|
|
@@ -107,8 +107,11 @@ for stack in STACKS:
|
|
|
107
107
|
if claude_path.is_file():
|
|
108
108
|
text = claude_path.read_text(encoding="utf-8")
|
|
109
109
|
fm, body = strip_frontmatter(text)
|
|
110
|
-
if
|
|
111
|
-
print(
|
|
110
|
+
if re.search(r"(?m)^paths:\s*", fm):
|
|
111
|
+
print(
|
|
112
|
+
f"FAIL: {claude_path.relative_to(presets)} must be session-start "
|
|
113
|
+
"(no paths:). ai-local-overlay is the reserved 4th slot inside the 3–5 cap."
|
|
114
|
+
)
|
|
112
115
|
sf += 1
|
|
113
116
|
if FRONTMATTER_DESCRIPTION not in fm:
|
|
114
117
|
print(f"FAIL: {claude_path.name} frontmatter description must include 'MANDATORY'")
|
|
@@ -120,7 +123,7 @@ for stack in STACKS:
|
|
|
120
123
|
print(f"FAIL: {claude_path.name} body must reference `docs/LOCAL-OVERLAY.md`")
|
|
121
124
|
sf += 1
|
|
122
125
|
if sf == 0:
|
|
123
|
-
print(f" OK: {claude_path.name} (
|
|
126
|
+
print(f" OK: {claude_path.name} (session-start + MANDATORY + ack + pointer)")
|
|
124
127
|
|
|
125
128
|
# Twin-map coverage: the Claude twin must be listed in claude/<stack>/rules/README.md.
|
|
126
129
|
claude_readme = presets / "claude" / stack / "rules" / "README.md"
|
|
@@ -129,6 +132,39 @@ for stack in STACKS:
|
|
|
129
132
|
if CURSOR_NAME not in readme_text:
|
|
130
133
|
print(f"FAIL: {claude_readme} mapping table must include `{CURSOR_NAME}`")
|
|
131
134
|
sf += 1
|
|
135
|
+
session_lines = [
|
|
136
|
+
line
|
|
137
|
+
for line in readme_text.splitlines()
|
|
138
|
+
if "Session" in line and "paths" in line
|
|
139
|
+
]
|
|
140
|
+
if not any("ai-local-overlay" in line for line in session_lines):
|
|
141
|
+
print(
|
|
142
|
+
f"FAIL: {claude_readme} session-start line must name `ai-local-overlay`"
|
|
143
|
+
)
|
|
144
|
+
sf += 1
|
|
145
|
+
|
|
146
|
+
claude_entry = presets / "claude" / stack / "CLAUDE.md"
|
|
147
|
+
if not claude_entry.is_file():
|
|
148
|
+
print(f"FAIL: missing {claude_entry}")
|
|
149
|
+
sf += 1
|
|
150
|
+
else:
|
|
151
|
+
entry = claude_entry.read_text(encoding="utf-8")
|
|
152
|
+
for needle in (
|
|
153
|
+
"ls -la .ai.local",
|
|
154
|
+
".ai.local/rules/*.md",
|
|
155
|
+
".ai.local/conventions.md",
|
|
156
|
+
"Using .ai.local: <rule-name>",
|
|
157
|
+
POINTER_DOCS,
|
|
158
|
+
"ai-local-overlay",
|
|
159
|
+
):
|
|
160
|
+
if needle not in entry:
|
|
161
|
+
print(f"FAIL: {claude_entry.relative_to(presets)} missing `{needle}`")
|
|
162
|
+
sf += 1
|
|
163
|
+
if "exactly three" in entry or "exactly **three**" in entry:
|
|
164
|
+
print(
|
|
165
|
+
f"FAIL: {claude_entry.relative_to(presets)} still says session-start is exactly three"
|
|
166
|
+
)
|
|
167
|
+
sf += 1
|
|
132
168
|
|
|
133
169
|
stack_failed[stack] = sf
|
|
134
170
|
failed += sf
|
|
@@ -24,6 +24,7 @@ for (const stack of stacks) {
|
|
|
24
24
|
const root = path.join(presetsRoot, 'mavis', stack);
|
|
25
25
|
const files = [
|
|
26
26
|
path.join(root, 'REPO_AGENTS.md'),
|
|
27
|
+
path.join(root, 'MAVIS.md'),
|
|
27
28
|
path.join(root, 'rules', 'ai-local-overlay.md'),
|
|
28
29
|
];
|
|
29
30
|
for (const filePath of files) {
|
|
@@ -50,6 +51,28 @@ for (const stack of stacks) {
|
|
|
50
51
|
console.error(`FAIL ${label}: missing Local overlay section`);
|
|
51
52
|
failed += 1;
|
|
52
53
|
}
|
|
54
|
+
if (filePath.endsWith('REPO_AGENTS.md') || filePath.endsWith('MAVIS.md')) {
|
|
55
|
+
for (const needle of [PROBE, ACK, 'ai-local-overlay', '.ai.local/rules/*.md', '.ai.local/conventions.md']) {
|
|
56
|
+
if (!text.includes(needle)) {
|
|
57
|
+
console.error(`FAIL ${label}: missing ${needle}`);
|
|
58
|
+
failed += 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (filePath.endsWith('MAVIS.md')) {
|
|
63
|
+
if (!text.includes('nativeProjectRules') || !text.includes('unknown')) {
|
|
64
|
+
console.error(`FAIL ${label}: must keep nativeProjectRules unknown (no alwaysApply claim)`);
|
|
65
|
+
failed += 1;
|
|
66
|
+
}
|
|
67
|
+
if (!text.includes('fallback-manual-import') || !text.includes('freshInit')) {
|
|
68
|
+
console.error(`FAIL ${label}: must document fallback-manual-import and freshInit`);
|
|
69
|
+
failed += 1;
|
|
70
|
+
}
|
|
71
|
+
if (!text.includes('projectHooks') || !text.includes('manual')) {
|
|
72
|
+
console.error(`FAIL ${label}: must document manual projectHooks invoke`);
|
|
73
|
+
failed += 1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
53
76
|
}
|
|
54
77
|
}
|
|
55
78
|
|
|
@@ -30,6 +30,7 @@ const ALLOWED_STATUS = new Set([
|
|
|
30
30
|
'partial',
|
|
31
31
|
'unknown',
|
|
32
32
|
'no-equivalent',
|
|
33
|
+
'manual',
|
|
33
34
|
]);
|
|
34
35
|
const KNOWN_STACKS = new Set([
|
|
35
36
|
'next',
|
|
@@ -245,7 +246,7 @@ export function validateContract(contract, options = {}) {
|
|
|
245
246
|
}
|
|
246
247
|
if (!ALLOWED_STATUS.has(capability.status)) {
|
|
247
248
|
fail(
|
|
248
|
-
`nativeCapabilities.${key}.status must be confirmed|partial|unknown|no-equivalent`,
|
|
249
|
+
`nativeCapabilities.${key}.status must be confirmed|partial|unknown|no-equivalent|manual`,
|
|
249
250
|
);
|
|
250
251
|
}
|
|
251
252
|
if (
|
|
@@ -262,7 +263,9 @@ export function validateContract(contract, options = {}) {
|
|
|
262
263
|
continue;
|
|
263
264
|
}
|
|
264
265
|
if (
|
|
265
|
-
(capability.status === 'unknown' ||
|
|
266
|
+
(capability.status === 'unknown' ||
|
|
267
|
+
capability.status === 'no-equivalent' ||
|
|
268
|
+
capability.status === 'manual') &&
|
|
266
269
|
nativePath
|
|
267
270
|
) {
|
|
268
271
|
fail(
|
|
@@ -24,6 +24,7 @@ for (const stack of stacks) {
|
|
|
24
24
|
const root = path.join(presetsRoot, 'opencode', stack);
|
|
25
25
|
const files = [
|
|
26
26
|
path.join(root, 'REPO_AGENTS.md'),
|
|
27
|
+
path.join(root, 'OPENCODE.md'),
|
|
27
28
|
path.join(root, 'rules', 'ai-local-overlay.md'),
|
|
28
29
|
];
|
|
29
30
|
for (const filePath of files) {
|
|
@@ -50,6 +51,24 @@ for (const stack of stacks) {
|
|
|
50
51
|
console.error(`FAIL ${label}: missing Local overlay section`);
|
|
51
52
|
failed += 1;
|
|
52
53
|
}
|
|
54
|
+
if (filePath.endsWith('REPO_AGENTS.md') || filePath.endsWith('OPENCODE.md')) {
|
|
55
|
+
for (const needle of [PROBE, ACK, 'ai-local-overlay', '.ai.local/rules/*.md', '.ai.local/conventions.md']) {
|
|
56
|
+
if (!text.includes(needle)) {
|
|
57
|
+
console.error(`FAIL ${label}: missing ${needle}`);
|
|
58
|
+
failed += 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (filePath.endsWith('OPENCODE.md')) {
|
|
63
|
+
if (!text.includes('nativeProjectRules') || !text.includes('no-equivalent')) {
|
|
64
|
+
console.error(`FAIL ${label}: must keep nativeProjectRules no-equivalent (no alwaysApply claim)`);
|
|
65
|
+
failed += 1;
|
|
66
|
+
}
|
|
67
|
+
if (!text.includes('projectHooks') || !text.includes('manual')) {
|
|
68
|
+
console.error(`FAIL ${label}: must document manual projectHooks invoke`);
|
|
69
|
+
failed += 1;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
53
72
|
}
|
|
54
73
|
}
|
|
55
74
|
|
|
@@ -30,6 +30,7 @@ const ALLOWED_STATUS = new Set([
|
|
|
30
30
|
'partial',
|
|
31
31
|
'unknown',
|
|
32
32
|
'no-equivalent',
|
|
33
|
+
'manual',
|
|
33
34
|
]);
|
|
34
35
|
const KNOWN_STACKS = new Set([
|
|
35
36
|
'next',
|
|
@@ -245,7 +246,7 @@ export function validateContract(contract, options = {}) {
|
|
|
245
246
|
}
|
|
246
247
|
if (!ALLOWED_STATUS.has(capability.status)) {
|
|
247
248
|
fail(
|
|
248
|
-
`nativeCapabilities.${key}.status must be confirmed|partial|unknown|no-equivalent`,
|
|
249
|
+
`nativeCapabilities.${key}.status must be confirmed|partial|unknown|no-equivalent|manual`,
|
|
249
250
|
);
|
|
250
251
|
}
|
|
251
252
|
if (
|
|
@@ -262,7 +263,9 @@ export function validateContract(contract, options = {}) {
|
|
|
262
263
|
continue;
|
|
263
264
|
}
|
|
264
265
|
if (
|
|
265
|
-
(capability.status === 'unknown' ||
|
|
266
|
+
(capability.status === 'unknown' ||
|
|
267
|
+
capability.status === 'no-equivalent' ||
|
|
268
|
+
capability.status === 'manual') &&
|
|
266
269
|
nativePath
|
|
267
270
|
) {
|
|
268
271
|
fail(
|
|
@@ -178,6 +178,13 @@ for stack in STACKS:
|
|
|
178
178
|
f"expected {MIN_ALWAYS_ON}..{MAX_ALWAYS_ON} (Option A excludes **/README.md)"
|
|
179
179
|
)
|
|
180
180
|
failed += 1
|
|
181
|
+
elif len(session) > 3:
|
|
182
|
+
if not any(p.stem == "ai-local-overlay" for p in session):
|
|
183
|
+
print(
|
|
184
|
+
f"FAIL: Claude session-start={len(session)} but no ai-local-overlay; "
|
|
185
|
+
"extra slots are reserved for the local overlay rule"
|
|
186
|
+
)
|
|
187
|
+
failed += 1
|
|
181
188
|
|
|
182
189
|
# --- Body sum of intended session-start set (Cursor alwaysApply + Claude session) ---
|
|
183
190
|
# Cursor and Claude allow 3..5 always-on rules; extra slots reserved for ai-local-overlay.
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
".ai.local/team/fixtures/mockup-review-standalone.json": "edda49b1298e94f9a33496317e9f6ccbbb047659e044e05ba35669bfe800eda6",
|
|
23
23
|
".ai.local/team/fixtures/ux-design-standalone.json": "528aeb9db4c310d1b5e3eacae0ad39a4fd1dd49c04154b064e7027981488a07a",
|
|
24
24
|
".ai.local/team/tasks/.gitkeep": "aca85ed348a49b11d68188be6ab245b521e5a706bbe0fbca1a28abfdc7155893",
|
|
25
|
-
".claude/CLAUDE.md": "
|
|
25
|
+
".claude/CLAUDE.md": "2adbeb71dbadbaefeb4f7576e6ce5db395f7bfd566b665532e156265f9457293",
|
|
26
26
|
".claude/MCP.md": "a40a7f9cd8a11a031a5fb3f2e4ccdb6cb2186461600146765d3255990e6133d0",
|
|
27
27
|
".claude/agents/README.md": "98fd8018a96eb924977217f81eb9cf966e88dee151b60af2c7c94ae2a8b32730",
|
|
28
28
|
".claude/agents/accessibility-reviewer.md": "795072716b23b0ce3b95703bbaf4de963f24308088046c6656066e0b34c792e1",
|
|
@@ -54,14 +54,14 @@
|
|
|
54
54
|
".claude/commands/task-continue.md": "8c2bec3c204c25910e8fc349c571778275905380e90d8bd02c0092c83ecfe6f6",
|
|
55
55
|
".claude/commands/task.md": "4db4b9245e7d5d0d56fb06d86196502aa8fa6487c747c2c103d09da27b02941e",
|
|
56
56
|
".claude/commands/technical-retro.md": "6195206cc687645fadcbe011306f6c62f1d082508c9182d880e5e4485d17214c",
|
|
57
|
-
".claude/hooks/README.md": "
|
|
58
|
-
".claude/hooks/chain-team-phases.sh": "
|
|
59
|
-
".claude/hooks/examples/README.md": "
|
|
57
|
+
".claude/hooks/README.md": "dc22793bce005fa1b29960f44fb9162de47095a501ce639239ae7210b7cb9003",
|
|
58
|
+
".claude/hooks/chain-team-phases.sh": "e6790f4512bba38a17ba7f13ec9c1dc1a00db423e9ece24bf6c359107039a585",
|
|
59
|
+
".claude/hooks/examples/README.md": "c5bdc1398bdaad95a15051d75c9f896f5c4991d66641982e675db648e9591813",
|
|
60
60
|
".claude/hooks/examples/format-edited.example.sh": "fd4df1d6c2a5673f963febd4f3f21ec8c42899645bdc53144d713c66b2affc76",
|
|
61
61
|
".claude/hooks/examples/secret-guard.example.sh": "51cbc95c3a1b64dfc5b19901932b4e3a047ade9332451282f254bf5f8d45a58f",
|
|
62
62
|
".claude/hooks/examples/test-on-save.example.sh": "ae185e383811e2f8f89ae5f631993705c06fc8cf7216cf8f0862a5b55c64ca2a",
|
|
63
|
-
".claude/hooks/guard-shell-command.sh": "
|
|
64
|
-
".claude/rules/README.md": "
|
|
63
|
+
".claude/hooks/guard-shell-command.sh": "31e1451148c17aedbcc2e9f372e50f079624f2624fb93505ba74850543749c75",
|
|
64
|
+
".claude/rules/README.md": "8fb263352c7c2325fafb0ff2b6f7a328e47ac974cc730a14e5764aedea349e02",
|
|
65
65
|
".claude/rules/anti-hallucination/react-next-anti-hallucination.md": "021d22a4178aad43b8ba8b332cc677dbe8130a0cf673407acbb34d47c5367d32",
|
|
66
66
|
".claude/rules/api-and-data/README.md": "1caace24921f00d60a58bea551988abd15c32f13a2711ae799ce1e689b838de2",
|
|
67
67
|
".claude/rules/api-and-data/api-services.md": "30b50d49c4281c4e0f9169d453c285f7dfc828d9991520e0c204101b5b634cb9",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
".claude/rules/tooling-and-review/README.md": "27a956fa7fa68c58cd17a9b598580b06cb2241aadef29e3b647a31ab418d99ec",
|
|
92
92
|
".claude/rules/tooling-and-review/agent-team-intake.md": "e05a5879d587a9c4774e9e36cfcadca5664eedaabe02051745fb6c87a6143e42",
|
|
93
93
|
".claude/rules/tooling-and-review/agent-team-orchestrator.md": "810afc6e3d3a97b652af215bbc03433727b87c063d79613e3588e1d955d192d6",
|
|
94
|
-
".claude/rules/tooling-and-review/ai-local-overlay.md": "
|
|
94
|
+
".claude/rules/tooling-and-review/ai-local-overlay.md": "bb96bf00cf76c58d5db4e6c12622164b0d700d8330e9805c0aa7c1542bffbde4",
|
|
95
95
|
".claude/rules/tooling-and-review/anti-sycophancy-discipline.md": "6d359631dde6dbe6588397aa1108752cfdad9764d90d6d9da31606a463b72226",
|
|
96
96
|
".claude/rules/tooling-and-review/code-quality.md": "fc764e9fbf7101475fc709a4610d09758a3a959f2fe82d3d1a487f2c8556c1b4",
|
|
97
97
|
".claude/rules/tooling-and-review/code-review-mr.md": "30b31277be1f6df878712d79cb54bc157edb97640e3bc7e77c0121273821ab03",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
".claude/rules/tooling-and-review/post-change-lint.md": "ea16a0311ef354c101efc697e738d852742f74f60f49f421b776ccf0e19ad53c",
|
|
103
103
|
".claude/rules/tooling-and-review/preset-layering.md": "006b9ea97f55d039debc16847ac9b0bfae6b26b56f44e812081ddd65760289ca",
|
|
104
104
|
".claude/rules/tooling-and-review/preset-no-cross-stack-leakage.md": "01e045b7f6f5a472581804499ec97dc4296264da90e3a6e3a25807501a300dad",
|
|
105
|
-
".claude/rules/tooling-and-review/preset-pr-checklist.md": "
|
|
105
|
+
".claude/rules/tooling-and-review/preset-pr-checklist.md": "769addcfbde87d6681291ee038ff57842e03a4634dbc90f2562fb95efd5fc625",
|
|
106
106
|
".claude/rules/tooling-and-review/preset-token-budget.md": "bc22059a066d3ba21d8813f5e50d5cc9eef3a28860372d122d31b50977438e18",
|
|
107
107
|
".claude/rules/tooling-and-review/preset-twin-sync.md": "bdd98171bc8218fdd84834aa8051e8c899f87bb1063f9a5fd539af1154cb618f",
|
|
108
108
|
".claude/rules/tooling-and-review/security-next.md": "3e5c733925a0040928a9fbb7d841e69a471a03c5cb02d2fa986b81d29d7e31ca",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
".claude/rules/ui-and-accessibility/no-props-spread.md": "60aa9ca9c94db981bcceb05a090734e540644febfa88f4e40089f5d16a8a5d7f",
|
|
114
114
|
".claude/rules/ui-and-accessibility/react-a11y-coding.md": "8709f43c13f7071b2cd645c29b171de218551c3895479901efa1a817585b245d",
|
|
115
115
|
".claude/rules/ui-and-accessibility/react-ui.md": "06233a81f4eb4d6686f5a5ced351ddde43aed2cf753d6a6be072e6507b71572f",
|
|
116
|
-
".claude/settings.json": "
|
|
116
|
+
".claude/settings.json": "930a46deffc5aee8161328b29ca7122d32a8434415988462f3be6578fcf5036f",
|
|
117
117
|
".claude/skills/README.md": "1aeac616a5270d0ce6be132a3dff3e0bbca1371191503f0ecf3eeeeea5b4e9f3",
|
|
118
118
|
".claude/skills/ci-investigation/SKILL.md": "b13ed9de0716671b7d192dc2ba7fec139466a933b52f25c075623dcdef38b399",
|
|
119
119
|
".claude/skills/code-review/SKILL.md": "068f995e00e4baa4baf02098cef865fd837f3dad33a5c063b778aa84b0878b02",
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
".claude/skills/ux-design/SKILL.md": "74b70875ba3d41ffb8401c42bc8c9e442e73b36c6a6b0d8d9d2aae0a6017479c",
|
|
130
130
|
".claude/skills/write-adr/SKILL.md": "607d70eff78d6a7b67b783237721fdc42eaa5170cb6175882e7e2a4adf132242",
|
|
131
131
|
".mcp.json": "f68a14db68a491a982975a3e6cc985057072a68eebdcedf33d8ac2a4a3b284ca",
|
|
132
|
-
"AGENTS.md": "
|
|
132
|
+
"AGENTS.md": "dbfbbb0fb243c67bed8c02dd2ba45dfc92163ebed8914d7dee6e8d359638ec08",
|
|
133
133
|
"docs/specs/INDEX.md": "cab59f2093e6aaa376246a56d53e4268cb59070a6b10e87a94895192c35f422d",
|
|
134
134
|
"docs/specs/_templates/feature.md": "83c47b90334c555fb5144749837e2ddfe1cae5bb89031f885ba98671075d59e7",
|
|
135
135
|
"docs/specs/_templates/page.md": "a668c584e28edd52afaf3f9f8f898a75e43cb82fa12822c7a016033441e12e54"
|