@givolt/i3-composer-agent 1.0.1 → 2.0.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 (204) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/{build.md → i3-build.md} +10 -10
  3. package/.claude/commands/{code-simplify.md → i3-code-simplify.md} +2 -2
  4. package/.claude/commands/{constraints.md → i3-constraints.md} +4 -4
  5. package/.claude/commands/{plan.md → i3-plan.md} +1 -1
  6. package/.claude/commands/{review.md → i3-review.md} +3 -3
  7. package/.claude/commands/{ship.md → i3-ship.md} +4 -4
  8. package/.claude/commands/{spec.md → i3-spec.md} +1 -1
  9. package/.claude/commands/{test.md → i3-test.md} +2 -2
  10. package/.claude/commands/{webperf.md → i3-webperf.md} +1 -1
  11. package/.claude-plugin/marketplace.json +1 -1
  12. package/.claude-plugin/plugin.json +1 -1
  13. package/.codex-plugin/plugin.json +1 -1
  14. package/.gemini/commands/{build.toml → i3-build.toml} +10 -10
  15. package/.gemini/commands/{code-simplify.toml → i3-code-simplify.toml} +2 -2
  16. package/.gemini/commands/{constraints.toml → i3-constraints.toml} +4 -4
  17. package/.gemini/commands/{planning.toml → i3-planning.toml} +1 -1
  18. package/{commands/review.toml → .gemini/commands/i3-review.toml} +3 -3
  19. package/.gemini/commands/{ship.toml → i3-ship.toml} +4 -4
  20. package/.gemini/commands/{spec.toml → i3-spec.toml} +1 -1
  21. package/{commands/test.toml → .gemini/commands/i3-test.toml} +2 -2
  22. package/.gemini/commands/{webperf.toml → i3-webperf.toml} +1 -1
  23. package/CHANGELOG.md +17 -0
  24. package/NOTICE.md +2 -1
  25. package/README.md +47 -41
  26. package/agents/code-reviewer.md +2 -2
  27. package/agents/security-auditor.md +1 -1
  28. package/agents/test-engineer.md +1 -1
  29. package/agents/web-performance-auditor.md +3 -3
  30. package/bin/i3-composer-agent.cjs +2 -2
  31. package/bin/install.cjs +20 -4
  32. package/commands/{build.toml → i3-build.toml} +10 -10
  33. package/commands/{code-simplify.toml → i3-code-simplify.toml} +2 -2
  34. package/commands/{constraints.toml → i3-constraints.toml} +4 -4
  35. package/commands/{planning.toml → i3-planning.toml} +1 -1
  36. package/{.gemini/commands/review.toml → commands/i3-review.toml} +3 -3
  37. package/commands/{ship.toml → i3-ship.toml} +4 -4
  38. package/commands/{spec.toml → i3-spec.toml} +1 -1
  39. package/{.gemini/commands/test.toml → commands/i3-test.toml} +2 -2
  40. package/commands/{webperf.toml → i3-webperf.toml} +1 -1
  41. package/docs/adoption-guide.md +35 -35
  42. package/docs/agents.md +12 -12
  43. package/docs/antigravity-setup.md +14 -14
  44. package/docs/codebuddy-setup.md +16 -15
  45. package/docs/codex-setup.md +6 -6
  46. package/docs/commandcode-setup.md +5 -5
  47. package/docs/copilot-cli-setup.md +5 -5
  48. package/docs/copilot-setup.md +22 -22
  49. package/docs/cursor-setup.md +20 -20
  50. package/docs/developer-onboarding.md +5 -5
  51. package/docs/gemini-cli-setup.md +26 -26
  52. package/docs/getting-started.md +36 -36
  53. package/docs/opencode-setup.md +27 -27
  54. package/docs/skill-anatomy.md +3 -3
  55. package/docs/windsurf-setup.md +7 -7
  56. package/evals/cases/{api-and-interface-design.json → i3-api-and-interface-design.json} +4 -4
  57. package/evals/cases/{browser-testing-with-devtools.json → i3-browser-testing-with-devtools.json} +4 -4
  58. package/evals/cases/{ci-cd-and-automation.json → i3-ci-cd-and-automation.json} +4 -4
  59. package/evals/cases/{code-review-and-quality.json → i3-code-review-and-quality.json} +4 -4
  60. package/evals/cases/{code-simplification.json → i3-code-simplification.json} +4 -4
  61. package/evals/cases/{constraint-driven-development.json → i3-constraint-driven-development.json} +4 -4
  62. package/evals/cases/{context-engineering.json → i3-context-engineering.json} +4 -4
  63. package/evals/cases/{debugging-and-error-recovery.json → i3-debugging-and-error-recovery.json} +5 -5
  64. package/evals/cases/{deprecation-and-migration.json → i3-deprecation-and-migration.json} +4 -4
  65. package/evals/cases/{documentation-and-adrs.json → i3-documentation-and-adrs.json} +4 -4
  66. package/evals/cases/{doubt-driven-development.json → i3-doubt-driven-development.json} +3 -3
  67. package/evals/cases/{frontend-ui-engineering.json → i3-frontend-ui-engineering.json} +4 -4
  68. package/evals/cases/{git-workflow-and-versioning.json → i3-git-workflow-and-versioning.json} +3 -3
  69. package/evals/cases/{idea-refine.json → i3-idea-refine.json} +3 -3
  70. package/evals/cases/{incremental-implementation.json → i3-incremental-implementation.json} +4 -4
  71. package/evals/cases/{interview-me.json → i3-interview-me.json} +3 -3
  72. package/evals/cases/{observability-and-instrumentation.json → i3-observability-and-instrumentation.json} +3 -3
  73. package/evals/cases/{performance-optimization.json → i3-performance-optimization.json} +4 -4
  74. package/evals/cases/{planning-and-task-breakdown.json → i3-planning-and-task-breakdown.json} +4 -4
  75. package/evals/cases/{security-and-hardening.json → i3-security-and-hardening.json} +4 -4
  76. package/evals/cases/{shipping-and-launch.json → i3-shipping-and-launch.json} +4 -4
  77. package/evals/cases/{source-driven-development.json → i3-source-driven-development.json} +4 -4
  78. package/evals/cases/{spec-driven-development.json → i3-spec-driven-development.json} +5 -5
  79. package/evals/cases/{test-driven-development.json → i3-test-driven-development.json} +5 -5
  80. package/evals/cases/{using-agent-skills.json → i3-using-agent-skills.json} +4 -4
  81. package/evals/fixtures/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/.eval/working-tree.patch +3 -3
  82. package/evals/plugin/code-review-fires/graders/skill-fired.md +1 -1
  83. package/evals/plugin/code-review-stays-quiet/graders/not-fired.md +1 -1
  84. package/evals/plugin/code-review-stays-quiet/graders/tdd-fired.md +1 -1
  85. package/evals/plugin/code-review-stays-quiet/prompt.md +2 -2
  86. package/evals/plugin/code-review-stays-quiet-on-commit-message/graders/not-fired.md +1 -1
  87. package/evals/plugin/code-review-stays-quiet-on-commit-message/prompt.md +2 -2
  88. package/hooks/SDD-CACHE.md +3 -3
  89. package/hooks/SIMPLIFY-IGNORE.md +2 -2
  90. package/hooks/session-start-test.sh +1 -1
  91. package/hooks/session-start.sh +3 -3
  92. package/package.json +1 -1
  93. package/plugin.json +1 -1
  94. package/rebrand/INSTALLATION-SPEC.md +2 -1
  95. package/rebrand/MAINTENANCE.md +3 -2
  96. package/rebrand/NOTICE.md +2 -1
  97. package/rebrand/PREFIX-SPEC.md +16 -0
  98. package/rebrand/UNIFICATION-SPEC.md +2 -2
  99. package/rebrand/VALIDATION.md +2 -2
  100. package/rebrand/VERSIONING.md +5 -3
  101. package/rebrand/apply.cjs +33 -10
  102. package/rebrand/brand.json +1 -1
  103. package/rebrand/catalog.cjs +16 -2
  104. package/rebrand/fork-patches.json +15 -0
  105. package/rebrand/identifiers.cjs +41 -0
  106. package/rebrand/overlay/CHANGELOG.md +17 -0
  107. package/rebrand/overlay/bin/i3-composer-agent.cjs +2 -2
  108. package/rebrand/overlay/bin/install.cjs +20 -4
  109. package/rebrand/overlay/scripts/validate-brand.cjs +3 -3
  110. package/rebrand/overlay/tests/installer.test.cjs +60 -12
  111. package/rebrand/templates/README.md +11 -5
  112. package/rebrand/templates/codebuddy-setup.md +16 -15
  113. package/rebrand/templates/codex-setup.md +6 -6
  114. package/rebrand/tests/pipeline.test.cjs +71 -3
  115. package/references/accessibility-checklist.md +1 -1
  116. package/references/definition-of-done.md +7 -7
  117. package/references/observability-checklist.md +3 -3
  118. package/references/orchestration-patterns.md +17 -17
  119. package/references/performance-checklist.md +2 -2
  120. package/references/security-checklist.md +1 -1
  121. package/references/testing-patterns.md +1 -1
  122. package/scripts/floor-guard-reference-test.js +2 -2
  123. package/scripts/lib/skill-lint.js +2 -0
  124. package/scripts/run-evals-test.js +2 -2
  125. package/scripts/validate-artifact-paths-test.js +3 -3
  126. package/scripts/validate-artifact-paths.js +4 -2
  127. package/scripts/validate-brand.cjs +3 -3
  128. package/scripts/validate-commands.js +1 -0
  129. package/scripts/validate-reference-links-test.js +11 -11
  130. package/scripts/validate-reference-links.js +1 -1
  131. package/skills/{api-and-interface-design → i3-api-and-interface-design}/SKILL.md +2 -2
  132. package/skills/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/SKILL.md +1 -1
  133. package/skills/{ci-cd-and-automation → i3-ci-cd-and-automation}/SKILL.md +2 -2
  134. package/skills/{code-review-and-quality → i3-code-review-and-quality}/SKILL.md +5 -5
  135. package/skills/{code-simplification → i3-code-simplification}/SKILL.md +1 -1
  136. package/skills/{constraint-driven-development → i3-constraint-driven-development}/SKILL.md +15 -15
  137. package/skills/{context-engineering → i3-context-engineering}/SKILL.md +1 -1
  138. package/skills/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/SKILL.md +2 -2
  139. package/skills/{deprecation-and-migration → i3-deprecation-and-migration}/SKILL.md +2 -2
  140. package/skills/{documentation-and-adrs → i3-documentation-and-adrs}/SKILL.md +1 -1
  141. package/skills/{doubt-driven-development → i3-doubt-driven-development}/SKILL.md +8 -8
  142. package/skills/{frontend-ui-engineering → i3-frontend-ui-engineering}/SKILL.md +1 -1
  143. package/skills/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/SKILL.md +4 -4
  144. package/skills/{idea-refine → i3-idea-refine}/SKILL.md +2 -2
  145. package/skills/{idea-refine → i3-idea-refine}/scripts/idea-refine.sh +1 -1
  146. package/skills/{incremental-implementation → i3-incremental-implementation}/SKILL.md +3 -3
  147. package/skills/{interview-me → i3-interview-me}/SKILL.md +12 -12
  148. package/skills/{observability-and-instrumentation → i3-observability-and-instrumentation}/SKILL.md +5 -5
  149. package/skills/{performance-optimization → i3-performance-optimization}/SKILL.md +1 -1
  150. package/skills/{performance-optimization → i3-performance-optimization}/references/optimization-patterns.md +1 -1
  151. package/skills/{planning-and-task-breakdown → i3-planning-and-task-breakdown}/SKILL.md +2 -2
  152. package/skills/{security-and-hardening → i3-security-and-hardening}/SKILL.md +3 -3
  153. package/skills/{security-and-hardening → i3-security-and-hardening}/references/hardening-patterns.md +1 -1
  154. package/skills/{shipping-and-launch → i3-shipping-and-launch}/SKILL.md +2 -2
  155. package/skills/{source-driven-development → i3-source-driven-development}/SKILL.md +2 -2
  156. package/skills/{spec-driven-development → i3-spec-driven-development}/SKILL.md +7 -7
  157. package/skills/{test-driven-development → i3-test-driven-development}/SKILL.md +2 -2
  158. package/skills/{using-agent-skills → i3-using-agent-skills}/SKILL.md +67 -67
  159. package/tests/installer.test.cjs +60 -12
  160. /package/evals/fixtures/{api-and-interface-design → i3-api-and-interface-design}/service-brief.md +0 -0
  161. /package/evals/fixtures/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/README.md +0 -0
  162. /package/evals/fixtures/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/index.html +0 -0
  163. /package/evals/fixtures/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/server.js +0 -0
  164. /package/evals/fixtures/{ci-cd-and-automation → i3-ci-cd-and-automation}/package.json +0 -0
  165. /package/evals/fixtures/{ci-cd-and-automation → i3-ci-cd-and-automation}/src/slug.js +0 -0
  166. /package/evals/fixtures/{ci-cd-and-automation → i3-ci-cd-and-automation}/test/slug.test.js +0 -0
  167. /package/evals/fixtures/{code-review-and-quality → i3-code-review-and-quality}/user-search.diff +0 -0
  168. /package/evals/fixtures/{code-simplification → i3-code-simplification}/config-parser.js +0 -0
  169. /package/evals/fixtures/{code-simplification → i3-code-simplification}/config-parser.test.js +0 -0
  170. /package/evals/fixtures/{context-engineering → i3-context-engineering}/context-audit.md +0 -0
  171. /package/evals/fixtures/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/pagination.js +0 -0
  172. /package/evals/fixtures/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/pagination.test.js +0 -0
  173. /package/evals/fixtures/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/time-pressure.md +0 -0
  174. /package/evals/fixtures/{deprecation-and-migration → i3-deprecation-and-migration}/api-inventory.md +0 -0
  175. /package/evals/fixtures/{documentation-and-adrs → i3-documentation-and-adrs}/decision-context.md +0 -0
  176. /package/evals/fixtures/{doubt-driven-development → i3-doubt-driven-development}/migration-plan.md +0 -0
  177. /package/evals/fixtures/{frontend-ui-engineering → i3-frontend-ui-engineering}/Button.tsx +0 -0
  178. /package/evals/fixtures/{frontend-ui-engineering → i3-frontend-ui-engineering}/design-system.md +0 -0
  179. /package/evals/fixtures/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/app.js +0 -0
  180. /package/evals/fixtures/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/app.test.js +0 -0
  181. /package/evals/fixtures/{incremental-implementation → i3-incremental-implementation}/reports.js +0 -0
  182. /package/evals/fixtures/{incremental-implementation → i3-incremental-implementation}/reports.test.js +0 -0
  183. /package/evals/fixtures/{incremental-implementation → i3-incremental-implementation}/tasks/plan.md +0 -0
  184. /package/evals/fixtures/{observability-and-instrumentation → i3-observability-and-instrumentation}/operations.md +0 -0
  185. /package/evals/fixtures/{observability-and-instrumentation → i3-observability-and-instrumentation}/payment-retry.js +0 -0
  186. /package/evals/fixtures/{performance-optimization → i3-performance-optimization}/benchmark.js +0 -0
  187. /package/evals/fixtures/{performance-optimization → i3-performance-optimization}/products.js +0 -0
  188. /package/evals/fixtures/{planning-and-task-breakdown → i3-planning-and-task-breakdown}/notifications-spec.md +0 -0
  189. /package/evals/fixtures/{security-and-hardening → i3-security-and-hardening}/webhook.js +0 -0
  190. /package/evals/fixtures/{security-and-hardening → i3-security-and-hardening}/webhook.test.js +0 -0
  191. /package/evals/fixtures/{shipping-and-launch → i3-shipping-and-launch}/authority-pressure.md +0 -0
  192. /package/evals/fixtures/{shipping-and-launch → i3-shipping-and-launch}/launch-status.md +0 -0
  193. /package/evals/fixtures/{source-driven-development → i3-source-driven-development}/framework-task.md +0 -0
  194. /package/evals/fixtures/{spec-driven-development → i3-spec-driven-development}/billing-brief.md +0 -0
  195. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/BUG.md +0 -0
  196. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/README.md +0 -0
  197. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/package.json +0 -0
  198. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/src/split.js +0 -0
  199. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/test/split.test.js +0 -0
  200. /package/evals/fixtures/{using-agent-skills → i3-using-agent-skills}/incident.md +0 -0
  201. /package/skills/{constraint-driven-development → i3-constraint-driven-development}/references/floor-guard.md +0 -0
  202. /package/skills/{idea-refine → i3-idea-refine}/examples.md +0 -0
  203. /package/skills/{idea-refine → i3-idea-refine}/frameworks.md +0 -0
  204. /package/skills/{idea-refine → i3-idea-refine}/refinement-criteria.md +0 -0
@@ -11,7 +11,7 @@ npx @givolt/i3-composer-agent --codebuddy
11
11
  The terminal wizard preselects CodeBuddy, still allows multiple tools, and asks
12
12
  for project or global scope before installing. Project scope writes these paths:
13
13
 
14
- - `.codebuddy/skills/` — all {{SKILL_COUNT}} skills with their original IDs.
14
+ - `.codebuddy/skills/` — all {{SKILL_COUNT}} skills with `i3-` IDs.
15
15
  - `.codebuddy/references/` — shared checklists used by skill-relative links.
16
16
  - `.codebuddy/commands/` — all {{COMMAND_COUNT}} existing lifecycle workflows.
17
17
  - `.codebuddy/agents/` — all {{PERSONA_COUNT}} persona definitions.
@@ -22,12 +22,12 @@ not replaced. Reload the CodeBuddy window or start a new chat, then inspect
22
22
  the Skills list and type `/` to inspect the command menu.
23
23
 
24
24
  ```text
25
- /spec
26
- /plan
27
- /build
28
- /build auto
29
- /review
30
- /ship
25
+ /i3-spec
26
+ /i3-plan
27
+ /i3-build
28
+ /i3-build auto
29
+ /i3-review
30
+ /i3-ship
31
31
  ```
32
32
 
33
33
  The command wrappers reference installed skill IDs without the plugin namespace.
@@ -70,16 +70,17 @@ manifest. It declares `.claude/commands/` and `commands/`, preserving the nine
70
70
  original lifecycle commands and their workflow content.
71
71
 
72
72
  ```text
73
- /i3-composer-agent:spec
74
- /i3-composer-agent:plan
75
- /i3-composer-agent:build
76
- /i3-composer-agent:build auto
77
- /i3-composer-agent:review
78
- /i3-composer-agent:ship
73
+ /i3-composer-agent:i3-spec
74
+ /i3-composer-agent:i3-plan
75
+ /i3-composer-agent:i3-build
76
+ /i3-composer-agent:i3-build auto
77
+ /i3-composer-agent:i3-review
78
+ /i3-composer-agent:i3-ship
79
79
  ```
80
80
 
81
- Skill IDs, persona names, artifact paths, and workflow gates retain their
82
- upstream behavior. The plugin namespace changes to `i3-composer-agent`.
81
+ Skill IDs and command filenames use `i3-`. Persona names, artifact paths,
82
+ and workflow gates retain their upstream behavior. The plugin namespace is
83
+ `i3-composer-agent`.
83
84
 
84
85
  The prepared plugin includes all skills, personas, commands, hooks and shared
85
86
  `references/`. Native skill installation above does not enable plugin hooks.
@@ -7,8 +7,8 @@ npx @givolt/i3-composer-agent --codex
7
7
  ```
8
8
 
9
9
  Choose project or global scope. Native installation uses `.agents/skills/`
10
- or `~/.agents/skills/`, plus the sibling `references/` directory. It retains
11
- the {{SKILL_COUNT}} original skill IDs. This mode does not add short lifecycle
10
+ or `~/.agents/skills/`, plus the sibling `references/` directory. It installs
11
+ the {{SKILL_COUNT}} skills with `i3-` IDs. This mode does not add short lifecycle
12
12
  slash commands or enable plugin hooks.
13
13
 
14
14
  For complete plugin registration, prepare a persistent bundle explicitly:
@@ -25,20 +25,20 @@ codex plugin marketplace add ./i3-composer-agent
25
25
  codex plugin add i3-composer-agent@i3-composer-agent
26
26
  ```
27
27
 
28
- Start a new Codex session after registration. All {{SKILL_COUNT}} existing skills keep their
29
- original IDs. In CLI/IDE, use `/skills` or `$spec-driven-development`; in chat,
28
+ Start a new Codex session after registration. All {{SKILL_COUNT}} skills use
29
+ `i3-` IDs. In CLI/IDE, use `/skills` or `$i3-spec-driven-development`; in chat,
30
30
  explicitly request the relevant skill from i3 Composer Agent.
31
31
 
32
32
  The adapter in `.codex-plugin/plugin.json` points at the unchanged `skills/`
33
33
  layout. Shared checklists remain under `references/`, so skill-relative links
34
34
  resolve inside the complete plugin bundle.
35
35
 
36
- The short lifecycle commands (`/spec`, `/plan`, `/build`, `/ship`) remain
36
+ The short lifecycle commands (`/i3-spec`, `/i3-plan`, `/i3-build`, `/i3-ship`) remain
37
37
  available in hosts that load the Claude-compatible command manifest. Codex
38
38
  lifecycle-command adaptation is separate from this brand conversion. Native
39
39
  Codex `/plan` switches planning mode; it is not the plugin's planning wrapper.
40
40
 
41
- Do not preload `using-agent-skills/SKILL.md` into always-on context: Codex routes
41
+ Do not preload `i3-using-agent-skills/SKILL.md` into always-on context: Codex routes
42
42
  skills natively. The meta-skill can remain installed and explicitly invoked.
43
43
 
44
44
  For local source testing, replace `./i3-composer-agent` above with the absolute
@@ -8,6 +8,8 @@ const path = require('node:path');
8
8
  const { spawnSync } = require('node:child_process');
9
9
  const root = path.resolve(__dirname, '../..');
10
10
  const baselineVersion = require('../upstream.json').upstreamVersion;
11
+ const upstream = require('../upstream.json');
12
+ const { runtimePath, rewriteReferences } = require('../identifiers.cjs');
11
13
 
12
14
  function run(directory, executable, args) {
13
15
  return spawnSync(executable, args, { cwd: directory, encoding: 'utf8' });
@@ -24,6 +26,19 @@ function fixture(t, branch = 'release/test-candidate') {
24
26
  for (const name of ['skills', 'references', 'agents', 'commands', '.claude', '.gemini', '.claude-plugin', '.codex-plugin', '.agents', 'hooks', 'docs', 'scripts', 'evals', 'rebrand', 'LICENSE', 'plugin.json', 'README.md']) {
25
27
  fs.cpSync(path.join(root, name), path.join(directory, name), { recursive: true, filter: file => !file.includes(`${path.sep}results${path.sep}`) });
26
28
  }
29
+ function restore(folder) {
30
+ for (const entry of fs.readdirSync(folder, { withFileTypes: true })) {
31
+ if (entry.name === 'rebrand') continue;
32
+ const file = path.join(folder, entry.name);
33
+ if (entry.isDirectory()) restore(file);
34
+ else if (/\.(?:md|js|cjs|sh|toml|json|yml|patch|diff)$/.test(entry.name)) fs.writeFileSync(file, rewriteReferences(fs.readFileSync(file, 'utf8'), true));
35
+ }
36
+ }
37
+ restore(directory);
38
+ for (const source of [...upstream.skills.map(id => `skills/${id}`), ...upstream.skills.map(id => `evals/cases/${id}.json`), ...upstream.skills.map(id => `evals/fixtures/${id}`), ...upstream.runtimeFiles.filter(file => /commands\/[^/]+\.(md|toml)$/.test(file))]) {
39
+ const branded = runtimePath(source);
40
+ if (fs.existsSync(path.join(directory, branded))) fs.renameSync(path.join(directory, branded), path.join(directory, source));
41
+ }
27
42
  // Model an upstream source checkout, including when this suite runs in a packed branded bundle.
28
43
  for (const name of ['plugin.json', '.claude-plugin/plugin.json', '.codex-plugin/plugin.json']) {
29
44
  const file = path.join(directory, name);
@@ -57,9 +72,62 @@ test('a source checkout generates a complete, repeatable branded distribution',
57
72
  const brand = JSON.parse(fs.readFileSync(path.join(directory, 'rebrand/brand.json'), 'utf8'));
58
73
  assert.equal(pkg.version, brand.releaseVersion);
59
74
  assert.equal(fs.existsSync(path.join(directory, 'bin/i3-composer-agent.cjs')), true);
60
- assert.equal(node(directory, 'scripts/validate-brand.cjs').status, 0);
75
+ const validation = node(directory, 'scripts/validate-brand.cjs');
76
+ assert.equal(validation.status, 0, validation.stdout + validation.stderr);
77
+ const complete = run(directory, 'npm', ['run', 'validate']);
78
+ assert.equal(complete.status, 0, complete.stdout + complete.stderr);
79
+ const routing = node(directory, 'scripts/run-evals.js', ['--min-rank1', '95']);
80
+ assert.equal(routing.status, 0, routing.stdout + routing.stderr);
81
+ const check = node(directory, 'rebrand/apply.cjs', ['--check']);
82
+ assert.equal(check.status, 0, check.stdout + check.stderr);
83
+ });
84
+
85
+ test('branded commands and skills use i3 identifiers with working local references', t => {
86
+ const directory = fixture(t);
87
+ record(directory);
88
+ apply(directory);
89
+ const skill = 'i3-spec-driven-development';
90
+ const file = path.join(directory, 'skills', skill, 'SKILL.md');
91
+ assert.ok(fs.existsSync(file), 'branded Skill directory must use i3-');
92
+ assert.match(fs.readFileSync(file, 'utf8'), /^name: i3-spec-driven-development$/m);
93
+ assert.equal(fs.existsSync(path.join(directory, 'skills/spec-driven-development')), false);
94
+ const command = fs.readFileSync(path.join(directory, '.claude/commands/i3-spec.md'), 'utf8');
95
+ assert.match(command, /i3-composer-agent:i3-spec-driven-development/);
96
+ assert.equal(fs.existsSync(path.join(directory, '.claude/commands/spec.md')), false);
97
+ const helper = 'skills/i3-idea-refine/scripts/idea-refine.sh';
98
+ assert.ok(fs.statSync(path.join(directory, helper)).mode & 0o111, 'helper execution permissions must survive renaming');
99
+ assert.ok(fs.readFileSync(path.join(directory, 'skills/i3-idea-refine/SKILL.md'), 'utf8').includes(helper), 'helper reference must resolve to its retained filename');
100
+ for (const commands of ['commands', '.gemini/commands']) {
101
+ assert.ok(fs.existsSync(path.join(directory, commands, 'i3-planning.toml')));
102
+ }
103
+ const hook = fs.readFileSync(path.join(directory, 'hooks/session-start.sh'), 'utf8');
104
+ assert.match(hook, /i3-using-agent-skills\/SKILL\.md/);
105
+ assert.equal(node(directory, 'scripts/validate-commands.js').status, 0);
106
+ const readme = fs.readFileSync(path.join(directory, 'README.md'), 'utf8');
107
+ assert.match(readme, /\/i3-spec/);
108
+ assert.match(readme, /skills\/i3-spec-driven-development\/SKILL\.md/);
61
109
  const check = node(directory, 'rebrand/apply.cjs', ['--check']);
62
110
  assert.equal(check.status, 0, check.stdout + check.stderr);
111
+ apply(directory);
112
+ assert.equal(fs.existsSync(path.join(directory, 'skills/i3-i3-spec-driven-development')), false);
113
+ });
114
+
115
+ test('generated native installer preserves references and migrates legacy identifiers safely', t => {
116
+ const directory = fixture(t);
117
+ record(directory);
118
+ apply(directory);
119
+ const result = run(directory, process.execPath, ['--test', 'tests/installer.test.cjs']);
120
+ assert.equal(result.status, 0, result.stdout + result.stderr);
121
+ });
122
+
123
+ test('identifier rewriting preserves upstream URLs and avoids repeated prefixes', () => {
124
+ const content = 'Use spec-driven-development and /spec. https://github.com/addyosmani/agent-skills/blob/main/skills/spec-driven-development/SKILL.md';
125
+ const expected = 'Use i3-spec-driven-development and /i3-spec. https://github.com/addyosmani/agent-skills/blob/main/skills/spec-driven-development/SKILL.md';
126
+ assert.equal(rewriteReferences(content), expected);
127
+ assert.equal(rewriteReferences(expected), expected);
128
+ assert.equal(rewriteReferences(expected, true), content);
129
+ assert.equal(rewriteReferences('Save specs/auth/spec.md; use .claude/commands/spec.md.'), 'Save specs/auth/spec.md; use .claude/commands/i3-spec.md.');
130
+ assert.equal(rewriteReferences('skills/idea-refine/scripts/idea-refine.sh'), 'skills/i3-idea-refine/scripts/idea-refine.sh');
63
131
  });
64
132
 
65
133
  test('brand fixes advance independently while preserving upstream provenance', t => {
@@ -132,9 +200,9 @@ test('missing files and altered skill identifiers fail preservation validation',
132
200
  const directory = fixture(t);
133
201
  record(directory);
134
202
  apply(directory);
135
- const file = path.join(directory, 'skills/using-agent-skills/SKILL.md');
203
+ const file = path.join(directory, 'skills/i3-using-agent-skills/SKILL.md');
136
204
  const original = fs.readFileSync(file, 'utf8');
137
- fs.writeFileSync(file, original.replace('name: using-agent-skills', 'name: renamed-meta-skill'));
205
+ fs.writeFileSync(file, original.replace('name: i3-using-agent-skills', 'name: renamed-meta-skill'));
138
206
  assert.notEqual(node(directory, 'scripts/validate-brand.cjs').status, 0);
139
207
  fs.writeFileSync(file, original);
140
208
  fs.rmSync(file);
@@ -1,6 +1,6 @@
1
1
  # Accessibility Checklist
2
2
 
3
- Quick reference for WCAG 2.1 AA compliance. Use alongside the `frontend-ui-engineering` skill.
3
+ Quick reference for WCAG 2.1 AA compliance. Use alongside the `i3-frontend-ui-engineering` skill.
4
4
 
5
5
  ## Table of Contents
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Definition of Done
2
2
 
3
- A standing, project-wide bar that every change must clear before it counts as done. Unlike acceptance criteria, which vary per task and answer "did we build the right thing?", the Definition of Done is the same every time and answers "is this finished to our standard?". Use it as the final gate in `planning-and-task-breakdown`, `incremental-implementation`, and `shipping-and-launch`.
3
+ A standing, project-wide bar that every change must clear before it counts as done. Unlike acceptance criteria, which vary per task and answer "did we build the right thing?", the Definition of Done is the same every time and answers "is this finished to our standard?". Use it as the final gate in `i3-planning-and-task-breakdown`, `i3-incremental-implementation`, and `i3-shipping-and-launch`.
4
4
 
5
5
  ## Definition of Done vs. Acceptance Criteria
6
6
 
@@ -32,7 +32,7 @@ Apply this to every change before declaring it done.
32
32
  - [ ] Changes are scoped to the task; no unrelated refactors snuck in
33
33
  - [ ] Linting and formatting pass
34
34
 
35
- The depth behind these items lives in `code-review-and-quality` (the five-axis review) and `code-simplification` (reducing complexity without changing behavior).
35
+ The depth behind these items lives in `i3-code-review-and-quality` (the five-axis review) and `i3-code-simplification` (reducing complexity without changing behavior).
36
36
 
37
37
  ### Integration
38
38
  - [ ] Change works with the rest of the system, not just in isolation
@@ -41,20 +41,20 @@ The depth behind these items lives in `code-review-and-quality` (the five-axis r
41
41
 
42
42
  ### Documentation
43
43
  - [ ] Public interfaces, APIs, and user-facing behavior are documented
44
- - [ ] Architectural decisions worth preserving are recorded (see `documentation-and-adrs`)
44
+ - [ ] Architectural decisions worth preserving are recorded (see `i3-documentation-and-adrs`)
45
45
  - [ ] Documentation describes the current state in timeless language, not the change history
46
46
 
47
47
  ### Ship-readiness
48
- - [ ] Security implications reviewed for any untrusted input, auth, or data handling (see `security-and-hardening`)
49
- - [ ] Observability in place for new critical paths (logs, metrics, traces) (see `observability-and-instrumentation`)
50
- - [ ] Rollback path exists for anything risky (see `shipping-and-launch`)
48
+ - [ ] Security implications reviewed for any untrusted input, auth, or data handling (see `i3-security-and-hardening`)
49
+ - [ ] Observability in place for new critical paths (logs, metrics, traces) (see `i3-observability-and-instrumentation`)
50
+ - [ ] Rollback path exists for anything risky (see `i3-shipping-and-launch`)
51
51
  - [ ] The human has reviewed and approved before merge or deploy
52
52
 
53
53
  ## How to Apply
54
54
 
55
55
  - **Per task**: confirm the Correctness and Quality sections before checking the task off.
56
56
  - **Per feature**: confirm Integration and Documentation before considering the feature complete.
57
- - **Per release**: the full checklist is the floor; `shipping-and-launch` adds the deploy-specific gates on top.
57
+ - **Per release**: the full checklist is the floor; `i3-shipping-and-launch` adds the deploy-specific gates on top.
58
58
 
59
59
  Tailor the list to the project once, then reuse it unchanged. A Definition of Done that is renegotiated every sprint is not a Definition of Done.
60
60
 
@@ -1,6 +1,6 @@
1
1
  # Observability Checklist
2
2
 
3
- Quick reference for instrumenting production code. Use alongside the `observability-and-instrumentation` skill.
3
+ Quick reference for instrumenting production code. Use alongside the `i3-observability-and-instrumentation` skill.
4
4
 
5
5
  ## Table of Contents
6
6
 
@@ -28,7 +28,7 @@ Telemetry without a question is noise. Before instrumenting anything:
28
28
  - [ ] Correlation ID is propagated on every outbound call and async boundary (HTTP headers, queue metadata)
29
29
  - [ ] Any log stream written by more than one entry point (scheduler, replay endpoint, manual run) carries an entry-point field, set where the run starts and propagated alongside the correlation ID
30
30
  - [ ] Log levels are consistent: `error` = invariant broken, someone may act; `warn` = degraded but handled; `info` = significant business event; `debug` = off in production
31
- - [ ] No secrets, tokens, passwords, or unredacted PII in any log line (hard rule from `security-and-hardening`)
31
+ - [ ] No secrets, tokens, passwords, or unredacted PII in any log line (hard rule from `i3-security-and-hardening`)
32
32
  - [ ] Fields are allowlisted — no whole request/response bodies, no auth headers
33
33
  - [ ] External service calls logged with metadata only: endpoint, status, latency, attempt count, sanitized identifiers
34
34
  - [ ] Actual log output spot-checked: structured fields, not `[object Object]`
@@ -89,4 +89,4 @@ Before a feature ships to production, all of the following are true:
89
89
  - [ ] A request can be traced across every service it touches
90
90
  - [ ] On-call knows where the runbooks are
91
91
 
92
- For launch-day monitoring sequence and rollback triggers, see the `shipping-and-launch` skill.
92
+ For launch-day monitoring sequence and rollback triggers, see the `i3-shipping-and-launch` skill.
@@ -32,12 +32,12 @@ user → code-reviewer → report → user
32
32
  A slash command that wraps one persona with the project's skills. Saves the user from re-explaining the workflow every time.
33
33
 
34
34
  ```
35
- /review → code-reviewer (with code-review-and-quality skill) → report
35
+ /i3-review → code-reviewer (with i3-code-review-and-quality skill) → report
36
36
  ```
37
37
 
38
38
  **Use when:** the same single-persona invocation happens repeatedly with the same setup.
39
39
 
40
- **Examples in this repo:** `/review`, `/test`, `/code-simplify`.
40
+ **Examples in this repo:** `/i3-review`, `/i3-test`, `/i3-code-simplify`.
41
41
 
42
42
  **Cost:** same as direct invocation. The slash command is just a saved prompt.
43
43
 
@@ -51,7 +51,7 @@ Multiple personas operate on the same input concurrently, each producing an inde
51
51
 
52
52
  ```
53
53
  ┌─→ code-reviewer ─┐
54
- /ship → fan out ───┼─→ security-auditor ─┤→ merge → go/no-go + rollback
54
+ /i3-ship → fan out ───┼─→ security-auditor ─┤→ merge → go/no-go + rollback
55
55
  └─→ test-engineer ─┘
56
56
  ```
57
57
 
@@ -61,7 +61,7 @@ Multiple personas operate on the same input concurrently, each producing an inde
61
61
  - The merge step is small enough to stay in the main context
62
62
  - Wall-clock latency matters
63
63
 
64
- **Examples in this repo:** `/ship`.
64
+ **Examples in this repo:** `/i3-ship`.
65
65
 
66
66
  **Cost:** N parallel sub-agent contexts + one merge turn. Higher than direct invocation, but faster wall-clock and produces better reports because each sub-agent stays focused on its single perspective.
67
67
 
@@ -80,7 +80,7 @@ If any answer is "no," fall back to direct invocation or a single-persona comman
80
80
  The user runs slash commands in a defined order, carrying context (or commit history) between them. There is no orchestrator agent — the user IS the orchestrator.
81
81
 
82
82
  ```
83
- user runs: /spec → /plan → /build → /test → /review → /ship
83
+ user runs: /i3-spec → /i3-plan → /i3-build → /i3-test → /i3-review → /i3-ship
84
84
  ```
85
85
 
86
86
  **Use when:** the workflow has dependencies (each step needs the previous step's output) and human judgment between steps adds value.
@@ -134,7 +134,7 @@ Claude Code has two parallelism primitives. Pattern 3 (parallel fan-out with mer
134
134
  | Status | Stable | Experimental — requires `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` |
135
135
  | Cost | Lower | Higher — each teammate is a separate Claude instance |
136
136
 
137
- **The personas in this repo work in both modes.** When spawned as subagents (e.g. by `/ship`), they report findings to the main session. When spawned as teammates (`Spawn a teammate using the security-auditor agent type…`), they can challenge each other's findings directly. The persona definition is the same; only the spawning context changes.
137
+ **The personas in this repo work in both modes.** When spawned as subagents (e.g. by `/i3-ship`), they report findings to the main session. When spawned as teammates (`Spawn a teammate using the security-auditor agent type…`), they can challenge each other's findings directly. The persona definition is the same; only the spawning context changes.
138
138
 
139
139
  One subtlety: the `skills` and `mcpServers` frontmatter fields in a persona are honored when it runs as a subagent but **ignored when it runs as a teammate** — teammates load skills and MCP servers from your project and user settings, the same as a regular session. If a persona depends on a specific skill or MCP server being loaded, configure it at the session level so it's available in both modes.
140
140
 
@@ -167,13 +167,13 @@ The fields that DO work in plugin agents are: `name`, `description`, `tools`, `d
167
167
 
168
168
  ### Spawning multiple subagents in parallel
169
169
 
170
- In Claude Code, parallel fan-out (Pattern 3) requires issuing **multiple Agent tool calls in a single assistant turn**. Sequential turns serialize execution. `/ship` calls this out explicitly. Any new orchestrator command should do the same.
170
+ In Claude Code, parallel fan-out (Pattern 3) requires issuing **multiple Agent tool calls in a single assistant turn**. Sequential turns serialize execution. `/i3-ship` calls this out explicitly. Any new orchestrator command should do the same.
171
171
 
172
172
  ---
173
173
 
174
174
  ## Worked example: Agent Teams for competing-hypothesis debugging
175
175
 
176
- This example shows when to reach for **Agent Teams** instead of `/ship`'s subagent fan-out. The two patterns look similar from a distance — both spawn the same three personas — but the value comes from a different place.
176
+ This example shows when to reach for **Agent Teams** instead of `/i3-ship`'s subagent fan-out. The two patterns look similar from a distance — both spawn the same three personas — but the value comes from a different place.
177
177
 
178
178
  ### The scenario
179
179
 
@@ -186,19 +186,19 @@ Plausible root causes (mutually exclusive, all fit the symptoms):
186
186
  3. A missing index on a query that scales with cart size
187
187
  4. A flaky third-party API where the SDK retries silently before timing out
188
188
 
189
- A single agent will pick the first plausible theory and stop investigating. A `/ship`-style subagent fan-out would have each persona report independently — but their reports never meet, so nothing rules out the wrong theories.
189
+ A single agent will pick the first plausible theory and stop investigating. A `/i3-ship`-style subagent fan-out would have each persona report independently — but their reports never meet, so nothing rules out the wrong theories.
190
190
 
191
191
  This is exactly the case the Agent Teams docs describe: *"With multiple independent investigators actively trying to disprove each other, the theory that survives is much more likely to be the actual root cause."*
192
192
 
193
- ### Why this is *not* a `/ship` job
193
+ ### Why this is *not* a `/i3-ship` job
194
194
 
195
- | | `/ship` (subagents) | Agent Teams |
195
+ | | `/i3-ship` (subagents) | Agent Teams |
196
196
  |--|--------------------|-------------|
197
197
  | Sub-agents see | The same diff, different lenses | A shared task list, each other's messages |
198
198
  | Output | Three independent reports → one merge | Adversarial debate → consensus root cause |
199
199
  | Right when | You want a verdict on a known artifact | You want to *find* the artifact among hypotheses |
200
200
 
201
- `/ship` is a verdict; Agent Teams is an investigation.
201
+ `/i3-ship` is a verdict; Agent Teams is an investigation.
202
202
 
203
203
  ### Setup (one-time, per-environment)
204
204
 
@@ -262,7 +262,7 @@ Always cleanup through the lead, not a teammate (per the docs: teammates lack fu
262
262
 
263
263
  ### Cost expectation
264
264
 
265
- Three Sonnet teammates running for ~10–15 minutes of investigation costs noticeably more than the same three personas spawned as subagents by `/ship`. The justification is *quality of conclusion* — for production debugging where the wrong fix is expensive, the extra tokens are a bargain. For a routine PR review, stick with `/ship`.
265
+ Three Sonnet teammates running for ~10–15 minutes of investigation costs noticeably more than the same three personas spawned as subagents by `/i3-ship`. The justification is *quality of conclusion* — for production debugging where the wrong fix is expensive, the extra tokens are a bargain. For a routine PR review, stick with `/i3-ship`.
266
266
 
267
267
  ### Anti-pattern in this scenario
268
268
 
@@ -270,7 +270,7 @@ Do **not** rebuild this as a `/debug` slash command that fans out subagents. Sub
270
270
 
271
271
  ### When *not* to use Agent Teams
272
272
 
273
- - Production-bound verdict on a known diff → use `/ship` (subagents).
273
+ - Production-bound verdict on a known diff → use `/i3-ship` (subagents).
274
274
  - One specialist perspective on one artifact → direct persona invocation.
275
275
  - Sequential lifecycle (spec → plan → build) → user-driven slash commands (Pattern 4).
276
276
  - Read-heavy research with a small digest → built-in `Explore` subagent.
@@ -292,7 +292,7 @@ A persona whose job is to decide which other persona to call.
292
292
  **Why it fails:**
293
293
  - Pure routing layer with no domain value
294
294
  - Adds two paraphrasing hops → information loss + roughly 2× token cost
295
- - The user already knew they wanted a review; they could have called `/review` directly
295
+ - The user already knew they wanted a review; they could have called `/i3-review` directly
296
296
  - Replicates the work that slash commands and intent mapping in `AGENTS.md` already do
297
297
 
298
298
  **What to do instead:** add or refine slash commands. Document intent → command mapping in `AGENTS.md`.
@@ -315,7 +315,7 @@ A `code-reviewer` that internally invokes `security-auditor` when it sees auth c
315
315
 
316
316
  ### C. Sequential orchestrator that paraphrases
317
317
 
318
- An agent that calls `/spec`, then `/plan`, then `/build`, etc. on the user's behalf.
318
+ An agent that calls `/i3-spec`, then `/i3-plan`, then `/i3-build`, etc. on the user's behalf.
319
319
 
320
320
  **Why it fails:**
321
321
  - Loses the human checkpoints that catch wrong-direction work
@@ -329,7 +329,7 @@ An agent that calls `/spec`, then `/plan`, then `/build`, etc. on the user's beh
329
329
 
330
330
  ### D. Deep persona trees
331
331
 
332
- `/ship` calls a `pre-ship-coordinator` that calls a `quality-coordinator` that calls `code-reviewer`.
332
+ `/i3-ship` calls a `pre-ship-coordinator` that calls a `quality-coordinator` that calls `code-reviewer`.
333
333
 
334
334
  **Why it fails:**
335
335
  - Each layer adds latency and tokens with no decision value
@@ -1,6 +1,6 @@
1
1
  # Performance Checklist
2
2
 
3
- Quick reference checklist for web application performance. Use alongside the `performance-optimization` skill.
3
+ Quick reference checklist for web application performance. Use alongside the `i3-performance-optimization` skill.
4
4
 
5
5
  ## Table of Contents
6
6
 
@@ -132,7 +132,7 @@ When TTFB is slow (> 800ms), check each component in DevTools Network waterfall:
132
132
 
133
133
  ## Caching Strategies
134
134
 
135
- The decision material (which layer, which invalidation strategy, what never to cache) lives in the `performance-optimization` skill. This section covers the read/write patterns and the checklist.
135
+ The decision material (which layer, which invalidation strategy, what never to cache) lives in the `i3-performance-optimization` skill. This section covers the read/write patterns and the checklist.
136
136
 
137
137
  ### Read and write patterns
138
138
 
@@ -1,6 +1,6 @@
1
1
  # Security Checklist
2
2
 
3
- Quick reference for web application security. Use alongside the `security-and-hardening` skill.
3
+ Quick reference for web application security. Use alongside the `i3-security-and-hardening` skill.
4
4
 
5
5
  ## Table of Contents
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Testing Patterns Reference (JavaScript/TypeScript)
2
2
 
3
- Quick reference of JavaScript/TypeScript testing patterns — Jest, React Testing Library, Supertest, and Playwright — illustrating the universal principles from the `test-driven-development` skill. The principles (Arrange-Act-Assert, naming, mock discipline, anti-patterns) apply in any ecosystem; the syntax and tooling shown here are JS/TS-specific. In another stack, follow the same principles with the repository's own test framework and commands.
3
+ Quick reference of JavaScript/TypeScript testing patterns — Jest, React Testing Library, Supertest, and Playwright — illustrating the universal principles from the `i3-test-driven-development` skill. The principles (Arrange-Act-Assert, naming, mock discipline, anti-patterns) apply in any ecosystem; the syntax and tooling shown here are JS/TS-specific. In another stack, follow the same principles with the repository's own test framework and commands.
4
4
 
5
5
  ## Table of Contents
6
6
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  'use strict';
4
4
 
5
- // Contract test for skills/constraint-driven-development/references/floor-guard.md.
5
+ // Contract test for skills/i3-constraint-driven-development/references/floor-guard.md.
6
6
  // The fenced `js` block is extracted unchanged and run, with real git, against small
7
7
  // fixtures: each is a fresh repository with one source file, one test file and a
8
8
  // CONSTRAINTS.md carrying a floor bullet, a coverage minimum, a bundle maximum and an
@@ -16,7 +16,7 @@ const { spawnSync } = require('node:child_process');
16
16
  const { after, before, test } = require('node:test');
17
17
 
18
18
  const REFERENCE = path.join(
19
- __dirname, '..', 'skills', 'constraint-driven-development', 'references', 'floor-guard.md',
19
+ __dirname, '..', 'skills', 'i3-constraint-driven-development', 'references', 'floor-guard.md',
20
20
  );
21
21
  const CONSTRAINTS = [
22
22
  '# Constraints',
@@ -85,6 +85,8 @@ const REQUIRED_SECTIONS = [
85
85
  // cannot bypass the validator by editing their own skill file.
86
86
  // Every entry must have a documented reason.
87
87
  const SECTION_EXEMPT_SKILLS = {
88
+ 'i3-using-agent-skills': 'Branded alias of the reviewed upstream meta-skill.',
89
+ 'i3-idea-refine': 'Branded alias of the reviewed upstream legacy structure.',
88
90
  'using-agent-skills': 'Meta-skill — orchestrates other skills; When-to-Use and Verification are not applicable to a routing document.',
89
91
  'idea-refine': 'Legacy structure predating skill-anatomy.md — uses How-It-Works/Usage/Anti-patterns instead of standard headings. Tracked for conformance in https://github.com/addyosmani/agent-skills/issues',
90
92
  };
@@ -608,13 +608,13 @@ test('accepted grading omits run key when no metadata is provided', () => {
608
608
  });
609
609
 
610
610
  test('materializes a git baseline and applies a working-tree patch', () => {
611
- const workspace = materializeWorkspace({ files: ['git-workflow-and-versioning'] });
611
+ const workspace = materializeWorkspace({ files: ['i3-git-workflow-and-versioning'] });
612
612
  try {
613
613
  const status = spawnSync('git', ['status', '--short'], { cwd: workspace, encoding: 'utf8' });
614
614
  const commits = spawnSync('git', ['rev-list', '--count', 'HEAD'], { cwd: workspace, encoding: 'utf8' });
615
615
 
616
616
  assert.equal(status.status, 0, status.stdout + status.stderr);
617
- assert.match(status.stdout, / M git-workflow-and-versioning\/app\.js/);
617
+ assert.match(status.stdout, / M i3-git-workflow-and-versioning\/app\.js/);
618
618
  assert.equal(commits.stdout.trim(), '1');
619
619
  assert.equal(fs.existsSync(path.join(workspace, '.eval')), false);
620
620
  } finally {
@@ -45,8 +45,8 @@ test('passes when producers and consumers use the canonical artifact paths', ()
45
45
  writeFile(root, '.claude/commands/spec.md', 'Save the spec as `SPEC.md` in the project root.\n');
46
46
  writeFile(root, '.claude/commands/plan.md', 'Save the plan to `tasks/plan.md` and task list to `tasks/todo.md`.\n');
47
47
  writeFile(root, '.claude/commands/build.md', 'Look for a spec at `SPEC.md`, `docs/SPEC.md`, or under `spec/`. Require `tasks/plan.md`.\n');
48
- writeFile(root, 'skills/spec-driven-development/SKILL.md', 'Save the plan to `tasks/plan.md` and the task list to `tasks/todo.md`.\n');
49
- writeFile(root, 'skills/planning-and-task-breakdown/SKILL.md', 'Save to `tasks/plan.md` and `tasks/todo.md`.\n');
48
+ writeFile(root, 'skills/i3-spec-driven-development/SKILL.md', 'Save the plan to `tasks/plan.md` and the task list to `tasks/todo.md`.\n');
49
+ writeFile(root, 'skills/i3-planning-and-task-breakdown/SKILL.md', 'Save to `tasks/plan.md` and `tasks/todo.md`.\n');
50
50
 
51
51
  const result = run(root);
52
52
 
@@ -94,7 +94,7 @@ test('ignores non-artifact markdown references (no false positives)', () => {
94
94
  const root = makeSandbox();
95
95
  writeFile(
96
96
  root,
97
- 'skills/spec-driven-development/SKILL.md',
97
+ 'skills/i3-spec-driven-development/SKILL.md',
98
98
  'See `SKILL.md` and `references/testing-patterns.md`. Save the plan to `tasks/plan.md`.\n',
99
99
  );
100
100
 
@@ -60,8 +60,8 @@ const GUARDED_FILES = [
60
60
  'commands/planning.toml',
61
61
  'commands/build.toml',
62
62
  // Skills the commands invoke
63
- 'skills/spec-driven-development/SKILL.md',
64
- 'skills/planning-and-task-breakdown/SKILL.md',
63
+ 'skills/i3-spec-driven-development/SKILL.md',
64
+ 'skills/i3-planning-and-task-breakdown/SKILL.md',
65
65
  // Docs that tell users where the artifacts live
66
66
  'docs/getting-started.md',
67
67
  'docs/adoption-guide.md',
@@ -74,6 +74,8 @@ const GUARDED_FILES = [
74
74
  // drifted spec.md are both caught, then compared against the allowlist.
75
75
  const ARTIFACT_RE = /(?:[A-Za-z0-9._[\]-]+\/)*(?:spec|plan|todo)\.md/gi;
76
76
 
77
+ GUARDED_FILES.push(...GUARDED_FILES.filter(relative => /(?:^|\/)commands\//.test(relative)).map(relative => relative.replace(/(commands\/)([^/]+)(\.md|\.toml)$/, '$1i3-$2$3')));
78
+
77
79
  function findViolations(relPath) {
78
80
  const abs = path.join(ROOT, relPath);
79
81
  if (!fs.existsSync(abs)) return null; // skipped
@@ -9,7 +9,7 @@ const brand = require('../rebrand/brand.json');
9
9
  const pkg = require('../package.json');
10
10
  const upstream = require('../rebrand/upstream.json');
11
11
  const { validateCatalog } = require('../rebrand/catalog.cjs');
12
- validateCatalog(root, upstream);
12
+ validateCatalog(root, upstream, { branded: true });
13
13
  function json(relative) { return JSON.parse(fs.readFileSync(path.join(root, relative), 'utf8')); }
14
14
  assert.equal(pkg.name, brand.npmName);
15
15
  assert.equal(pkg.version, brand.releaseVersion);
@@ -31,13 +31,13 @@ for (const relative of ['.claude-plugin/marketplace.json', '.agents/plugins/mark
31
31
  assert.ok(json('.codex-plugin/plugin.json').interface.shortDescription.length <= 30);
32
32
  const skills = fs.readdirSync(path.join(root, 'skills')).filter(name => fs.existsSync(path.join(root, 'skills', name, 'SKILL.md')));
33
33
  assert.equal(skills.length, upstream.skills.length, 'brand conversion must preserve the reviewed upstream skills');
34
- assert.ok(skills.includes('using-agent-skills'), 'meta-skill ID must remain stable');
34
+ assert.ok(skills.includes('i3-using-agent-skills'), 'meta-skill ID must use the branded prefix');
35
35
  const commands = fs.readdirSync(path.join(root, '.claude/commands')).filter(name => name.endsWith('.md'));
36
36
  assert.equal(commands.length, upstream.commands.length, 'brand conversion must preserve the reviewed upstream commands');
37
37
  for (const command of commands) {
38
38
  const body = fs.readFileSync(path.join(root, '.claude/commands', command), 'utf8');
39
39
  assert.ok(!body.includes('agent-skills:'), `${command}: stale plugin namespace`);
40
- for (const match of body.matchAll(/i3-composer-agent:([a-z-]+)/g)) assert.ok(skills.includes(match[1]), `${command}: unknown skill ${match[1]}`);
40
+ for (const match of body.matchAll(/(?<!\/)i3-composer-agent:([a-z0-9-]+)/g)) assert.ok(skills.includes(match[1]), `${command}: unknown skill ${match[1]}`);
41
41
  }
42
42
  for (const relative of pkg.i3ComposerAgent.pluginFiles) assert.ok(fs.existsSync(path.join(root, relative)), `bundle is missing ${relative}`);
43
43
  assert.match(fs.readFileSync(path.join(root, 'LICENSE'), 'utf8'), /Copyright \(c\) 2025 Addy Osmani/);
@@ -46,6 +46,7 @@ const DIRS = {
46
46
  // Key = Claude stem, value = TOML stem.
47
47
  const NAME_MAP = {
48
48
  plan: 'planning',
49
+ 'i3-plan': 'i3-planning',
49
50
  };
50
51
  const NAME_MAP_REVERSE = Object.fromEntries(
51
52
  Object.entries(NAME_MAP).map(([k, v]) => [v, k])