devlyn-cli 1.14.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.md +104 -0
- package/CLAUDE.md +112 -119
- package/README.md +43 -125
- package/benchmark/auto-resolve/BENCHMARK-DESIGN.md +272 -0
- package/benchmark/auto-resolve/README.md +114 -0
- package/benchmark/auto-resolve/RUBRIC.md +162 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/NOTES.md +30 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/expected.json +68 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/spec.md +45 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.txt +8 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/NOTES.md +54 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json +170 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json +84 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/metadata.json +21 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-fail.json +214 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-pass.json +223 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/setup.sh +5 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md +56 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/task.txt +14 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/NOTES.md +28 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected-pair-plan-registry.json +162 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected.json +65 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/metadata.json +19 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/spec.md +56 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/NOTES.md +40 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/expected.json +57 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/setup.sh +6 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/spec.md +49 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/NOTES.md +38 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/expected.json +65 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/setup.sh +55 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/spec.md +49 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/task.txt +7 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/NOTES.md +38 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/expected.json +77 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/spec.md +49 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/task.txt +10 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/NOTES.md +50 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/expected.json +76 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/setup.sh +36 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/spec.md +46 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/task.txt +7 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/NOTES.md +50 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/expected.json +63 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/spec.md +48 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/task.txt +1 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/NOTES.md +93 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/expected.json +74 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/setup.sh +28 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/spec.md +62 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/task.txt +5 -0
- package/benchmark/auto-resolve/fixtures/SCHEMA.md +130 -0
- package/benchmark/auto-resolve/fixtures/test-repo/README.md +27 -0
- package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +63 -0
- package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +823 -0
- package/benchmark/auto-resolve/fixtures/test-repo/package.json +22 -0
- package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +17 -0
- package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +37 -0
- package/benchmark/auto-resolve/fixtures/test-repo/tests/cli.test.js +25 -0
- package/benchmark/auto-resolve/fixtures/test-repo/tests/server.test.js +58 -0
- package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +37 -0
- package/benchmark/auto-resolve/scripts/build-pair-eligible-manifest.py +174 -0
- package/benchmark/auto-resolve/scripts/check-f9-artifacts.py +256 -0
- package/benchmark/auto-resolve/scripts/compile-report.py +331 -0
- package/benchmark/auto-resolve/scripts/iter-0033c-compare.py +552 -0
- package/benchmark/auto-resolve/scripts/judge-opus-pass.sh +430 -0
- package/benchmark/auto-resolve/scripts/judge.sh +359 -0
- package/benchmark/auto-resolve/scripts/oracle-scope-tier-a.py +260 -0
- package/benchmark/auto-resolve/scripts/oracle-scope-tier-b.py +274 -0
- package/benchmark/auto-resolve/scripts/oracle-test-fidelity.py +328 -0
- package/benchmark/auto-resolve/scripts/pair-plan-idgen.py +401 -0
- package/benchmark/auto-resolve/scripts/pair-plan-lint.py +468 -0
- package/benchmark/auto-resolve/scripts/run-fixture.sh +691 -0
- package/benchmark/auto-resolve/scripts/run-iter-0033c.sh +234 -0
- package/benchmark/auto-resolve/scripts/run-suite.sh +214 -0
- package/benchmark/auto-resolve/scripts/ship-gate.py +222 -0
- package/bin/devlyn.js +129 -17
- package/config/skills/_shared/adapters/README.md +64 -0
- package/config/skills/_shared/adapters/gpt-5-5.md +29 -0
- package/config/skills/_shared/adapters/opus-4-7.md +29 -0
- package/config/skills/_shared/archive_run.py +130 -0
- package/config/skills/_shared/codex-config.md +54 -0
- package/config/skills/_shared/codex-monitored.sh +141 -0
- package/config/skills/_shared/engine-preflight.md +35 -0
- package/config/skills/_shared/expected.schema.json +93 -0
- package/config/skills/_shared/pair-plan-schema.md +298 -0
- package/config/skills/_shared/runtime-principles.md +110 -0
- package/config/skills/_shared/spec-verify-check.py +519 -0
- package/config/skills/devlyn:ideate/SKILL.md +99 -481
- package/config/skills/devlyn:ideate/references/elicitation.md +97 -0
- package/config/skills/devlyn:ideate/references/from-spec-mode.md +54 -0
- package/config/skills/devlyn:ideate/references/project-mode.md +76 -0
- package/config/skills/devlyn:ideate/references/spec-template.md +102 -0
- package/config/skills/devlyn:resolve/SKILL.md +172 -184
- package/config/skills/devlyn:resolve/references/free-form-mode.md +68 -0
- package/config/skills/devlyn:resolve/references/phases/build-gate.md +45 -0
- package/config/skills/devlyn:resolve/references/phases/cleanup.md +39 -0
- package/config/skills/devlyn:resolve/references/phases/implement.md +42 -0
- package/config/skills/devlyn:resolve/references/phases/plan.md +42 -0
- package/config/skills/devlyn:resolve/references/phases/verify.md +69 -0
- package/config/skills/devlyn:resolve/references/state-schema.md +106 -0
- package/{config/skills → optional-skills}/devlyn:design-system/SKILL.md +1 -0
- package/optional-skills/devlyn:reap/SKILL.md +105 -0
- package/optional-skills/devlyn:reap/scripts/reap.sh +129 -0
- package/optional-skills/devlyn:reap/scripts/scan.sh +116 -0
- package/{config/skills → optional-skills}/devlyn:team-design-ui/SKILL.md +5 -0
- package/package.json +16 -2
- package/scripts/lint-skills.sh +431 -0
- package/config/skills/devlyn:auto-resolve/SKILL.md +0 -602
- package/config/skills/devlyn:auto-resolve/references/build-gate.md +0 -116
- package/config/skills/devlyn:auto-resolve/references/engine-routing.md +0 -204
- package/config/skills/devlyn:browser-validate/SKILL.md +0 -164
- package/config/skills/devlyn:browser-validate/references/flow-testing.md +0 -118
- package/config/skills/devlyn:browser-validate/references/tier1-chrome.md +0 -137
- package/config/skills/devlyn:browser-validate/references/tier2-playwright.md +0 -195
- package/config/skills/devlyn:browser-validate/references/tier3-curl.md +0 -57
- package/config/skills/devlyn:clean/SKILL.md +0 -285
- package/config/skills/devlyn:design-ui/SKILL.md +0 -351
- package/config/skills/devlyn:discover-product/SKILL.md +0 -124
- package/config/skills/devlyn:evaluate/SKILL.md +0 -564
- package/config/skills/devlyn:feature-spec/SKILL.md +0 -630
- package/config/skills/devlyn:ideate/references/challenge-rubric.md +0 -122
- package/config/skills/devlyn:ideate/references/templates/item-spec.md +0 -90
- package/config/skills/devlyn:implement-ui/SKILL.md +0 -466
- package/config/skills/devlyn:preflight/SKILL.md +0 -370
- package/config/skills/devlyn:preflight/references/auditors/browser-auditor.md +0 -32
- package/config/skills/devlyn:preflight/references/auditors/code-auditor.md +0 -90
- package/config/skills/devlyn:preflight/references/auditors/docs-auditor.md +0 -38
- package/config/skills/devlyn:product-spec/SKILL.md +0 -603
- package/config/skills/devlyn:recommend-features/SKILL.md +0 -286
- package/config/skills/devlyn:review/SKILL.md +0 -161
- package/config/skills/devlyn:team-resolve/SKILL.md +0 -631
- package/config/skills/devlyn:team-review/SKILL.md +0 -493
- package/config/skills/devlyn:update-docs/SKILL.md +0 -463
- package/config/skills/workflow-routing/SKILL.md +0 -73
package/AGENTS.md
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Codex Project Instructions
|
|
2
|
+
|
|
3
|
+
devlyn-cli installs `/devlyn:ideate` (optional) and `/devlyn:resolve` (required) into Claude Code, plus the contract below. Codex CLI reads this file when invoked inside a project that has it. The principles are non-negotiable on every change.
|
|
4
|
+
|
|
5
|
+
## Core principles
|
|
6
|
+
|
|
7
|
+
Seven rules govern every change. Cite them by name when a decision touches one.
|
|
8
|
+
|
|
9
|
+
1. **No workaround** — fix the root cause, never the symptom. No `any`, no `@ts-ignore`, no silent `catch`, no hardcoded fallback that hides a broken contract.
|
|
10
|
+
2. **No overengineering** — smallest change that closes the goal. New abstractions require an observed failure mode they prevent. Subtractive-first: ask "what can I delete instead?" before writing anything new.
|
|
11
|
+
3. **No guesswork** — verify with the actual files, logs, diffs, and run output before forming conclusions. State the falsifiable prediction BEFORE the experiment; record raw results AFTER.
|
|
12
|
+
4. **Worldclass** — code that survives review at a non-trivial codebase. Zero CRITICAL, zero HIGH security/design findings on the shippable path.
|
|
13
|
+
5. **Best practice** — idiomatic for the language and framework. Use standard primitives; do not hand-roll what the library already provides.
|
|
14
|
+
6. **Optimized** — efficient on the resource that matters (wall-time, tokens, attention, cognitive load on the next reader). "Slower but more thoughtful" is not free.
|
|
15
|
+
7. **Production ready** — error states are explicit and visible; behavior under failure is what the user expects, not silent corruption.
|
|
16
|
+
|
|
17
|
+
Three discipline rules govern HOW the principles are applied:
|
|
18
|
+
|
|
19
|
+
- **Root cause via flexible why-chain.** Keep asking "why?" until you find the violated invariant. **If the answer surfaces in 2 questions, stop.** If it takes 5 or 7, keep going. Strict counts are wrong; until-found is right.
|
|
20
|
+
- **First-principles thinking.** Challenge the requirement before optimizing the answer. Most "we have to do X" assumptions are habit, not necessity. Reduce to irreducible truths and rebuild from there.
|
|
21
|
+
- **Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.** — Saint-Exupéry. The operating definition of "done." A change is finished when no further line, branch, flag, or doc paragraph can be removed without breaking a learned failure mode.
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
ideate (optional) -> resolve -> ship
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- `/devlyn:ideate` (optional) — unstructured idea → `docs/specs/<id>/spec.md` + `spec.expected.json`. Modes: default Q&A, `--quick` (autonomous-pipeline-safe), `--from-spec <path>`, `--project` (multi-feature).
|
|
30
|
+
- `/devlyn:resolve` — hands-free pipeline for any coding task. Free-form goal, `--spec <path>`, or `--verify-only <ref> --spec <path>`. Phases run inline: PLAN → IMPLEMENT → BUILD_GATE → CLEANUP → VERIFY (fresh-subagent, findings-only).
|
|
31
|
+
- Three creative power-user skills (`/devlyn:reap`, `/devlyn:design-system`, `/devlyn:team-design-ui`) live in `optional-skills/` and install only when the user opts in.
|
|
32
|
+
|
|
33
|
+
Each skill's `SKILL.md` is the source of truth for flags and workflow. Do not duplicate.
|
|
34
|
+
|
|
35
|
+
## Subtractive-First Editing
|
|
36
|
+
|
|
37
|
+
Before writing any change, answer in this order:
|
|
38
|
+
|
|
39
|
+
1. What can I delete that makes the addition unnecessary?
|
|
40
|
+
2. What can I delete that makes the addition smaller?
|
|
41
|
+
3. What is the minimum addition still required?
|
|
42
|
+
|
|
43
|
+
Hard rules:
|
|
44
|
+
|
|
45
|
+
- A pure-addition diff needs a citation: an explicit user/spec requirement OR an observed failure mode.
|
|
46
|
+
- Refactor-only changes should reduce line count unless a cited failure requires the new shape.
|
|
47
|
+
- Do not add flags, branches, or options for hypothetical users.
|
|
48
|
+
- Do not add defensive wrappers when an upstream contract can be corrected instead.
|
|
49
|
+
- Doc growth has the same cost as code growth. Delete the now-stale sentence before adding new prose.
|
|
50
|
+
- A change is not done until you have attempted one more deletion and confirmed it would break something.
|
|
51
|
+
|
|
52
|
+
## Goal-Locked Execution
|
|
53
|
+
|
|
54
|
+
Default mode is execution toward the user's stated goal. Do not drift.
|
|
55
|
+
|
|
56
|
+
Refuse these patterns:
|
|
57
|
+
|
|
58
|
+
- Unrequested work ("while here, also fix...").
|
|
59
|
+
- Tangential cleanup in files the task does not require.
|
|
60
|
+
- Speculative robustness for cases not observed in production, tests, findings, or the spec.
|
|
61
|
+
- Mid-flight re-scoping without user approval.
|
|
62
|
+
- Curiosity exploration that is not on the critical path.
|
|
63
|
+
|
|
64
|
+
Drift test: **did the user ask for this, OR does the stated goal strictly require it?** If both no, surface it as a follow-up note and continue on the original path.
|
|
65
|
+
|
|
66
|
+
In interactive sessions, ask a concise clarification when scope expansion is real. In hands-free pipelines, stay on scope and log the assumption in the final artifact.
|
|
67
|
+
|
|
68
|
+
## Error Handling
|
|
69
|
+
|
|
70
|
+
No silent fallbacks.
|
|
71
|
+
|
|
72
|
+
- Show clear errors, retry paths, or actionable guidance.
|
|
73
|
+
- Fallbacks allowed only when widely accepted and harmless (CSS fallback fonts, CDN failover, image placeholders).
|
|
74
|
+
- Silent `catch` blocks are bugs.
|
|
75
|
+
- Logging is not user-visible error handling.
|
|
76
|
+
- The Codex CLI availability downgrade is the one documented exception: emit `engine downgraded: codex-unavailable` and behave exactly like explicit Claude routing.
|
|
77
|
+
|
|
78
|
+
## Evidence Over Claim
|
|
79
|
+
|
|
80
|
+
Every finding cites concrete evidence:
|
|
81
|
+
|
|
82
|
+
- Code: `file:line` you opened.
|
|
83
|
+
- Missing implementation: state exactly what you searched and found absent.
|
|
84
|
+
- Doc: cite the stale text + section/line.
|
|
85
|
+
- Browser: route/URL + screenshot or observed evidence.
|
|
86
|
+
- Benchmark: run id, fixture id, metric, raw result path.
|
|
87
|
+
|
|
88
|
+
Exclude vague claims. They produce vague fixes.
|
|
89
|
+
|
|
90
|
+
## Working In a devlyn-cli Project
|
|
91
|
+
|
|
92
|
+
- Check `git status --short` before editing.
|
|
93
|
+
- Never revert user changes unless explicitly asked.
|
|
94
|
+
- Use `rg` / `rg --files` for search.
|
|
95
|
+
- Keep changes scoped to the task; stop when the core request is answered or the change is verified.
|
|
96
|
+
- For installer or skill edits inside the devlyn-cli source repo, run `bash scripts/lint-skills.sh`.
|
|
97
|
+
- Treat the project's own `docs/VISION.md`, `docs/ROADMAP.md`, `docs/roadmap/**`, and any local `AGENTS.md` / `CLAUDE.md` overrides as authoritative when present.
|
|
98
|
+
|
|
99
|
+
## Communication
|
|
100
|
+
|
|
101
|
+
- Lead with objective evidence before opinion.
|
|
102
|
+
- Be concise and specific.
|
|
103
|
+
- State blockers plainly.
|
|
104
|
+
- Separate completed work, verification, and remaining risks.
|
package/CLAUDE.md
CHANGED
|
@@ -1,176 +1,169 @@
|
|
|
1
1
|
# Project Instructions
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
For most work, the recommended sequence is:
|
|
3
|
+
devlyn-cli installs `/devlyn:ideate` (optional) and `/devlyn:resolve` (required) into Claude Code, plus the contract below. These principles are non-negotiable on every change — yours and any sub-agent's.
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
2. `/devlyn:auto-resolve "Implement per spec at docs/roadmap/phase-N/X-name.md"` — hands-free build → evaluate → polish
|
|
9
|
-
3. `/devlyn:preflight` — verify the implementation matches the roadmap before shipping
|
|
5
|
+
## Core principles
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
Seven rules govern every change. Cite them by name when a decision touches one.
|
|
12
8
|
|
|
13
|
-
|
|
9
|
+
1. **No workaround** — fix the root cause, never the symptom. No `any`, no `@ts-ignore`, no silent `catch`, no hardcoded fallback that hides a broken contract. Configuration-level skips that bypass the real issue are also rejects.
|
|
10
|
+
2. **No overengineering** — smallest change that closes the goal. New abstractions require an observed failure mode they prevent. Subtractive-first: ask "what can I delete instead?" before writing anything new.
|
|
11
|
+
3. **No guesswork** — verify with the actual files, logs, diffs, and run output before forming conclusions. State the falsifiable prediction BEFORE the experiment; record raw results AFTER. Retroactive prediction edits are dishonest.
|
|
12
|
+
4. **Worldclass** — code that survives review at a non-trivial codebase. Zero CRITICAL, zero HIGH security/design findings on the shippable path.
|
|
13
|
+
5. **Best practice** — idiomatic for the language and framework. Use standard primitives; do not hand-roll what the library already provides.
|
|
14
|
+
6. **Optimized** — efficient on the resource that matters (wall-time, tokens, attention, cognitive load on the next reader). "Slower but more thoughtful" is not free. Each layer of composition or process must beat the simpler baseline.
|
|
15
|
+
7. **Production ready** — error states are explicit and visible; behavior under failure is what the user expects, not silent corruption.
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
- Follow commit conventions in `.claude/commit-conventions.md`
|
|
17
|
-
- Follow design system in `docs/design-system.md` for UI/UX work if exist
|
|
17
|
+
Three discipline rules govern HOW the principles are applied:
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
- **Root cause via flexible why-chain.** Keep asking "why?" until you find the violated invariant. **If the answer surfaces in 2 questions, stop.** If it takes 5 or 7, keep going. Strict counts are wrong; until-found is right.
|
|
20
|
+
- **First-principles thinking.** Challenge the requirement before optimizing the answer. Most "we have to do X" assumptions are habit, not necessity. Reduce the problem to its irreducible truths and rebuild from there.
|
|
21
|
+
- **Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.** — Saint-Exupéry. This is the operating definition of "done." A change is finished when no further line, branch, flag, or doc paragraph can be removed without breaking a learned failure mode. Not before.
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
The runtime sub-agent contract below (Subtractive-first / Goal-locked / No-workaround discipline / Evidence over claim) expands these principles into concrete operational tests. Sub-agents in `/devlyn:resolve` and `/devlyn:ideate` enforce them at every phase.
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
- **Fallbacks are the exception, not the rule.** Only use fallbacks when it is a widely accepted best practice (e.g., fallback fonts in CSS, CDN failover, graceful image loading with placeholder). If unsure, handle the error explicitly instead.
|
|
25
|
-
- **Never hide failures.** The user should always know when something went wrong. A visible error with a retry button is better UX than silently showing stale/default data.
|
|
26
|
-
- **Pattern**: `try { doThing() } catch (error) { showErrorUI(error) }` — NOT `try { doThing() } catch { return fallbackValue }`
|
|
25
|
+
## Quick Start
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
Two skills cover the full cycle post iter-0034 Phase 4 cutover (2026-05-04). `/devlyn:ideate` is OPTIONAL; `/devlyn:resolve` is REQUIRED. **Both default to `--engine claude`** — pair / multi-engine routing is research-only at HEAD per the iter-0020 + iter-0033g + iter-0034 close-outs (see [`autoresearch/iterations/0020-pair-policy-narrow.md`](autoresearch/iterations/0020-pair-policy-narrow.md) + [`autoresearch/iterations/0034-phase-4-cutover.md`](autoresearch/iterations/0034-phase-4-cutover.md)). Pass `--engine auto` or `--engine codex` explicitly to opt into the research path; the harness silently downgrades to `claude` and emits a banner if the Codex CLI is missing.
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
1. `/devlyn:ideate` (optional) — unstructured idea → `docs/specs/<id>/spec.md` + `spec.expected.json`. Modes: default Q&A, `--quick` (autonomous-pipeline-safe), `--from-spec <path>`, `--project`.
|
|
30
|
+
2. `/devlyn:resolve` — hands-free pipeline for any coding task. Free-form goal, `--spec <path>`, or `--verify-only <diff> --spec <path>`. Phases: PLAN → IMPLEMENT → BUILD_GATE → CLEANUP → VERIFY (fresh subagent, findings-only).
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
2. **Checkpoint progress** - Use the task tools (TaskCreate / TaskUpdate) every 5-10 minutes to save findings
|
|
34
|
-
3. **Output intermediate summaries** - Provide "Current Understanding" snapshots so work isn't lost if interrupted
|
|
35
|
-
4. **Always deliver findings** - Never end mid-analysis; at minimum output:
|
|
36
|
-
- Files examined
|
|
37
|
-
- Key findings
|
|
38
|
-
- Remaining unknowns
|
|
39
|
-
- Recommended next steps
|
|
32
|
+
Each skill's `SKILL.md` is the source of truth for its flags and workflow — don't duplicate them here.
|
|
40
33
|
|
|
41
|
-
|
|
34
|
+
### When to use which
|
|
42
35
|
|
|
43
|
-
|
|
36
|
+
| Situation | Command |
|
|
37
|
+
|-----------|---------|
|
|
38
|
+
| New project / multi-feature plan / external spec to normalize | `/devlyn:ideate` (`--project`, default, or `--from-spec`) |
|
|
39
|
+
| One-line goal you want turned into a spec autonomously | `/devlyn:ideate --quick` |
|
|
40
|
+
| Spec already in hand | `/devlyn:resolve --spec <path>` |
|
|
41
|
+
| Free-form fix / feature / refactor / debug / PR review | `/devlyn:resolve "<describe the work>"` |
|
|
42
|
+
| Verify a diff or PR against a spec | `/devlyn:resolve --verify-only <ref> --spec <path>` |
|
|
44
43
|
|
|
45
|
-
|
|
44
|
+
### Subtractive-first editing — perfection = nothing left to remove
|
|
45
|
+
<!-- runtime-principles:section=subtractive-first:begin -->
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
2. `/devlyn:design-system [N]` → Extract tokens from chosen style
|
|
49
|
-
3. `/devlyn:implement-ui` → Team implements or improves UI from design system
|
|
50
|
-
4. `/devlyn:team-resolve [feature]` → Add features on top
|
|
47
|
+
> "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away." — Saint-Exupéry. **This is the operating definition of "done" in this repo.** A change is finished when no further line, branch, flag, or doc paragraph can be removed without breaking a learned failure mode. Not before.
|
|
51
48
|
|
|
52
|
-
|
|
49
|
+
This rule overrides instinct. LLMs (including you) are trained on corpora that reward elaborate, defensive, "thorough" code — so the default impulse is to add. That impulse is wrong here. Read the rules below as hard tests, not aesthetic preferences. They are not optional, not negotiable, and not satisfiable by writing more careful additions.
|
|
53
50
|
|
|
54
|
-
|
|
55
|
-
2. **Track progress** - Use the task tools (TaskCreate / TaskUpdate) to checkpoint each phase
|
|
56
|
-
3. **Test validation** - Write tests alongside implementation; iterate until green
|
|
57
|
-
4. **Small commits** - Commit working increments rather than large changesets
|
|
51
|
+
**Mandatory pre-edit question.** Before writing any change, you must answer in this order:
|
|
58
52
|
|
|
59
|
-
|
|
53
|
+
1. **What can I delete that makes the addition unnecessary?** If the addition becomes redundant after the deletion, ship the deletion alone.
|
|
54
|
+
2. **What can I delete that makes the addition smaller?** Trim the surrounding accretion before adding.
|
|
55
|
+
3. **Only then**, what is the minimum addition required?
|
|
60
56
|
|
|
61
|
-
|
|
57
|
+
If you skip question 1 or 2, you are violating this rule even if the resulting code looks clean.
|
|
62
58
|
|
|
63
|
-
|
|
59
|
+
**Hard tests every edit must pass:**
|
|
64
60
|
|
|
65
|
-
|
|
66
|
-
/
|
|
67
|
-
|
|
61
|
+
- **Net-negative is the default; pure-addition needs a citation.** A diff that adds N lines and removes 0 must point to a specific cause: a previously-observed failure mode (commit hash, fixture ID, finding ID, user-reported incident), OR an explicit user request / spec requirement that demands new user-visible behavior. The latter is a sufficient citation — do not block legitimate requested additions on the absence of a past failure. What is rejected: vague justifications like "it seems clearer," "for future flexibility," "just in case," "to be safe," "for completeness," "to handle edge cases" — these are the exact phrases that produce accretion.
|
|
62
|
+
- **Delete the line that makes the bug impossible, not the line that catches it.** Defensive wrappers, validation layers, error normalizers, and `try/catch` shells are usually evidence that an upstream contract is unclear. Fix the contract upstream and remove the defenses downstream. The trap: adding the wrapper feels like progress because it makes a test pass. The wrapper is debt; the contract fix is the work. **Scope guard**: if the upstream contract fix is outside the user's stated scope, stop and surface the scope expansion to the user before editing — Goal-locked execution overrides this. The right scope-expansion outcome is "user authorizes the upstream fix" or "user accepts a scoped local fix and a follow-up for upstream"; never silently restructure something the user didn't ask you to.
|
|
63
|
+
- **A new flag, branch, or option is admitting two failures**: (a) the default was wrong, (b) every reader pays attention cost forever. Default-fix-and-delete-flag beats add-flag-with-better-default. The bar for adding a configuration knob is "I have observed two real users with genuinely conflicting needs," not "this might be useful someday."
|
|
64
|
+
- **Doc additions are subject to the same rule.** Before adding a section to any `.md` file (CLAUDE.md, SKILL.md, README, references/), find the now-stale sentence or section the new one supersedes — delete that first. A growing instructions file dilutes the instructions that actually need to be followed; readers (human and LLM) skim long files and miss load-bearing rules.
|
|
65
|
+
- **A "cleaner" refactor that grows line count is not cleaner.** It is a sideways move that increases context, parsing, and review cost. **For refactor-only changes**, line count must drop unless a cited observed failure requires the new shape. **Never delete tests, contracts, public API, comments documenting non-obvious WHY, or user-facing behavior just to win the count** — that is gaming the metric, not honoring the principle. The metric serves complexity reduction; if a deletion would lose information not recoverable from code + commit history, it is the wrong deletion.
|
|
66
|
+
- **Stop adding when no further deletion is possible.** This is the Saint-Exupéry test inverted into a stopping rule: if you have made an addition and you cannot identify anything else that can be removed, examine the addition itself — is part of it still removable? Iterate until the diff is irreducible.
|
|
68
67
|
|
|
69
|
-
|
|
68
|
+
**Anti-rationalization clause** — explicitly guarding against LLM-style hedging:
|
|
70
69
|
|
|
71
|
-
|
|
70
|
+
- "More explicit is safer" is **not** a justification. Explicitness has a cost in attention and rot. Required-explicit goes in; nice-to-explicit gets cut.
|
|
71
|
+
- "Adding context for future readers" is **not** a justification. Future readers benefit more from shorter files than from explanatory prose. The code and the commit message together carry the why.
|
|
72
|
+
- "Defense-in-depth" is **not** a justification at the harness layer. Two layers that catch the same bug are evidence one of them should be the only layer.
|
|
73
|
+
- If you find yourself writing the phrase "in case" in a comment, code reviewer note, or doc, **stop and re-evaluate** — that phrase predicts an unjustified addition.
|
|
72
74
|
|
|
73
|
-
|
|
75
|
+
**Stopping rule.** A change is done when (a) all hypotheses it was meant to close are closed, AND (b) you have attempted at least one further deletion and confirmed it would break something. If you have not tried to delete more, you are not done. If nothing can be deleted to justify the current addition, the addition itself is too large — re-scope or surface the conflict to the user before proceeding.
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
**Never grow surface area silently.** Every accretion-shaped change must be visible: in the commit message, in the iteration file, or in a flagged review. Silent growth is the failure mode this rule exists to prevent.
|
|
78
|
+
<!-- runtime-principles:section=subtractive-first:end -->
|
|
76
79
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- `--skip-browser` — skip browser validation phase (auto-skipped for non-web changes)
|
|
80
|
-
- `--skip-build-gate` — skip the deterministic build gate (not recommended)
|
|
81
|
-
- `--build-gate strict` — treat warnings as errors; `--build-gate no-docker` — skip Docker builds for speed
|
|
82
|
-
- `--skip-review` — skip team-review phase
|
|
83
|
-
- `--skip-clean` — skip clean phase
|
|
84
|
-
- `--skip-docs` — skip update-docs phase
|
|
85
|
-
- `--engine auto|codex|claude` — intelligent model routing. `auto` (default) routes each phase and team role to the optimal model based on benchmark data: Codex GPT-5.4 handles BUILD and FIX (SWE-bench Pro lead), Claude Opus 4.7 handles EVALUATE and CHALLENGE (long-context retrieval + skeptical reasoning). Different models build vs critique — the cross-model GAN dynamic catches what single-model pipelines miss. `codex` forces Codex for implementation, Claude for orchestration and Chrome MCP. `claude` uses Claude for everything. Requires codex-mcp-server for `auto` and `codex` modes.
|
|
80
|
+
### Goal-locked execution — stay on the North Star, do not wander
|
|
81
|
+
<!-- runtime-principles:section=goal-locked:begin -->
|
|
86
82
|
|
|
87
|
-
|
|
83
|
+
Even with a North Star defined, work drifts off-course ("산으로 간다" / "삼천포로 빠진다" — going up the wrong mountain instead of forward). The harness must **actively block** this drift at run time, not merely discourage it. The default is ruler-straight execution toward the user's stated goal; any deviation requires explicit justification, not the inverse.
|
|
88
84
|
|
|
89
|
-
|
|
85
|
+
This rule exists because LLMs (including you) are trained to be helpful, comprehensive, and thorough — and "helpful" easily becomes "did more than asked." Doing more than asked is not helpfulness; it is scope creep. Read the rules below as hard blocks, not soft preferences.
|
|
90
86
|
|
|
91
|
-
|
|
92
|
-
/devlyn:preflight
|
|
93
|
-
```
|
|
87
|
+
**The five drift patterns you must refuse to execute on:**
|
|
94
88
|
|
|
95
|
-
|
|
89
|
+
1. **Unrequested work.** "While I'm here, I noticed X is broken/ugly/inefficient" → **stop**. The user did not ask for X. If X is a real defect, surface it as a finding, a follow-up suggestion, or an entry in a TODO list — do NOT fix it inside the current change. Mixing unrequested work with requested work is what makes diffs unreviewable and PRs eternal.
|
|
90
|
+
2. **Tangential cleanup.** "This file looks messy, let me also tidy..." → **stop**. The current task is the only task. Unrelated cleanup is a separate change requiring its own justification, scope, and pre-flight 0 check.
|
|
91
|
+
3. **Speculative robustness.** "Just adding a check / fallback / handler for the case where..." → **stop**. If the case has not been observed (in production, in tests, in a finding), it does not belong in this change. Defensive code added for unobserved cases is the most common form of accretion debt — it never gets removed because nobody can prove the case never happens.
|
|
92
|
+
4. **Re-scoping mid-flight.** "Actually, the better way to do this is to also restructure / rename / migrate..." → **stop**. If you discover the requested approach is wrong, surface that to the user with evidence and let them adjudicate. Do NOT silently expand scope. The user's explicit redirect is the only authorization to enlarge a task.
|
|
93
|
+
5. **Curiosity detours.** "Let me also explore how Y works to understand this better..." → **stop**, unless Y is provably on the goal's critical path. Curiosity-driven exploration is creative-mode; default is execution-mode.
|
|
96
94
|
|
|
97
|
-
|
|
95
|
+
**The single drift test before any deviation from the stated goal:** *"Did the user ask for this, OR does the user's stated goal strictly require it?"* If the answer to both is no, do not do it. Surface it as a note (commit message, end-of-turn summary, finding) and continue on the original path.
|
|
98
96
|
|
|
99
|
-
|
|
100
|
-
- `--phase N` — audit only phase N items
|
|
101
|
-
- `--autofix` — auto-promote CRITICAL/HIGH findings and run auto-resolve
|
|
102
|
-
- `--skip-browser` — skip browser validation
|
|
103
|
-
- `--skip-docs` — skip documentation audit
|
|
104
|
-
- `--engine auto|codex|claude` — `auto` (default) routes the code-auditor to Codex (SWE-bench Pro +11.7pp on code analysis); the docs-auditor and browser-auditor always use Claude regardless of `--engine` (writing-quality strength on docs drift; Chrome MCP tools are session-bound to Claude Code)
|
|
97
|
+
**Creative-mode is the narrow exception, not the default.** Creative-mode applies only when (a) the user explicitly invoked an ideation/exploration surface (`/devlyn:ideate`, optional `/devlyn:design-system`, "let's brainstorm", "explore options for"), OR (b) the goal is genuinely under-specified and a clarifying question is impossible (extremely rare — usually you should ask). For everything else — bug fixes, feature work, refactors, doc updates, pipeline runs, code review, debugging — execution-mode is the default and drift is a defect, not a feature.
|
|
105
98
|
|
|
106
|
-
**
|
|
99
|
+
**Anti-rationalization clause** — explicitly guarding against LLM hedging:
|
|
107
100
|
|
|
108
|
-
|
|
101
|
+
- "It's a small extra change" is **not** a justification. Small accretions compound; one of them is always small.
|
|
102
|
+
- "It's related to what they asked for" is **not** a justification. Related ≠ requested. Requested is the only standard.
|
|
103
|
+
- "It would be incomplete without this" is **not** a justification. The user defines completeness, not your sense of it.
|
|
104
|
+
- "I'm being thorough" is **not** a justification. Thoroughness on the requested goal is required; thoroughness extending past the goal is drift.
|
|
109
105
|
|
|
110
|
-
When
|
|
106
|
+
**When in doubt, ask — outside hands-free pipelines.** In interactive sessions a short clarification ("the requested fix touches the X code path; I notice Y also looks broken — should I fix it in this change or surface it as a follow-up?") is always cheaper than a wrong-scope diff. Asking is not a weakness; silently expanding scope is. **Inside hands-free pipelines** (`/devlyn:resolve`, scheduled remote agents, autonomous skill runs) the contract forbids mid-pipeline prompts — there asking is unsafe because there is no user to answer. The substitute is: stay strictly on the requested goal, do not expand scope, and log the question/assumption explicitly in the final report (or `.devlyn/runs/<run_id>/` artifacts) so the user can adjudicate after the run completes. Choosing scope creep over logging-and-staying-on-path is always wrong.
|
|
111
107
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
3. If findings exist: `/devlyn:team-resolve "Fix issues in .devlyn/EVAL-FINDINGS.md"` → Fix loop
|
|
115
|
-
4. `/simplify` → Quick cleanup pass
|
|
116
|
-
5. `/devlyn:team-review` → Multi-perspective team review (for important PRs)
|
|
117
|
-
6. `/devlyn:clean` → Codebase hygiene
|
|
118
|
-
7. `/devlyn:update-docs` → Keep docs in sync
|
|
108
|
+
**Stopping rule.** A task is done when the user's stated goal is closed AND no off-path work was added. If you find yourself hesitating because "I should also do Z" — Z is drift. Note it for follow-up, do not execute.
|
|
109
|
+
<!-- runtime-principles:section=goal-locked:end -->
|
|
119
110
|
|
|
120
|
-
|
|
111
|
+
## Error Handling Philosophy
|
|
121
112
|
|
|
122
|
-
|
|
113
|
+
**No silent fallbacks.** Handle errors explicitly and show the user what happened.
|
|
123
114
|
|
|
124
|
-
|
|
115
|
+
- **Default**: when something fails, display a clear error state — message, retry option, or actionable guidance. Do NOT silently fall back to default/placeholder data.
|
|
116
|
+
- **Fallbacks are the exception.** Only use them when it's a widely accepted best practice (CSS fallback fonts, CDN failover, image placeholders). Otherwise handle the error explicitly.
|
|
117
|
+
- **Pattern**: `try { doThing() } catch (error) { showErrorUI(error) }` — NOT `try { doThing() } catch { return fallbackValue }`.
|
|
125
118
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
3. `/devlyn:review` → Thorough solo review with security-first checklist
|
|
129
|
-
4. `/devlyn:team-review` → Multi-perspective team review (for important PRs)
|
|
130
|
-
5. `/devlyn:clean` → Periodic codebase-wide hygiene
|
|
131
|
-
6. `/devlyn:update-docs` → Keep docs in sync
|
|
119
|
+
### No-workaround discipline (runtime salience)
|
|
120
|
+
<!-- runtime-principles:section=no-workaround:begin -->
|
|
132
121
|
|
|
133
|
-
|
|
122
|
+
No `any`, no `@ts-ignore`, no silent `catch`, no hardcoded values, no helper scripts that bypass the root cause. Fix root causes; handle errors with user-visible state per the rule above.
|
|
134
123
|
|
|
135
|
-
|
|
124
|
+
**Permitted exceptions** (explicitly carved out):
|
|
125
|
+
- CSS fallback fonts, CDN failover, image placeholders — widely-accepted best practices.
|
|
126
|
+
- Codex CLI availability downgrade — the one documented silent fallback in this repo. Fires when the resolved engine is `auto` or `codex` (either via skill default or explicit `--engine` flag) and the Codex CLI is absent. Banner `engine downgraded: codex-unavailable` always prints; verdict identical to `--engine claude`. Any other silent fallback in skills code is a bug — file it against the skill that introduced it.
|
|
127
|
+
<!-- runtime-principles:section=no-workaround:end -->
|
|
136
128
|
|
|
137
|
-
|
|
138
|
-
-
|
|
139
|
-
- Preserves all forward-looking content: roadmaps, future plans, visions, open questions
|
|
140
|
-
- If no docs exist, proposes a tailored docs structure and generates initial content
|
|
129
|
+
### Evidence over claim
|
|
130
|
+
<!-- runtime-principles:section=evidence:begin -->
|
|
141
131
|
|
|
142
|
-
|
|
132
|
+
Every finding cites concrete evidence. Vague claims are speculation; exclude them.
|
|
143
133
|
|
|
144
|
-
- **
|
|
145
|
-
- **
|
|
146
|
-
- **
|
|
147
|
-
- **
|
|
134
|
+
- **Code findings**: `file:line` you have opened.
|
|
135
|
+
- **Missing findings**: explicit "searched X and found no implementation" statement.
|
|
136
|
+
- **Doc findings**: quote of the stale text + section/line reference.
|
|
137
|
+
- **Browser findings**: screenshot reference + URL/route.
|
|
148
138
|
|
|
149
|
-
|
|
139
|
+
A finding without one of these forms is excluded. Vague findings produce vague fixes.
|
|
140
|
+
<!-- runtime-principles:section=evidence:end -->
|
|
150
141
|
|
|
151
|
-
|
|
152
|
-
- **Complex bugs**: Use `/devlyn:team-resolve` for multi-perspective investigation with a full agent team
|
|
153
|
-
- **Hands-free**: Use `/devlyn:auto-resolve` for fully automated resolve → evaluate → fix → polish pipeline
|
|
154
|
-
- **Post-fix review**: Use `/devlyn:team-review` for thorough multi-reviewer validation
|
|
142
|
+
## Codex invocation
|
|
155
143
|
|
|
156
|
-
|
|
144
|
+
When `/devlyn:resolve` or `/devlyn:ideate` route a phase to Codex (`--engine codex` or `--engine auto`), the wrapper-form contract lives in `config/skills/_shared/codex-config.md` (or `.claude/skills/_shared/codex-config.md` once installed). Omit `-m <model>` — the CLI's current flagship is used automatically. MCP is not in the loop. If the Codex CLI is absent the harness silently downgrades to Claude and prints `engine downgraded: codex-unavailable` in the final report.
|
|
157
145
|
|
|
158
|
-
|
|
159
|
-
- **Focused cleanup**: Use `/devlyn:clean [category]` for targeted sweeps (dead code, deps, tests, complexity, hygiene)
|
|
160
|
-
- **Periodic maintenance sequence**: `/devlyn:clean` → `/simplify` → `/devlyn:update-docs` → `/devlyn:review`
|
|
146
|
+
## Working Mode
|
|
161
147
|
|
|
162
|
-
|
|
148
|
+
- **Checkpoint with TaskCreate / TaskUpdate.** Long investigations or multi-phase work: create tasks at start, mark completed as each one closes — don't batch.
|
|
149
|
+
- **Don't stop early on token-budget concerns.** Context auto-compacts; the model resumes after compaction. Run the work to a real stopping point.
|
|
150
|
+
- **Persist across context windows via disk.** `/devlyn:resolve` writes `.devlyn/pipeline.state.json` plus per-phase log/findings under `.devlyn/runs/<run_id>/`; for ad-hoc long work use `HANDOFF.md` and resume with `@HANDOFF.md continue`.
|
|
151
|
+
- **Parallelize independent tool calls; reserve `Agent` subagents for independent fan-out or isolated-context verification** — a single perspective is the default on the resolve hot path.
|
|
163
152
|
|
|
164
|
-
|
|
153
|
+
## Skill Boundary Policy
|
|
165
154
|
|
|
166
|
-
|
|
167
|
-
- All `auto-resolve` and `preflight` runs already write durable state to `.devlyn/*.md` (done-criteria, BUILD-GATE, EVAL-FINDINGS, BROWSER-RESULTS, CHALLENGE-FINDINGS, PREFLIGHT-REPORT) and to git commits — pick up by reading those files plus `git log`.
|
|
168
|
-
- For long investigations, write progress notes to a `HANDOFF.md` and resume with `@HANDOFF.md continue from where this left off` if you need a fresh window.
|
|
155
|
+
Post iter-0034 Phase 4 cutover (2026-05-04) the runtime product surface is two skills — `/devlyn:resolve` and `/devlyn:ideate`. `/devlyn:resolve` runs PLAN → IMPLEMENT → BUILD_GATE → CLEANUP → VERIFY inline; verification, cleanup, and security review (delegated to the native `security-review` Claude Code skill from BUILD_GATE) all live inside the pipeline. There are no standalone `/devlyn:review`, `/devlyn:evaluate`, `/devlyn:team-resolve`, etc. surfaces to delegate to — those skills were folded into resolve's phases or removed in iter-0034. Three creative power-user skills (`/devlyn:reap`, `/devlyn:design-system`, `/devlyn:team-design-ui`) live in `optional-skills/` and are user-invoked only; resolve never delegates to them.
|
|
169
156
|
|
|
170
|
-
|
|
157
|
+
Browser validation routes through `_shared/browser-runner.sh` (Chrome MCP → Playwright → curl tier) directly from BUILD_GATE — there is no separate `/devlyn:browser-validate` skill at HEAD.
|
|
171
158
|
|
|
172
159
|
## Communication Style
|
|
173
160
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
161
|
+
Lead with **objective data** (popularity, benchmarks, community adoption) before opinions — especially when the user asks "what's popular" or "what do others use."
|
|
162
|
+
|
|
163
|
+
## Commit Conventions
|
|
164
|
+
|
|
165
|
+
Follow `.claude/commit-conventions.md`.
|
|
166
|
+
|
|
167
|
+
## Design System
|
|
168
|
+
|
|
169
|
+
When doing UI/UX work, follow `docs/design-system.md` if it exists.
|