@mindfoldhq/trellis 0.3.10 → 0.4.0-beta.10
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/README.md +19 -5
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +240 -43
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +206 -47
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/codebuddy.d.ts +11 -0
- package/dist/configurators/codebuddy.d.ts.map +1 -0
- package/dist/configurators/codebuddy.js +58 -0
- package/dist/configurators/codebuddy.js.map +1 -0
- package/dist/configurators/codex.d.ts +7 -4
- package/dist/configurators/codex.d.ts.map +1 -1
- package/dist/configurators/codex.js +40 -10
- package/dist/configurators/codex.js.map +1 -1
- package/dist/configurators/copilot.d.ts +9 -0
- package/dist/configurators/copilot.d.ts.map +1 -0
- package/dist/configurators/copilot.js +34 -0
- package/dist/configurators/copilot.js.map +1 -0
- package/dist/configurators/index.d.ts +11 -1
- package/dist/configurators/index.d.ts.map +1 -1
- package/dist/configurators/index.js +72 -4
- package/dist/configurators/index.js.map +1 -1
- package/dist/configurators/opencode.d.ts +1 -1
- package/dist/configurators/opencode.js +1 -1
- package/dist/configurators/windsurf.d.ts +8 -0
- package/dist/configurators/windsurf.d.ts.map +1 -0
- package/dist/configurators/windsurf.js +18 -0
- package/dist/configurators/windsurf.js.map +1 -0
- package/dist/configurators/workflow.d.ts +6 -2
- package/dist/configurators/workflow.d.ts.map +1 -1
- package/dist/configurators/workflow.js +90 -58
- package/dist/configurators/workflow.js.map +1 -1
- package/dist/migrations/index.d.ts +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +2 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/manifests/0.4.0-beta.1.json +228 -0
- package/dist/migrations/manifests/0.4.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.5.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.6.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.7.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.8.json +34 -0
- package/dist/migrations/manifests/0.4.0-beta.9.json +9 -0
- package/dist/templates/claude/agents/dispatch.md +1 -2
- package/dist/templates/claude/agents/implement.md +2 -3
- package/dist/templates/claude/commands/trellis/before-dev.md +29 -0
- package/dist/templates/claude/commands/trellis/check.md +25 -0
- package/dist/templates/claude/commands/trellis/create-command.md +2 -2
- package/dist/templates/claude/commands/trellis/onboard.md +13 -13
- package/dist/templates/claude/commands/trellis/parallel.md +1 -2
- package/dist/templates/claude/commands/trellis/record-session.md +3 -2
- package/dist/templates/claude/commands/trellis/start.md +8 -4
- package/dist/templates/claude/hooks/inject-subagent-context.py +29 -14
- package/dist/templates/claude/hooks/ralph-loop.py +18 -10
- package/dist/templates/claude/hooks/session-start.py +201 -9
- package/dist/templates/claude/hooks/statusline.py +211 -0
- package/dist/templates/claude/settings.json +4 -0
- package/dist/templates/codebuddy/commands/trellis/before-dev.md +29 -0
- package/dist/templates/codebuddy/commands/trellis/brainstorm.md +487 -0
- package/dist/templates/codebuddy/commands/trellis/break-loop.md +107 -0
- package/dist/templates/codebuddy/commands/trellis/check-cross-layer.md +153 -0
- package/dist/templates/codebuddy/commands/trellis/check.md +25 -0
- package/dist/templates/codebuddy/commands/trellis/create-command.md +154 -0
- package/dist/templates/codebuddy/commands/trellis/finish-work.md +143 -0
- package/dist/templates/codebuddy/commands/trellis/integrate-skill.md +219 -0
- package/dist/templates/codebuddy/commands/trellis/onboard.md +358 -0
- package/dist/templates/codebuddy/commands/trellis/record-session.md +61 -0
- package/dist/templates/codebuddy/commands/trellis/start.md +373 -0
- package/dist/templates/codebuddy/commands/trellis/update-spec.md +354 -0
- package/dist/templates/codebuddy/index.d.ts +25 -0
- package/dist/templates/codebuddy/index.d.ts.map +1 -0
- package/dist/templates/codebuddy/index.js +45 -0
- package/dist/templates/codebuddy/index.js.map +1 -0
- package/dist/templates/codex/agents/check.toml +23 -0
- package/dist/templates/codex/agents/implement.toml +19 -0
- package/dist/templates/codex/agents/research.toml +26 -0
- package/dist/templates/codex/codex-skills/parallel/SKILL.md +194 -0
- package/dist/templates/codex/config.toml +5 -0
- package/dist/templates/codex/hooks/session-start.py +228 -0
- package/dist/templates/codex/hooks.json +16 -0
- package/dist/templates/codex/index.d.ts +27 -5
- package/dist/templates/codex/index.d.ts.map +1 -1
- package/dist/templates/codex/index.js +60 -8
- package/dist/templates/codex/index.js.map +1 -1
- package/dist/templates/codex/skills/before-dev/SKILL.md +34 -0
- package/dist/templates/codex/skills/brainstorm/SKILL.md +1 -1
- package/dist/templates/codex/skills/break-loop/SKILL.md +1 -1
- package/dist/templates/codex/skills/check/SKILL.md +30 -0
- package/dist/templates/codex/skills/check-cross-layer/SKILL.md +1 -1
- package/dist/templates/codex/skills/create-command/SKILL.md +3 -3
- package/dist/templates/codex/skills/finish-work/SKILL.md +1 -1
- package/dist/templates/codex/skills/improve-ut/SKILL.md +69 -0
- package/dist/templates/codex/skills/integrate-skill/SKILL.md +1 -1
- package/dist/templates/codex/skills/onboard/SKILL.md +12 -12
- package/dist/templates/codex/skills/record-session/SKILL.md +4 -3
- package/dist/templates/codex/skills/start/SKILL.md +9 -4
- package/dist/templates/codex/skills/update-spec/SKILL.md +1 -1
- package/dist/templates/copilot/hooks/session-start.py +218 -0
- package/dist/templates/copilot/hooks.json +11 -0
- package/dist/templates/copilot/index.d.ts +23 -0
- package/dist/templates/copilot/index.d.ts.map +1 -0
- package/dist/templates/copilot/index.js +54 -0
- package/dist/templates/copilot/index.js.map +1 -0
- package/dist/templates/copilot/prompts/before-dev.prompt.md +33 -0
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +491 -0
- package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
- package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +157 -0
- package/dist/templates/copilot/prompts/check.prompt.md +29 -0
- package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
- package/dist/templates/copilot/prompts/finish-work.prompt.md +157 -0
- package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
- package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
- package/dist/templates/copilot/prompts/parallel.prompt.md +196 -0
- package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
- package/dist/templates/copilot/prompts/start.prompt.md +397 -0
- package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
- package/dist/templates/cursor/commands/trellis-before-dev.md +29 -0
- package/dist/templates/cursor/commands/trellis-check.md +25 -0
- package/dist/templates/cursor/commands/trellis-create-command.md +2 -2
- package/dist/templates/cursor/commands/trellis-onboard.md +13 -13
- package/dist/templates/cursor/commands/trellis-record-session.md +3 -2
- package/dist/templates/cursor/commands/trellis-start.md +7 -16
- package/dist/templates/extract.d.ts +36 -0
- package/dist/templates/extract.d.ts.map +1 -1
- package/dist/templates/extract.js +64 -0
- package/dist/templates/extract.js.map +1 -1
- package/dist/templates/gemini/commands/trellis/before-dev.toml +33 -0
- package/dist/templates/gemini/commands/trellis/check.toml +29 -0
- package/dist/templates/gemini/commands/trellis/create-command.toml +2 -2
- package/dist/templates/gemini/commands/trellis/onboard.toml +2 -2
- package/dist/templates/gemini/commands/trellis/record-session.toml +3 -2
- package/dist/templates/gemini/commands/trellis/start.toml +9 -4
- package/dist/templates/iflow/agents/dispatch.md +1 -2
- package/dist/templates/iflow/agents/implement.md +2 -3
- package/dist/templates/iflow/commands/trellis/before-dev.md +29 -0
- package/dist/templates/iflow/commands/trellis/check.md +25 -0
- package/dist/templates/iflow/commands/trellis/create-command.md +2 -2
- package/dist/templates/iflow/commands/trellis/onboard.md +13 -13
- package/dist/templates/iflow/commands/trellis/parallel.md +1 -2
- package/dist/templates/iflow/commands/trellis/record-session.md +3 -2
- package/dist/templates/iflow/commands/trellis/start.md +8 -4
- package/dist/templates/iflow/hooks/inject-subagent-context.py +29 -14
- package/dist/templates/iflow/hooks/ralph-loop.py +8 -1
- package/dist/templates/iflow/hooks/session-start.py +187 -8
- package/dist/templates/kilo/workflows/before-dev.md +29 -0
- package/dist/templates/kilo/workflows/check.md +25 -0
- package/dist/templates/kilo/workflows/create-command.md +2 -2
- package/dist/templates/kilo/workflows/onboard.md +13 -13
- package/dist/templates/kilo/workflows/parallel.md +1 -2
- package/dist/templates/kilo/workflows/record-session.md +3 -2
- package/dist/templates/kilo/workflows/start.md +8 -3
- package/dist/templates/kiro/skills/before-dev/SKILL.md +34 -0
- package/dist/templates/kiro/skills/brainstorm/SKILL.md +1 -1
- package/dist/templates/kiro/skills/break-loop/SKILL.md +1 -1
- package/dist/templates/kiro/skills/check/SKILL.md +30 -0
- package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +1 -1
- package/dist/templates/kiro/skills/create-command/SKILL.md +3 -3
- package/dist/templates/kiro/skills/finish-work/SKILL.md +1 -1
- package/dist/templates/kiro/skills/integrate-skill/SKILL.md +1 -1
- package/dist/templates/kiro/skills/onboard/SKILL.md +12 -12
- package/dist/templates/kiro/skills/record-session/SKILL.md +4 -3
- package/dist/templates/kiro/skills/start/SKILL.md +9 -4
- package/dist/templates/kiro/skills/update-spec/SKILL.md +1 -1
- package/dist/templates/markdown/agents.md +4 -0
- package/dist/templates/markdown/spec/backend/directory-structure.md +1 -1
- package/dist/templates/markdown/spec/backend/script-conventions.md +93 -0
- package/dist/templates/markdown/workspace-index.md +2 -0
- package/dist/templates/opencode/agents/dispatch.md +21 -21
- package/dist/templates/opencode/agents/implement.md +2 -2
- package/dist/templates/opencode/agents/research.md +1 -2
- package/dist/templates/opencode/commands/trellis/before-dev.md +29 -0
- package/dist/templates/opencode/commands/trellis/check.md +25 -0
- package/dist/templates/opencode/commands/trellis/create-command.md +2 -2
- package/dist/templates/opencode/commands/trellis/onboard.md +13 -13
- package/dist/templates/opencode/commands/trellis/parallel.md +1 -2
- package/dist/templates/opencode/commands/trellis/record-session.md +3 -2
- package/dist/templates/opencode/commands/trellis/start.md +8 -3
- package/dist/templates/opencode/lib/trellis-context.js +42 -2
- package/dist/templates/opencode/{plugin → plugins}/inject-subagent-context.js +45 -18
- package/dist/templates/opencode/{plugin → plugins}/session-start.js +156 -28
- package/dist/templates/qoder/skills/before-dev/SKILL.md +34 -0
- package/dist/templates/qoder/skills/brainstorm/SKILL.md +1 -1
- package/dist/templates/qoder/skills/break-loop/SKILL.md +1 -1
- package/dist/templates/qoder/skills/check/SKILL.md +30 -0
- package/dist/templates/qoder/skills/check-cross-layer/SKILL.md +1 -1
- package/dist/templates/qoder/skills/create-command/SKILL.md +3 -3
- package/dist/templates/qoder/skills/finish-work/SKILL.md +1 -1
- package/dist/templates/qoder/skills/integrate-skill/SKILL.md +1 -1
- package/dist/templates/qoder/skills/onboard/SKILL.md +14 -14
- package/dist/templates/qoder/skills/record-session/SKILL.md +4 -3
- package/dist/templates/qoder/skills/start/SKILL.md +9 -4
- package/dist/templates/qoder/skills/update-spec/SKILL.md +1 -1
- package/dist/templates/trellis/config.yaml +20 -0
- package/dist/templates/trellis/index.d.ts +11 -0
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +22 -0
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/add_session.py +111 -13
- package/dist/templates/trellis/scripts/common/__init__.py +2 -0
- package/dist/templates/trellis/scripts/common/cli_adapter.py +164 -64
- package/dist/templates/trellis/scripts/common/config.py +192 -0
- package/dist/templates/trellis/scripts/common/developer.py +2 -2
- package/dist/templates/trellis/scripts/common/git.py +31 -0
- package/dist/templates/trellis/scripts/common/git_context.py +23 -586
- package/dist/templates/trellis/scripts/common/io.py +37 -0
- package/dist/templates/trellis/scripts/common/log.py +45 -0
- package/dist/templates/trellis/scripts/common/packages_context.py +238 -0
- package/dist/templates/trellis/scripts/common/paths.py +103 -6
- package/dist/templates/trellis/scripts/common/phase.py +50 -49
- package/dist/templates/trellis/scripts/common/registry.py +41 -72
- package/dist/templates/trellis/scripts/common/session_context.py +562 -0
- package/dist/templates/trellis/scripts/common/task_context.py +410 -0
- package/dist/templates/trellis/scripts/common/task_queue.py +27 -98
- package/dist/templates/trellis/scripts/common/task_store.py +536 -0
- package/dist/templates/trellis/scripts/common/task_utils.py +106 -10
- package/dist/templates/trellis/scripts/common/tasks.py +109 -0
- package/dist/templates/trellis/scripts/common/types.py +112 -0
- package/dist/templates/trellis/scripts/create_bootstrap.py +32 -27
- package/dist/templates/trellis/scripts/hooks/linear_sync.py +243 -0
- package/dist/templates/trellis/scripts/multi_agent/_bootstrap.py +17 -0
- package/dist/templates/trellis/scripts/multi_agent/cleanup.py +43 -48
- package/dist/templates/trellis/scripts/multi_agent/create_pr.py +336 -45
- package/dist/templates/trellis/scripts/multi_agent/plan.py +9 -32
- package/dist/templates/trellis/scripts/multi_agent/start.py +142 -68
- package/dist/templates/trellis/scripts/multi_agent/status.py +12 -753
- package/dist/templates/trellis/scripts/multi_agent/status_display.py +542 -0
- package/dist/templates/trellis/scripts/multi_agent/status_monitor.py +225 -0
- package/dist/templates/trellis/scripts/task.py +51 -976
- package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +1 -1
- package/dist/templates/trellis/workflow.md +38 -38
- package/dist/templates/windsurf/index.d.ts +21 -0
- package/dist/templates/windsurf/index.d.ts.map +1 -0
- package/dist/templates/windsurf/index.js +44 -0
- package/dist/templates/windsurf/index.js.map +1 -0
- package/dist/templates/windsurf/workflows/trellis-before-dev.md +31 -0
- package/dist/templates/windsurf/workflows/trellis-brainstorm.md +491 -0
- package/dist/templates/windsurf/workflows/trellis-break-loop.md +111 -0
- package/dist/templates/windsurf/workflows/trellis-check-cross-layer.md +157 -0
- package/dist/templates/windsurf/workflows/trellis-check.md +27 -0
- package/dist/templates/windsurf/workflows/trellis-create-command.md +154 -0
- package/dist/templates/windsurf/workflows/trellis-finish-work.md +147 -0
- package/dist/templates/windsurf/workflows/trellis-integrate-skill.md +220 -0
- package/dist/templates/windsurf/workflows/trellis-onboard.md +362 -0
- package/dist/templates/windsurf/workflows/trellis-record-session.md +66 -0
- package/dist/templates/windsurf/workflows/trellis-start.md +373 -0
- package/dist/templates/windsurf/workflows/trellis-update-spec.md +358 -0
- package/dist/types/ai-tools.d.ts +15 -3
- package/dist/types/ai-tools.d.ts.map +1 -1
- package/dist/types/ai-tools.js +42 -2
- package/dist/types/ai-tools.js.map +1 -1
- package/dist/types/migration.d.ts +3 -1
- package/dist/types/migration.d.ts.map +1 -1
- package/dist/utils/project-detector.d.ts +28 -0
- package/dist/utils/project-detector.d.ts.map +1 -1
- package/dist/utils/project-detector.js +371 -0
- package/dist/utils/project-detector.js.map +1 -1
- package/dist/utils/template-fetcher.d.ts +19 -6
- package/dist/utils/template-fetcher.d.ts.map +1 -1
- package/dist/utils/template-fetcher.js +99 -17
- package/dist/utils/template-fetcher.js.map +1 -1
- package/package.json +1 -1
- package/dist/templates/claude/commands/trellis/before-backend-dev.md +0 -13
- package/dist/templates/claude/commands/trellis/before-frontend-dev.md +0 -13
- package/dist/templates/claude/commands/trellis/check-backend.md +0 -13
- package/dist/templates/claude/commands/trellis/check-frontend.md +0 -13
- package/dist/templates/codex/skills/before-backend-dev/SKILL.md +0 -18
- package/dist/templates/codex/skills/before-frontend-dev/SKILL.md +0 -18
- package/dist/templates/codex/skills/check-backend/SKILL.md +0 -18
- package/dist/templates/codex/skills/check-frontend/SKILL.md +0 -18
- package/dist/templates/cursor/commands/trellis-before-backend-dev.md +0 -13
- package/dist/templates/cursor/commands/trellis-before-frontend-dev.md +0 -13
- package/dist/templates/cursor/commands/trellis-check-backend.md +0 -13
- package/dist/templates/cursor/commands/trellis-check-frontend.md +0 -13
- package/dist/templates/gemini/commands/trellis/before-backend-dev.toml +0 -17
- package/dist/templates/gemini/commands/trellis/before-frontend-dev.toml +0 -17
- package/dist/templates/gemini/commands/trellis/check-backend.toml +0 -17
- package/dist/templates/gemini/commands/trellis/check-frontend.toml +0 -17
- package/dist/templates/iflow/commands/trellis/before-backend-dev.md +0 -13
- package/dist/templates/iflow/commands/trellis/before-frontend-dev.md +0 -13
- package/dist/templates/iflow/commands/trellis/check-backend.md +0 -13
- package/dist/templates/iflow/commands/trellis/check-frontend.md +0 -13
- package/dist/templates/kilo/workflows/before-backend-dev.md +0 -13
- package/dist/templates/kilo/workflows/before-frontend-dev.md +0 -13
- package/dist/templates/kilo/workflows/check-backend.md +0 -13
- package/dist/templates/kilo/workflows/check-frontend.md +0 -13
- package/dist/templates/kiro/skills/before-backend-dev/SKILL.md +0 -18
- package/dist/templates/kiro/skills/before-frontend-dev/SKILL.md +0 -18
- package/dist/templates/kiro/skills/check-backend/SKILL.md +0 -18
- package/dist/templates/kiro/skills/check-frontend/SKILL.md +0 -18
- package/dist/templates/opencode/commands/trellis/before-backend-dev.md +0 -13
- package/dist/templates/opencode/commands/trellis/before-frontend-dev.md +0 -13
- package/dist/templates/opencode/commands/trellis/check-backend.md +0 -13
- package/dist/templates/opencode/commands/trellis/check-frontend.md +0 -13
- package/dist/templates/qoder/skills/before-backend-dev/SKILL.md +0 -18
- package/dist/templates/qoder/skills/before-frontend-dev/SKILL.md +0 -18
- package/dist/templates/qoder/skills/check-backend/SKILL.md +0 -18
- package/dist/templates/qoder/skills/check-frontend/SKILL.md +0 -18
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: onboard
|
|
3
|
-
description: "
|
|
3
|
+
description: "Interactive three-part onboarding for new team members to the Trellis AI-assisted workflow system. Covers core philosophy (AI memory, project-specific knowledge, context drift), system structure and command deep-dives, real-world workflow examples, and guideline customization. Use when a new developer joins the project, someone needs to understand the Trellis workflow, or project guidelines need initial setup."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
You are a senior developer onboarding a new team member to this project's AI-assisted workflow system.
|
|
@@ -131,13 +131,13 @@ AI needs the same onboarding - but compressed into seconds at session start.
|
|
|
131
131
|
|
|
132
132
|
---
|
|
133
133
|
|
|
134
|
-
### $before-
|
|
134
|
+
### $before-dev - Inject Specialized Knowledge
|
|
135
135
|
|
|
136
136
|
**WHY IT EXISTS**:
|
|
137
137
|
AI models have "pre-trained knowledge" - general patterns from millions of codebases. But YOUR project has specific conventions that differ from generic patterns.
|
|
138
138
|
|
|
139
139
|
**WHAT IT ACTUALLY DOES**:
|
|
140
|
-
1.
|
|
140
|
+
1. Discovers spec layers via `get_context.py --mode packages` and reads relevant guidelines
|
|
141
141
|
2. Loads project-specific patterns into AI's working context:
|
|
142
142
|
- Component naming conventions
|
|
143
143
|
- State management patterns
|
|
@@ -145,12 +145,12 @@ AI models have "pre-trained knowledge" - general patterns from millions of codeb
|
|
|
145
145
|
- Error handling standards
|
|
146
146
|
|
|
147
147
|
**WHY THIS MATTERS**:
|
|
148
|
-
- Without before
|
|
149
|
-
- With before
|
|
148
|
+
- Without before-dev: AI writes generic code that doesn't match project style.
|
|
149
|
+
- With before-dev: AI writes code that looks like the rest of the codebase.
|
|
150
150
|
|
|
151
151
|
---
|
|
152
152
|
|
|
153
|
-
### $check
|
|
153
|
+
### $check - Combat Context Drift
|
|
154
154
|
|
|
155
155
|
**WHY IT EXISTS**:
|
|
156
156
|
AI context window has limited capacity. As conversation progresses, guidelines injected at session start become less influential. This causes "context drift."
|
|
@@ -216,9 +216,9 @@ All the context AI built during this session will be lost when session ends. The
|
|
|
216
216
|
|
|
217
217
|
**[1/8] $start** - AI needs project context before touching code
|
|
218
218
|
**[2/8] python3 ./.trellis/scripts/task.py create "Fix bug" --slug fix-bug** - Track work for future reference
|
|
219
|
-
**[3/8] $before-
|
|
219
|
+
**[3/8] $before-dev** - Inject project-specific development guidelines
|
|
220
220
|
**[4/8] Investigate and fix the bug** - Actual development work
|
|
221
|
-
**[5/8] $check
|
|
221
|
+
**[5/8] $check** - Re-verify code against guidelines
|
|
222
222
|
**[6/8] $finish-work** - Holistic cross-layer review
|
|
223
223
|
**[7/8] Human tests and commits** - Human validates before code enters repo
|
|
224
224
|
**[8/8] $record-session** - Persist memory for future sessions
|
|
@@ -233,9 +233,9 @@ All the context AI built during this session will be lost when session ends. The
|
|
|
233
233
|
### Example 3: Code Review Fixes
|
|
234
234
|
|
|
235
235
|
**[1/6] $start** - Resume context from previous session
|
|
236
|
-
**[2/6] $before-
|
|
236
|
+
**[2/6] $before-dev** - Re-inject guidelines before fixes
|
|
237
237
|
**[3/6] Fix each CR issue** - Address feedback with guidelines in context
|
|
238
|
-
**[4/6] $check
|
|
238
|
+
**[4/6] $check** - Verify fixes did not introduce new issues
|
|
239
239
|
**[5/6] $finish-work** - Document lessons from CR
|
|
240
240
|
**[6/6] Human commits, then $record-session** - Preserve CR lessons
|
|
241
241
|
|
|
@@ -250,9 +250,9 @@ All the context AI built during this session will be lost when session ends. The
|
|
|
250
250
|
### Example 5: Debug Session
|
|
251
251
|
|
|
252
252
|
**[1/6] $start** - See if this bug was investigated before
|
|
253
|
-
**[2/6] $before-
|
|
253
|
+
**[2/6] $before-dev** - Guidelines might document known gotchas
|
|
254
254
|
**[3/6] Investigation** - Actual debugging work
|
|
255
|
-
**[4/6] $check
|
|
255
|
+
**[4/6] $check** - Verify debug changes do not break other things
|
|
256
256
|
**[5/6] $finish-work** - Debug findings might need documentation
|
|
257
257
|
**[6/6] Human commits, then $record-session** - Debug knowledge is valuable
|
|
258
258
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: record-session
|
|
3
|
-
description: "
|
|
3
|
+
description: "Records completed work progress to .trellis/workspace/ journal files after human testing and commit. Captures session summaries, commit hashes, and updates developer index files for future session context. Use when a coding session is complete, after the human has committed code, or to persist session knowledge for future AI sessions."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
[!] **Prerequisite**: This skill should only be used AFTER the human has tested and committed the code.
|
|
@@ -36,7 +36,7 @@ python3 ./.trellis/scripts/add_session.py \
|
|
|
36
36
|
--summary "Brief summary of what was done"
|
|
37
37
|
|
|
38
38
|
# Method 2: Pass detailed content via stdin
|
|
39
|
-
cat << 'EOF' | python3 ./.trellis/scripts/add_session.py --title "Title" --commit "hash"
|
|
39
|
+
cat << 'EOF' | python3 ./.trellis/scripts/add_session.py --stdin --title "Title" --commit "hash"
|
|
40
40
|
| Feature | Description |
|
|
41
41
|
|---------|-------------|
|
|
42
42
|
| New API | Added user authentication endpoint |
|
|
@@ -51,6 +51,7 @@ EOF
|
|
|
51
51
|
**Auto-completes**:
|
|
52
52
|
- [OK] Appends session to journal-N.md
|
|
53
53
|
- [OK] Auto-detects line count, creates new file if >2000 lines
|
|
54
|
+
- [OK] Auto-detects Branch context (`--branch` override; otherwise Branch = task.json -> current git branch; missing values are omitted gracefully)
|
|
54
55
|
- [OK] Updates index.md (Total Sessions +1, Last Active, line stats, history)
|
|
55
56
|
- [OK] Auto-commits .trellis/workspace and .trellis/tasks changes
|
|
56
57
|
|
|
@@ -61,6 +62,6 @@ EOF
|
|
|
61
62
|
| Command | Purpose |
|
|
62
63
|
|---------|---------|
|
|
63
64
|
| `python3 ./.trellis/scripts/get_context.py --mode record` | Get context for record-session |
|
|
64
|
-
| `python3 ./.trellis/scripts/add_session.py --title "..." --commit "..."` | **One-click add session (recommended)** |
|
|
65
|
+
| `python3 ./.trellis/scripts/add_session.py --title "..." --commit "..."` | **One-click add session (recommended, branch auto-complete)** |
|
|
65
66
|
| `python3 ./.trellis/scripts/task.py archive <name>` | Archive completed task (auto-commits) |
|
|
66
67
|
| `python3 ./.trellis/scripts/task.py list` | List active tasks |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: start
|
|
3
|
-
description: "
|
|
3
|
+
description: "Initializes an AI development session by reading workflow guides, developer identity, git status, active tasks, and project guidelines from .trellis/. Classifies incoming tasks and routes to brainstorm, direct edit, or task workflow. Use when beginning a new coding session, resuming work, starting a new task, or re-establishing project context."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Start Session
|
|
@@ -45,9 +45,14 @@ This shows: developer identity, git status, current task (if any), active tasks.
|
|
|
45
45
|
### Step 3: Read Guidelines Index
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
python3 ./.trellis/scripts/get_context.py --mode packages
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
This shows available packages and their spec layers. Read the relevant spec indexes:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
cat .trellis/spec/<package>/<layer>/index.md # Package-specific guidelines
|
|
55
|
+
cat .trellis/spec/guides/index.md # Thinking guides (always read)
|
|
51
56
|
```
|
|
52
57
|
|
|
53
58
|
> **Important**: The index files are navigation — they list the actual guideline files (e.g., `error-handling.md`, `conventions.md`, `mock-strategies.md`).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: update-spec
|
|
3
|
-
description: "
|
|
3
|
+
description: "Captures executable contracts and coding knowledge into .trellis/spec/ documents after implementation, debugging, or design decisions. Enforces code-spec depth for infra and cross-layer changes with mandatory sections for signatures, contracts, validation matrices, and test points. Use when a feature is implemented, a bug is fixed, a design decision is made, a new pattern is discovered, or cross-layer contracts change."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Update Code-Spec - Capture Executable Contracts
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Copilot Session Start Hook - Inject Trellis context into VS Code Copilot sessions.
|
|
5
|
+
|
|
6
|
+
Output format follows Copilot hook protocol:
|
|
7
|
+
stdout JSON → { hookSpecificOutput: { hookEventName: "SessionStart", additionalContext: "..." } }
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
import os
|
|
14
|
+
import subprocess
|
|
15
|
+
import sys
|
|
16
|
+
import warnings
|
|
17
|
+
from io import StringIO
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
warnings.filterwarnings("ignore")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def should_skip_injection() -> bool:
|
|
24
|
+
return os.environ.get("COPILOT_NON_INTERACTIVE") == "1"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def read_file(path: Path, fallback: str = "") -> str:
|
|
28
|
+
try:
|
|
29
|
+
return path.read_text(encoding="utf-8")
|
|
30
|
+
except (FileNotFoundError, PermissionError):
|
|
31
|
+
return fallback
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def run_script(script_path: Path) -> str:
|
|
35
|
+
try:
|
|
36
|
+
env = os.environ.copy()
|
|
37
|
+
env["PYTHONIOENCODING"] = "utf-8"
|
|
38
|
+
cmd = [sys.executable, "-W", "ignore", str(script_path)]
|
|
39
|
+
result = subprocess.run(
|
|
40
|
+
cmd,
|
|
41
|
+
capture_output=True,
|
|
42
|
+
text=True,
|
|
43
|
+
encoding="utf-8",
|
|
44
|
+
errors="replace",
|
|
45
|
+
timeout=5,
|
|
46
|
+
cwd=str(script_path.parent.parent.parent),
|
|
47
|
+
env=env,
|
|
48
|
+
)
|
|
49
|
+
return result.stdout if result.returncode == 0 else "No context available"
|
|
50
|
+
except (subprocess.TimeoutExpired, FileNotFoundError, PermissionError):
|
|
51
|
+
return "No context available"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _normalize_task_ref(task_ref: str) -> str:
|
|
55
|
+
normalized = task_ref.strip()
|
|
56
|
+
if not normalized:
|
|
57
|
+
return ""
|
|
58
|
+
|
|
59
|
+
path_obj = Path(normalized)
|
|
60
|
+
if path_obj.is_absolute():
|
|
61
|
+
return str(path_obj)
|
|
62
|
+
|
|
63
|
+
normalized = normalized.replace("\\", "/")
|
|
64
|
+
while normalized.startswith("./"):
|
|
65
|
+
normalized = normalized[2:]
|
|
66
|
+
|
|
67
|
+
if normalized.startswith("tasks/"):
|
|
68
|
+
return f".trellis/{normalized}"
|
|
69
|
+
|
|
70
|
+
return normalized
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _resolve_task_dir(trellis_dir: Path, task_ref: str) -> Path:
|
|
74
|
+
normalized = _normalize_task_ref(task_ref)
|
|
75
|
+
path_obj = Path(normalized)
|
|
76
|
+
if path_obj.is_absolute():
|
|
77
|
+
return path_obj
|
|
78
|
+
if normalized.startswith(".trellis/"):
|
|
79
|
+
return trellis_dir.parent / path_obj
|
|
80
|
+
return trellis_dir / "tasks" / path_obj
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _get_task_status(trellis_dir: Path) -> str:
|
|
84
|
+
current_task_file = trellis_dir / ".current-task"
|
|
85
|
+
if not current_task_file.is_file():
|
|
86
|
+
return "Status: NO ACTIVE TASK\nNext: Describe what you want to work on"
|
|
87
|
+
|
|
88
|
+
task_ref = _normalize_task_ref(current_task_file.read_text(encoding="utf-8").strip())
|
|
89
|
+
if not task_ref:
|
|
90
|
+
return "Status: NO ACTIVE TASK\nNext: Describe what you want to work on"
|
|
91
|
+
|
|
92
|
+
task_dir = _resolve_task_dir(trellis_dir, task_ref)
|
|
93
|
+
if not task_dir.is_dir():
|
|
94
|
+
return f"Status: STALE POINTER\nTask: {task_ref}\nNext: Task directory not found. Run: python3 ./.trellis/scripts/task.py finish"
|
|
95
|
+
|
|
96
|
+
task_json_path = task_dir / "task.json"
|
|
97
|
+
task_data: dict = {}
|
|
98
|
+
if task_json_path.is_file():
|
|
99
|
+
try:
|
|
100
|
+
task_data = json.loads(task_json_path.read_text(encoding="utf-8"))
|
|
101
|
+
except (json.JSONDecodeError, PermissionError):
|
|
102
|
+
pass
|
|
103
|
+
|
|
104
|
+
task_title = task_data.get("title", task_ref)
|
|
105
|
+
task_status = task_data.get("status", "unknown")
|
|
106
|
+
|
|
107
|
+
if task_status == "completed":
|
|
108
|
+
return f"Status: COMPLETED\nTask: {task_title}\nNext: Archive with `python3 ./.trellis/scripts/task.py archive {task_dir.name}` or start a new task"
|
|
109
|
+
|
|
110
|
+
has_context = False
|
|
111
|
+
for jsonl_name in ("implement.jsonl", "check.jsonl", "spec.jsonl"):
|
|
112
|
+
jsonl_path = task_dir / jsonl_name
|
|
113
|
+
if jsonl_path.is_file() and jsonl_path.stat().st_size > 0:
|
|
114
|
+
has_context = True
|
|
115
|
+
break
|
|
116
|
+
|
|
117
|
+
has_prd = (task_dir / "prd.md").is_file()
|
|
118
|
+
|
|
119
|
+
if not has_prd:
|
|
120
|
+
return f"Status: NOT READY\nTask: {task_title}\nMissing: prd.md not created\nNext: Write PRD, then research → init-context → start"
|
|
121
|
+
|
|
122
|
+
if not has_context:
|
|
123
|
+
return f"Status: NOT READY\nTask: {task_title}\nMissing: Context not configured (no jsonl files)\nNext: Complete Phase 2 (research → init-context → start) before implementing"
|
|
124
|
+
|
|
125
|
+
return f"Status: READY\nTask: {task_title}\nNext: Continue with implement or check"
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def main() -> None:
|
|
129
|
+
if should_skip_injection():
|
|
130
|
+
sys.exit(0)
|
|
131
|
+
|
|
132
|
+
# Read hook input from stdin
|
|
133
|
+
try:
|
|
134
|
+
hook_input = json.loads(sys.stdin.read())
|
|
135
|
+
project_dir = Path(hook_input.get("cwd", ".")).resolve()
|
|
136
|
+
except (json.JSONDecodeError, KeyError):
|
|
137
|
+
project_dir = Path(".").resolve()
|
|
138
|
+
|
|
139
|
+
trellis_dir = project_dir / ".trellis"
|
|
140
|
+
|
|
141
|
+
output = StringIO()
|
|
142
|
+
|
|
143
|
+
output.write("""<session-context>
|
|
144
|
+
You are starting a new session in a Trellis-managed project.
|
|
145
|
+
Read and follow all instructions below carefully.
|
|
146
|
+
</session-context>
|
|
147
|
+
|
|
148
|
+
""")
|
|
149
|
+
|
|
150
|
+
output.write("<current-state>\n")
|
|
151
|
+
context_script = trellis_dir / "scripts" / "get_context.py"
|
|
152
|
+
output.write(run_script(context_script))
|
|
153
|
+
output.write("\n</current-state>\n\n")
|
|
154
|
+
|
|
155
|
+
output.write("<workflow>\n")
|
|
156
|
+
workflow_content = read_file(trellis_dir / "workflow.md", "No workflow.md found")
|
|
157
|
+
output.write(workflow_content)
|
|
158
|
+
output.write("\n</workflow>\n\n")
|
|
159
|
+
|
|
160
|
+
output.write("<guidelines>\n")
|
|
161
|
+
output.write("**Note**: The guidelines below are index files — they list available guideline documents and their locations.\n")
|
|
162
|
+
output.write("During actual development, you MUST read the specific guideline files listed in each index's Pre-Development Checklist.\n\n")
|
|
163
|
+
|
|
164
|
+
spec_dir = trellis_dir / "spec"
|
|
165
|
+
if spec_dir.is_dir():
|
|
166
|
+
for sub in sorted(spec_dir.iterdir()):
|
|
167
|
+
if not sub.is_dir() or sub.name.startswith("."):
|
|
168
|
+
continue
|
|
169
|
+
|
|
170
|
+
if sub.name == "guides":
|
|
171
|
+
index_file = sub / "index.md"
|
|
172
|
+
if index_file.is_file():
|
|
173
|
+
output.write(f"## {sub.name}\n")
|
|
174
|
+
output.write(read_file(index_file))
|
|
175
|
+
output.write("\n\n")
|
|
176
|
+
continue
|
|
177
|
+
|
|
178
|
+
index_file = sub / "index.md"
|
|
179
|
+
if index_file.is_file():
|
|
180
|
+
output.write(f"## {sub.name}\n")
|
|
181
|
+
output.write(read_file(index_file))
|
|
182
|
+
output.write("\n\n")
|
|
183
|
+
else:
|
|
184
|
+
for nested in sorted(sub.iterdir()):
|
|
185
|
+
if not nested.is_dir():
|
|
186
|
+
continue
|
|
187
|
+
nested_index = nested / "index.md"
|
|
188
|
+
if nested_index.is_file():
|
|
189
|
+
output.write(f"## {sub.name}/{nested.name}\n")
|
|
190
|
+
output.write(read_file(nested_index))
|
|
191
|
+
output.write("\n\n")
|
|
192
|
+
|
|
193
|
+
output.write("</guidelines>\n\n")
|
|
194
|
+
|
|
195
|
+
task_status = _get_task_status(trellis_dir)
|
|
196
|
+
output.write(f"<task-status>\n{task_status}\n</task-status>\n\n")
|
|
197
|
+
|
|
198
|
+
output.write("""<ready>
|
|
199
|
+
Context loaded. Steps 1-3 (workflow, context, guidelines) are already injected above — do NOT re-read them.
|
|
200
|
+
Start from Step 4. Wait for user's first message, then follow the workflow to handle their request.
|
|
201
|
+
If there is an active task, ask whether to continue it.
|
|
202
|
+
</ready>""")
|
|
203
|
+
|
|
204
|
+
context = output.getvalue()
|
|
205
|
+
result = {
|
|
206
|
+
"suppressOutput": True,
|
|
207
|
+
"systemMessage": f"Trellis context injected ({len(context)} chars)",
|
|
208
|
+
"hookSpecificOutput": {
|
|
209
|
+
"hookEventName": "SessionStart",
|
|
210
|
+
"additionalContext": context,
|
|
211
|
+
},
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
print(json.dumps(result, ensure_ascii=False), flush=True)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
if __name__ == "__main__":
|
|
218
|
+
main()
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copilot templates
|
|
3
|
+
*
|
|
4
|
+
* These are GENERIC templates for user projects.
|
|
5
|
+
*
|
|
6
|
+
* Directory structure:
|
|
7
|
+
* copilot/
|
|
8
|
+
* ├── prompts/ # Slash-command prompts → .github/prompts/*.prompt.md
|
|
9
|
+
* ├── hooks/ # Hook scripts → .github/copilot/hooks/
|
|
10
|
+
* └── hooks.json # Hooks config → .github/hooks/trellis.json
|
|
11
|
+
*/
|
|
12
|
+
export interface HookTemplate {
|
|
13
|
+
name: string;
|
|
14
|
+
content: string;
|
|
15
|
+
}
|
|
16
|
+
export interface PromptTemplate {
|
|
17
|
+
name: string;
|
|
18
|
+
content: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function getAllHooks(): HookTemplate[];
|
|
21
|
+
export declare function getHooksConfig(): string;
|
|
22
|
+
export declare function getAllPrompts(): PromptTemplate[];
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/copilot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAW5C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,aAAa,IAAI,cAAc,EAAE,CAchD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copilot templates
|
|
3
|
+
*
|
|
4
|
+
* These are GENERIC templates for user projects.
|
|
5
|
+
*
|
|
6
|
+
* Directory structure:
|
|
7
|
+
* copilot/
|
|
8
|
+
* ├── prompts/ # Slash-command prompts → .github/prompts/*.prompt.md
|
|
9
|
+
* ├── hooks/ # Hook scripts → .github/copilot/hooks/
|
|
10
|
+
* └── hooks.json # Hooks config → .github/hooks/trellis.json
|
|
11
|
+
*/
|
|
12
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
13
|
+
import { dirname, join } from "node:path";
|
|
14
|
+
import { fileURLToPath } from "node:url";
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = dirname(__filename);
|
|
17
|
+
function readTemplate(relativePath) {
|
|
18
|
+
return readFileSync(join(__dirname, relativePath), "utf-8");
|
|
19
|
+
}
|
|
20
|
+
function listFiles(dir) {
|
|
21
|
+
try {
|
|
22
|
+
return readdirSync(join(__dirname, dir)).sort();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function getAllHooks() {
|
|
29
|
+
const hooks = [];
|
|
30
|
+
for (const file of listFiles("hooks")) {
|
|
31
|
+
if (!file.endsWith(".py")) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
hooks.push({ name: file, content: readTemplate(`hooks/${file}`) });
|
|
35
|
+
}
|
|
36
|
+
return hooks;
|
|
37
|
+
}
|
|
38
|
+
export function getHooksConfig() {
|
|
39
|
+
return readTemplate("hooks.json");
|
|
40
|
+
}
|
|
41
|
+
export function getAllPrompts() {
|
|
42
|
+
const prompts = [];
|
|
43
|
+
for (const file of listFiles("prompts")) {
|
|
44
|
+
if (!file.endsWith(".prompt.md")) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
prompts.push({
|
|
48
|
+
name: file.slice(0, -".prompt.md".length),
|
|
49
|
+
content: readTemplate(`prompts/${file}`),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return prompts;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/copilot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAYD,MAAM,UAAU,WAAW;IACzB,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;YACzC,OAAO,EAAE,YAAY,CAAC,WAAW,IAAI,EAAE,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Trellis Copilot prompt: before-dev.prompt"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Read the relevant development guidelines before starting your task.
|
|
6
|
+
|
|
7
|
+
Execute these steps:
|
|
8
|
+
|
|
9
|
+
1. **Discover packages and their spec layers**:
|
|
10
|
+
```bash
|
|
11
|
+
python3 ./.trellis/scripts/get_context.py --mode packages
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
2. **Identify which specs apply** to your task based on:
|
|
15
|
+
- Which package you're modifying (e.g., `cli/`, `docs-site/`)
|
|
16
|
+
- What type of work (backend, frontend, unit-test, docs, etc.)
|
|
17
|
+
|
|
18
|
+
3. **Read the spec index** for each relevant module:
|
|
19
|
+
```bash
|
|
20
|
+
cat .trellis/spec/<package>/<layer>/index.md
|
|
21
|
+
```
|
|
22
|
+
Follow the **"Pre-Development Checklist"** section in the index.
|
|
23
|
+
|
|
24
|
+
4. **Read the specific guideline files** listed in the Pre-Development Checklist that are relevant to your task. The index is NOT the goal �?it points you to the actual guideline files (e.g., `error-handling.md`, `conventions.md`, `mock-strategies.md`). Read those files to understand the coding standards and patterns.
|
|
25
|
+
|
|
26
|
+
5. **Always read shared guides**:
|
|
27
|
+
```bash
|
|
28
|
+
cat .trellis/spec/guides/index.md
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
6. Understand the coding standards and patterns you need to follow, then proceed with your development plan.
|
|
32
|
+
|
|
33
|
+
This step is **mandatory** before writing any code.
|