@givolt/i3-composer-agent 1.0.0 → 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.
- package/.agents/plugins/marketplace.json +1 -1
- package/.claude/commands/{build.md → i3-build.md} +10 -10
- package/.claude/commands/{code-simplify.md → i3-code-simplify.md} +2 -2
- package/.claude/commands/{constraints.md → i3-constraints.md} +4 -4
- package/.claude/commands/{plan.md → i3-plan.md} +1 -1
- package/.claude/commands/{review.md → i3-review.md} +3 -3
- package/.claude/commands/{ship.md → i3-ship.md} +4 -4
- package/.claude/commands/{spec.md → i3-spec.md} +1 -1
- package/.claude/commands/{test.md → i3-test.md} +2 -2
- package/.claude/commands/{webperf.md → i3-webperf.md} +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.gemini/commands/{build.toml → i3-build.toml} +10 -10
- package/.gemini/commands/{code-simplify.toml → i3-code-simplify.toml} +2 -2
- package/.gemini/commands/{constraints.toml → i3-constraints.toml} +4 -4
- package/.gemini/commands/{planning.toml → i3-planning.toml} +1 -1
- package/{commands/review.toml → .gemini/commands/i3-review.toml} +3 -3
- package/.gemini/commands/{ship.toml → i3-ship.toml} +4 -4
- package/.gemini/commands/{spec.toml → i3-spec.toml} +1 -1
- package/{commands/test.toml → .gemini/commands/i3-test.toml} +2 -2
- package/.gemini/commands/{webperf.toml → i3-webperf.toml} +1 -1
- package/CHANGELOG.md +29 -1
- package/NOTICE.md +8 -2
- package/README.md +98 -54
- package/agents/code-reviewer.md +2 -2
- package/agents/security-auditor.md +1 -1
- package/agents/test-engineer.md +1 -1
- package/agents/web-performance-auditor.md +3 -3
- package/bin/agent-targets.json +726 -0
- package/bin/i3-composer-agent.cjs +84 -16
- package/bin/install.cjs +180 -0
- package/bin/skills-registry.LICENSE +21 -0
- package/bin/wizard.cjs +66 -0
- package/commands/{build.toml → i3-build.toml} +10 -10
- package/commands/{code-simplify.toml → i3-code-simplify.toml} +2 -2
- package/commands/{constraints.toml → i3-constraints.toml} +4 -4
- package/commands/{planning.toml → i3-planning.toml} +1 -1
- package/{.gemini/commands/review.toml → commands/i3-review.toml} +3 -3
- package/commands/{ship.toml → i3-ship.toml} +4 -4
- package/commands/{spec.toml → i3-spec.toml} +1 -1
- package/{.gemini/commands/test.toml → commands/i3-test.toml} +2 -2
- package/commands/{webperf.toml → i3-webperf.toml} +1 -1
- package/docs/adoption-guide.md +35 -35
- package/docs/agents.md +12 -12
- package/docs/antigravity-setup.md +14 -14
- package/docs/codebuddy-setup.md +64 -16
- package/docs/codex-setup.md +17 -6
- package/docs/commandcode-setup.md +5 -5
- package/docs/copilot-cli-setup.md +5 -5
- package/docs/copilot-setup.md +22 -22
- package/docs/cursor-setup.md +20 -20
- package/docs/developer-onboarding.md +5 -5
- package/docs/gemini-cli-setup.md +26 -26
- package/docs/getting-started.md +36 -36
- package/docs/opencode-setup.md +27 -27
- package/docs/skill-anatomy.md +3 -3
- package/docs/windsurf-setup.md +7 -7
- package/evals/cases/{api-and-interface-design.json → i3-api-and-interface-design.json} +4 -4
- package/evals/cases/{browser-testing-with-devtools.json → i3-browser-testing-with-devtools.json} +4 -4
- package/evals/cases/{ci-cd-and-automation.json → i3-ci-cd-and-automation.json} +4 -4
- package/evals/cases/{code-review-and-quality.json → i3-code-review-and-quality.json} +4 -4
- package/evals/cases/{code-simplification.json → i3-code-simplification.json} +4 -4
- package/evals/cases/{constraint-driven-development.json → i3-constraint-driven-development.json} +4 -4
- package/evals/cases/{context-engineering.json → i3-context-engineering.json} +4 -4
- package/evals/cases/{debugging-and-error-recovery.json → i3-debugging-and-error-recovery.json} +5 -5
- package/evals/cases/{deprecation-and-migration.json → i3-deprecation-and-migration.json} +4 -4
- package/evals/cases/{documentation-and-adrs.json → i3-documentation-and-adrs.json} +4 -4
- package/evals/cases/{doubt-driven-development.json → i3-doubt-driven-development.json} +3 -3
- package/evals/cases/{frontend-ui-engineering.json → i3-frontend-ui-engineering.json} +4 -4
- package/evals/cases/{git-workflow-and-versioning.json → i3-git-workflow-and-versioning.json} +3 -3
- package/evals/cases/{idea-refine.json → i3-idea-refine.json} +3 -3
- package/evals/cases/{incremental-implementation.json → i3-incremental-implementation.json} +4 -4
- package/evals/cases/{interview-me.json → i3-interview-me.json} +3 -3
- package/evals/cases/{observability-and-instrumentation.json → i3-observability-and-instrumentation.json} +3 -3
- package/evals/cases/{performance-optimization.json → i3-performance-optimization.json} +4 -4
- package/evals/cases/{planning-and-task-breakdown.json → i3-planning-and-task-breakdown.json} +4 -4
- package/evals/cases/{security-and-hardening.json → i3-security-and-hardening.json} +4 -4
- package/evals/cases/{shipping-and-launch.json → i3-shipping-and-launch.json} +4 -4
- package/evals/cases/{source-driven-development.json → i3-source-driven-development.json} +4 -4
- package/evals/cases/{spec-driven-development.json → i3-spec-driven-development.json} +5 -5
- package/evals/cases/{test-driven-development.json → i3-test-driven-development.json} +5 -5
- package/evals/cases/{using-agent-skills.json → i3-using-agent-skills.json} +4 -4
- package/evals/fixtures/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/.eval/working-tree.patch +3 -3
- package/evals/plugin/code-review-fires/graders/skill-fired.md +1 -1
- package/evals/plugin/code-review-stays-quiet/graders/not-fired.md +1 -1
- package/evals/plugin/code-review-stays-quiet/graders/tdd-fired.md +1 -1
- package/evals/plugin/code-review-stays-quiet/prompt.md +2 -2
- package/evals/plugin/code-review-stays-quiet-on-commit-message/graders/not-fired.md +1 -1
- package/evals/plugin/code-review-stays-quiet-on-commit-message/prompt.md +2 -2
- package/hooks/SDD-CACHE.md +3 -3
- package/hooks/SIMPLIFY-IGNORE.md +2 -2
- package/hooks/session-start-test.sh +1 -1
- package/hooks/session-start.sh +3 -3
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/rebrand/INSTALLATION-SPEC.md +47 -0
- package/rebrand/MAINTENANCE.md +5 -3
- package/rebrand/NOTICE.md +8 -2
- package/rebrand/PREFIX-SPEC.md +16 -0
- package/rebrand/UNIFICATION-SPEC.md +2 -2
- package/rebrand/VALIDATION.md +6 -2
- package/rebrand/VERSIONING.md +8 -5
- package/rebrand/apply.cjs +33 -10
- package/rebrand/brand.json +1 -1
- package/rebrand/catalog.cjs +16 -2
- package/rebrand/fork-patches.json +15 -0
- package/rebrand/identifiers.cjs +41 -0
- package/rebrand/overlay/CHANGELOG.md +29 -1
- package/rebrand/overlay/bin/agent-targets.json +726 -0
- package/rebrand/overlay/bin/i3-composer-agent.cjs +84 -16
- package/rebrand/overlay/bin/install.cjs +180 -0
- package/rebrand/overlay/bin/skills-registry.LICENSE +21 -0
- package/rebrand/overlay/bin/wizard.cjs +66 -0
- package/rebrand/overlay/scripts/validate-brand.cjs +3 -3
- package/rebrand/overlay/tests/installer.test.cjs +241 -0
- package/rebrand/templates/README.md +62 -18
- package/rebrand/templates/codebuddy-setup.md +64 -16
- package/rebrand/templates/codex-setup.md +17 -6
- package/rebrand/tests/pipeline.test.cjs +71 -3
- package/references/accessibility-checklist.md +1 -1
- package/references/definition-of-done.md +7 -7
- package/references/observability-checklist.md +3 -3
- package/references/orchestration-patterns.md +17 -17
- package/references/performance-checklist.md +2 -2
- package/references/security-checklist.md +1 -1
- package/references/testing-patterns.md +1 -1
- package/scripts/floor-guard-reference-test.js +2 -2
- package/scripts/lib/skill-lint.js +2 -0
- package/scripts/run-evals-test.js +2 -2
- package/scripts/validate-artifact-paths-test.js +3 -3
- package/scripts/validate-artifact-paths.js +4 -2
- package/scripts/validate-brand.cjs +3 -3
- package/scripts/validate-commands.js +1 -0
- package/scripts/validate-reference-links-test.js +11 -11
- package/scripts/validate-reference-links.js +1 -1
- package/skills/{api-and-interface-design → i3-api-and-interface-design}/SKILL.md +2 -2
- package/skills/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/SKILL.md +1 -1
- package/skills/{ci-cd-and-automation → i3-ci-cd-and-automation}/SKILL.md +2 -2
- package/skills/{code-review-and-quality → i3-code-review-and-quality}/SKILL.md +5 -5
- package/skills/{code-simplification → i3-code-simplification}/SKILL.md +1 -1
- package/skills/{constraint-driven-development → i3-constraint-driven-development}/SKILL.md +15 -15
- package/skills/{context-engineering → i3-context-engineering}/SKILL.md +1 -1
- package/skills/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/SKILL.md +2 -2
- package/skills/{deprecation-and-migration → i3-deprecation-and-migration}/SKILL.md +2 -2
- package/skills/{documentation-and-adrs → i3-documentation-and-adrs}/SKILL.md +1 -1
- package/skills/{doubt-driven-development → i3-doubt-driven-development}/SKILL.md +8 -8
- package/skills/{frontend-ui-engineering → i3-frontend-ui-engineering}/SKILL.md +1 -1
- package/skills/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/SKILL.md +4 -4
- package/skills/{idea-refine → i3-idea-refine}/SKILL.md +2 -2
- package/skills/{idea-refine → i3-idea-refine}/scripts/idea-refine.sh +1 -1
- package/skills/{incremental-implementation → i3-incremental-implementation}/SKILL.md +3 -3
- package/skills/{interview-me → i3-interview-me}/SKILL.md +12 -12
- package/skills/{observability-and-instrumentation → i3-observability-and-instrumentation}/SKILL.md +5 -5
- package/skills/{performance-optimization → i3-performance-optimization}/SKILL.md +1 -1
- package/skills/{performance-optimization → i3-performance-optimization}/references/optimization-patterns.md +1 -1
- package/skills/{planning-and-task-breakdown → i3-planning-and-task-breakdown}/SKILL.md +2 -2
- package/skills/{security-and-hardening → i3-security-and-hardening}/SKILL.md +3 -3
- package/skills/{security-and-hardening → i3-security-and-hardening}/references/hardening-patterns.md +1 -1
- package/skills/{shipping-and-launch → i3-shipping-and-launch}/SKILL.md +2 -2
- package/skills/{source-driven-development → i3-source-driven-development}/SKILL.md +2 -2
- package/skills/{spec-driven-development → i3-spec-driven-development}/SKILL.md +7 -7
- package/skills/{test-driven-development → i3-test-driven-development}/SKILL.md +2 -2
- package/skills/{using-agent-skills → i3-using-agent-skills}/SKILL.md +67 -67
- package/tests/installer.test.cjs +241 -0
- /package/evals/fixtures/{api-and-interface-design → i3-api-and-interface-design}/service-brief.md +0 -0
- /package/evals/fixtures/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/README.md +0 -0
- /package/evals/fixtures/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/index.html +0 -0
- /package/evals/fixtures/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/server.js +0 -0
- /package/evals/fixtures/{ci-cd-and-automation → i3-ci-cd-and-automation}/package.json +0 -0
- /package/evals/fixtures/{ci-cd-and-automation → i3-ci-cd-and-automation}/src/slug.js +0 -0
- /package/evals/fixtures/{ci-cd-and-automation → i3-ci-cd-and-automation}/test/slug.test.js +0 -0
- /package/evals/fixtures/{code-review-and-quality → i3-code-review-and-quality}/user-search.diff +0 -0
- /package/evals/fixtures/{code-simplification → i3-code-simplification}/config-parser.js +0 -0
- /package/evals/fixtures/{code-simplification → i3-code-simplification}/config-parser.test.js +0 -0
- /package/evals/fixtures/{context-engineering → i3-context-engineering}/context-audit.md +0 -0
- /package/evals/fixtures/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/pagination.js +0 -0
- /package/evals/fixtures/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/pagination.test.js +0 -0
- /package/evals/fixtures/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/time-pressure.md +0 -0
- /package/evals/fixtures/{deprecation-and-migration → i3-deprecation-and-migration}/api-inventory.md +0 -0
- /package/evals/fixtures/{documentation-and-adrs → i3-documentation-and-adrs}/decision-context.md +0 -0
- /package/evals/fixtures/{doubt-driven-development → i3-doubt-driven-development}/migration-plan.md +0 -0
- /package/evals/fixtures/{frontend-ui-engineering → i3-frontend-ui-engineering}/Button.tsx +0 -0
- /package/evals/fixtures/{frontend-ui-engineering → i3-frontend-ui-engineering}/design-system.md +0 -0
- /package/evals/fixtures/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/app.js +0 -0
- /package/evals/fixtures/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/app.test.js +0 -0
- /package/evals/fixtures/{incremental-implementation → i3-incremental-implementation}/reports.js +0 -0
- /package/evals/fixtures/{incremental-implementation → i3-incremental-implementation}/reports.test.js +0 -0
- /package/evals/fixtures/{incremental-implementation → i3-incremental-implementation}/tasks/plan.md +0 -0
- /package/evals/fixtures/{observability-and-instrumentation → i3-observability-and-instrumentation}/operations.md +0 -0
- /package/evals/fixtures/{observability-and-instrumentation → i3-observability-and-instrumentation}/payment-retry.js +0 -0
- /package/evals/fixtures/{performance-optimization → i3-performance-optimization}/benchmark.js +0 -0
- /package/evals/fixtures/{performance-optimization → i3-performance-optimization}/products.js +0 -0
- /package/evals/fixtures/{planning-and-task-breakdown → i3-planning-and-task-breakdown}/notifications-spec.md +0 -0
- /package/evals/fixtures/{security-and-hardening → i3-security-and-hardening}/webhook.js +0 -0
- /package/evals/fixtures/{security-and-hardening → i3-security-and-hardening}/webhook.test.js +0 -0
- /package/evals/fixtures/{shipping-and-launch → i3-shipping-and-launch}/authority-pressure.md +0 -0
- /package/evals/fixtures/{shipping-and-launch → i3-shipping-and-launch}/launch-status.md +0 -0
- /package/evals/fixtures/{source-driven-development → i3-source-driven-development}/framework-task.md +0 -0
- /package/evals/fixtures/{spec-driven-development → i3-spec-driven-development}/billing-brief.md +0 -0
- /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/BUG.md +0 -0
- /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/README.md +0 -0
- /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/package.json +0 -0
- /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/src/split.js +0 -0
- /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/test/split.test.js +0 -0
- /package/evals/fixtures/{using-agent-skills → i3-using-agent-skills}/incident.md +0 -0
- /package/skills/{constraint-driven-development → i3-constraint-driven-development}/references/floor-guard.md +0 -0
- /package/skills/{idea-refine → i3-idea-refine}/examples.md +0 -0
- /package/skills/{idea-refine → i3-idea-refine}/frameworks.md +0 -0
- /package/skills/{idea-refine → i3-idea-refine}/refinement-criteria.md +0 -0
|
@@ -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
|
# 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
|
|
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-
|
|
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/);
|
|
@@ -47,7 +47,7 @@ test('passes when a skill reaches the shared checklist two levels up', () => {
|
|
|
47
47
|
writeFile(root, 'references/definition-of-done.md', '# Definition of Done\n');
|
|
48
48
|
writeFile(
|
|
49
49
|
root,
|
|
50
|
-
'skills/using-agent-skills/SKILL.md',
|
|
50
|
+
'skills/i3-using-agent-skills/SKILL.md',
|
|
51
51
|
'See `../../references/definition-of-done.md`.\n'
|
|
52
52
|
);
|
|
53
53
|
|
|
@@ -64,7 +64,7 @@ test('fails when a skill links the shared checklist as if it were colocated', ()
|
|
|
64
64
|
writeFile(root, 'references/definition-of-done.md', '# Definition of Done\n');
|
|
65
65
|
writeFile(
|
|
66
66
|
root,
|
|
67
|
-
'skills/using-agent-skills/SKILL.md',
|
|
67
|
+
'skills/i3-using-agent-skills/SKILL.md',
|
|
68
68
|
'See `references/definition-of-done.md`.\n'
|
|
69
69
|
);
|
|
70
70
|
|
|
@@ -74,7 +74,7 @@ test('fails when a skill links the shared checklist as if it were colocated', ()
|
|
|
74
74
|
assert.match(result.stdout, /1 skills checked — 1 error\(s\) — FAILED/);
|
|
75
75
|
assert.match(
|
|
76
76
|
result.stdout,
|
|
77
|
-
/L1: references\/definition-of-done\.md — resolves to skills\/using-agent-skills\/references\/definition-of-done\.md/
|
|
77
|
+
/L1: references\/definition-of-done\.md — resolves to skills\/i3-using-agent-skills\/references\/definition-of-done\.md/
|
|
78
78
|
);
|
|
79
79
|
assert.match(result.stdout, /use `\.\.\/\.\.\/references\/<file>\.md`/);
|
|
80
80
|
});
|
|
@@ -82,7 +82,7 @@ test('fails when a skill links the shared checklist as if it were colocated', ()
|
|
|
82
82
|
test('checks markdown link syntax, not just backtick mentions', () => {
|
|
83
83
|
const root = makeSandbox();
|
|
84
84
|
writeFile(root, 'references/definition-of-done.md', '# Definition of Done\n');
|
|
85
|
-
writeFile(root, 'skills/using-agent-skills/SKILL.md', 'See [DoD](references/definition-of-done.md).\n');
|
|
85
|
+
writeFile(root, 'skills/i3-using-agent-skills/SKILL.md', 'See [DoD](references/definition-of-done.md).\n');
|
|
86
86
|
|
|
87
87
|
const result = run(root);
|
|
88
88
|
|
|
@@ -193,7 +193,7 @@ test('counts errors from SKILL.md and its reference files together', () => {
|
|
|
193
193
|
test('fails when a link points at a checklist that no longer exists', () => {
|
|
194
194
|
const root = makeSandbox();
|
|
195
195
|
writeFile(root, 'references/definition-of-done.md', '# Definition of Done\n');
|
|
196
|
-
writeFile(root, 'skills/shipping-and-launch/SKILL.md', 'See `../../references/renamed.md`.\n');
|
|
196
|
+
writeFile(root, 'skills/i3-shipping-and-launch/SKILL.md', 'See `../../references/renamed.md`.\n');
|
|
197
197
|
|
|
198
198
|
const result = run(root);
|
|
199
199
|
|
|
@@ -209,11 +209,11 @@ test('ignores paths that are not references/ links', () => {
|
|
|
209
209
|
writeFile(root, 'references/definition-of-done.md', '# Definition of Done\n');
|
|
210
210
|
writeFile(
|
|
211
211
|
root,
|
|
212
|
-
'skills/planning-and-task-breakdown/SKILL.md',
|
|
212
|
+
'skills/i3-planning-and-task-breakdown/SKILL.md',
|
|
213
213
|
[
|
|
214
214
|
'Save the task list to `tasks/todo.md` and the plan to `tasks/plan.md`.',
|
|
215
215
|
'Record findings in `PERF.md` or `docs/ideas/[idea-name].md`.',
|
|
216
|
-
'Related: `skills/incremental-implementation/SKILL.md`.',
|
|
216
|
+
'Related: `skills/i3-incremental-implementation/SKILL.md`.',
|
|
217
217
|
'See `../../references/definition-of-done.md`.',
|
|
218
218
|
'',
|
|
219
219
|
].join('\n')
|
|
@@ -231,7 +231,7 @@ test('reports every unresolvable link, not just the first per skill', () => {
|
|
|
231
231
|
writeFile(root, 'references/performance-checklist.md', '# Performance\n');
|
|
232
232
|
writeFile(
|
|
233
233
|
root,
|
|
234
|
-
'skills/code-review-and-quality/SKILL.md',
|
|
234
|
+
'skills/i3-code-review-and-quality/SKILL.md',
|
|
235
235
|
['See `references/security-checklist.md`.', 'And `references/performance-checklist.md`.', ''].join('\n')
|
|
236
236
|
);
|
|
237
237
|
|
|
@@ -246,7 +246,7 @@ test('a link inside a fenced block is an example, not a link to resolve', () =>
|
|
|
246
246
|
writeFile(root, 'references/definition-of-done.md', '# DoD\n');
|
|
247
247
|
writeFile(
|
|
248
248
|
root,
|
|
249
|
-
'skills/using-agent-skills/SKILL.md',
|
|
249
|
+
'skills/i3-using-agent-skills/SKILL.md',
|
|
250
250
|
[
|
|
251
251
|
'Shared checklists live two levels up:',
|
|
252
252
|
'',
|
|
@@ -271,7 +271,7 @@ test('fence exemption follows CommonMark rather than a bare ``` match', () => {
|
|
|
271
271
|
const root = makeSandbox();
|
|
272
272
|
writeFile(
|
|
273
273
|
root,
|
|
274
|
-
'skills/using-agent-skills/SKILL.md',
|
|
274
|
+
'skills/i3-using-agent-skills/SKILL.md',
|
|
275
275
|
[
|
|
276
276
|
'~~~markdown',
|
|
277
277
|
'[a](references/missing-a.md)',
|
|
@@ -296,7 +296,7 @@ test('a real broken link outside any fence is still reported', () => {
|
|
|
296
296
|
const root = makeSandbox();
|
|
297
297
|
writeFile(
|
|
298
298
|
root,
|
|
299
|
-
'skills/using-agent-skills/SKILL.md',
|
|
299
|
+
'skills/i3-using-agent-skills/SKILL.md',
|
|
300
300
|
[
|
|
301
301
|
'```markdown',
|
|
302
302
|
'[shown as an example](references/example-only.md)',
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* the skill's own directory, which is two levels below the root. All 18 links
|
|
10
10
|
* across 11 skills resolved to files that do not exist, in the repo and in
|
|
11
11
|
* every plugin-install layout (~/.claude/plugins/cache/..., ~/.codex/...).
|
|
12
|
-
* Agents that followed the guidance — for example using-agent-skills pointing
|
|
12
|
+
* Agents that followed the guidance — for example i3-using-agent-skills pointing
|
|
13
13
|
* at the Definition of Done — hit a file-not-found and stalled.
|
|
14
14
|
*
|
|
15
15
|
* Nothing else in CI catches this: validate-artifact-paths.js is scoped to
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: api-and-interface-design
|
|
2
|
+
name: i3-api-and-interface-design
|
|
3
3
|
description: Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -27,7 +27,7 @@ This means: every public behavior — including undocumented quirks, error messa
|
|
|
27
27
|
|
|
28
28
|
- **Be intentional about what you expose.** Every observable behavior is a potential commitment.
|
|
29
29
|
- **Don't leak implementation details.** If users can observe it, they will depend on it.
|
|
30
|
-
- **Plan for deprecation at design time.** See `deprecation-and-migration` for how to safely remove things users depend on.
|
|
30
|
+
- **Plan for deprecation at design time.** See `i3-deprecation-and-migration` for how to safely remove things users depend on.
|
|
31
31
|
- **Tests are not enough.** Even with perfect contract tests, Hyrum's Law means "safe" changes can break real users who depend on undocumented behavior.
|
|
32
32
|
|
|
33
33
|
### The One-Version Rule
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: browser-testing-with-devtools
|
|
2
|
+
name: i3-browser-testing-with-devtools
|
|
3
3
|
description: Tests in real browsers via Chrome DevTools MCP. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze network requests, profile performance, or verify visual output with real runtime data. Requires the chrome-devtools MCP server to be configured.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: ci-cd-and-automation
|
|
2
|
+
name: i3-ci-cd-and-automation
|
|
3
3
|
description: Automates CI/CD pipeline setup. Use when setting up or modifying build and deployment pipelines. Use when you need to automate quality gates, configure test runners in CI, or establish deployment strategies.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -186,7 +186,7 @@ Agent fixes → pushes → CI runs again
|
|
|
186
186
|
```
|
|
187
187
|
Lint failure → Agent runs `npm run lint --fix` and commits
|
|
188
188
|
Type error → Agent reads the error location and fixes the type
|
|
189
|
-
Test failure → Agent follows debugging-and-error-recovery skill
|
|
189
|
+
Test failure → Agent follows i3-debugging-and-error-recovery skill
|
|
190
190
|
Build error → Agent checks config and dependencies
|
|
191
191
|
```
|
|
192
192
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: code-review-and-quality
|
|
2
|
+
name: i3-code-review-and-quality
|
|
3
3
|
description: Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a human. Use when you need to assess code quality across multiple dimensions before it enters the main branch. Use when asked to review a diff or a pull request, even when the diff is pasted inline.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -63,7 +63,7 @@ Does the change fit the system's design?
|
|
|
63
63
|
|
|
64
64
|
### 4. Security
|
|
65
65
|
|
|
66
|
-
For detailed security guidance, see `security-and-hardening`. Does the change introduce vulnerabilities?
|
|
66
|
+
For detailed security guidance, see `i3-security-and-hardening`. Does the change introduce vulnerabilities?
|
|
67
67
|
|
|
68
68
|
- Is user input validated and sanitized?
|
|
69
69
|
- Are secrets kept out of code, logs, and version control?
|
|
@@ -76,7 +76,7 @@ For detailed security guidance, see `security-and-hardening`. Does the change in
|
|
|
76
76
|
|
|
77
77
|
### 5. Performance
|
|
78
78
|
|
|
79
|
-
For detailed profiling and optimization, see `performance-optimization`. Does the change introduce performance problems?
|
|
79
|
+
For detailed profiling and optimization, see `i3-performance-optimization`. Does the change introduce performance problems?
|
|
80
80
|
|
|
81
81
|
- Any N+1 query patterns?
|
|
82
82
|
- Any unbounded loops or unconstrained data fetching?
|
|
@@ -161,7 +161,7 @@ Tests reveal intent and coverage:
|
|
|
161
161
|
- Would the tests catch a regression if the code changed?
|
|
162
162
|
```
|
|
163
163
|
|
|
164
|
-
Answer the last question by experiment, not by reading. Invert one condition the change adds (drop a negation, swap `&&` for `||`), run the suite, then restore the file from a copy. A mutation that stays green is a finding: name the test case that is missing. For a project-wide mutation score, see `constraint-driven-development`.
|
|
164
|
+
Answer the last question by experiment, not by reading. Invert one condition the change adds (drop a negation, swap `&&` for `||`), run the suite, then restore the file from a copy. A mutation that stays green is a finding: name the test case that is missing. For a project-wide mutation score, see `i3-constraint-driven-development`.
|
|
165
165
|
|
|
166
166
|
### Step 3: Review the Implementation
|
|
167
167
|
|
|
@@ -299,7 +299,7 @@ Part of code review is dependency review:
|
|
|
299
299
|
4. **Mind the transitive graph.** Most installed packages are ones nobody chose directly. Review the lockfile diff, not just `package.json`; a single direct bump can pull in dozens of indirect changes.
|
|
300
300
|
5. **Keep the lockfile honest.** Commit it, review its diff, and never hand-edit it. The lockfile is the thing that actually pins what ships.
|
|
301
301
|
|
|
302
|
-
For triaging `npm audit` findings and supply-chain risk (typosquatting, compromised maintainers), follow the `security-and-hardening` skill — this section covers the upgrade *workflow*, that one covers the security verdict.
|
|
302
|
+
For triaging `npm audit` findings and supply-chain risk (typosquatting, compromised maintainers), follow the `i3-security-and-hardening` skill — this section covers the upgrade *workflow*, that one covers the security verdict.
|
|
303
303
|
|
|
304
304
|
## The Review Checklist
|
|
305
305
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: code-simplification
|
|
2
|
+
name: i3-code-simplification
|
|
3
3
|
description: Simplifies code for clarity. Use when refactoring code for clarity without changing behavior. Use when code works but is harder to read, maintain, or extend than it should be. Use when reviewing code that has accumulated unnecessary complexity.
|
|
4
4
|
---
|
|
5
5
|
|