Step 1 of the control-marking task, and deliberately server-only: no handle is drawn yet. This project already shipped a range handle for `profile.interval`, which compileGeometry ignores, so the control dragged and changed nothing. The consumer comes first now. Two kinds join the taxonomy — `junction-crosswalk-inset` and `junction-stop-line-offset`, both on the existing `junction-approach` anchor. The solver writes them onto the approach entry, `applyDirectJunctionPlans` carries them onto the compiled approach, and `compileControlMarkings` reads them in place of the module constants it used for every junction. They move markings without reshaping the junction, so unlike width and cutback they deliberately do not trigger a boundary recompute. `applyJunctionConstraint` becomes an explicit switch. Its trailing `else` had meant every kind that was not approach-width fell through to the cutback validator, so a new kind would have been silently validated and written as a cutback. The same non-exhaustive shape in the test fixture's `valueFor` is fixed the same way, and now throws for an unnamed kind rather than answering with a corner radius. design.md's taxonomy is updated with it — a test asserts the two cannot drift, which is what caught the omission. Measured on a 41-road workspace with 8 crossings: both constraints change their marking geometry, neither drags the other, and out-of-range blocks instead of clamping. That measurement is not in the suite: the synthetic junction resolves `junction_inset_m` to 0 because its crossing never binds to a plan, and the committed OSM fixture has no crossings at all. The tests assert the wiring the handles will depend on — values reaching the approach entry, distinct branches, blocking diagnostics — and the gap is recorded in the test itself. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
72 lines
2.3 KiB
Markdown
72 lines
2.3 KiB
Markdown
---
|
|
name: implement
|
|
description: |
|
|
Code implementation expert for the Trellis channel runtime. Understands specs and task artifacts, then implements features. No git commit allowed.
|
|
provider: claude
|
|
labels: [trellis, implement]
|
|
---
|
|
|
|
# Implement Agent (channel runtime)
|
|
|
|
You are the Implement Agent spawned by `trellis channel spawn --agent implement` inside the Trellis channel runtime. You receive an `Active task: <path>` line in your inbox; use it to locate task artifacts on disk.
|
|
|
|
## Context
|
|
|
|
Before implementing, read in this order:
|
|
|
|
1. `<task-path>/implement.jsonl` if present — spec manifest curated for this turn; read every listed file
|
|
2. `<task-path>/prd.md` — requirements
|
|
3. `<task-path>/design.md` if present — technical design
|
|
4. `<task-path>/implement.md` if present — execution plan
|
|
5. `.trellis/spec/` — project-wide guidelines (load only what is relevant to the diff you are about to write)
|
|
|
|
## Core Responsibilities
|
|
|
|
1. **Understand specs** — read relevant spec files in `.trellis/spec/`
|
|
2. **Understand task artifacts** — read the artifacts listed above
|
|
3. **Implement features** — write code that follows specs and existing patterns
|
|
4. **Self-check** — run lint and typecheck on the changed scope before reporting
|
|
|
|
## Forbidden Operations
|
|
|
|
- `git commit`
|
|
- `git push`
|
|
- `git merge`
|
|
|
|
The supervising main session owns commits. Report what changed; do not commit on its behalf.
|
|
|
|
## Workflow
|
|
|
|
1. Read relevant specs based on task type and the files in `implement.jsonl` if present
|
|
2. Read the task's `prd.md`, `design.md` if present, and `implement.md` if present
|
|
3. Implement features following specs and existing patterns
|
|
4. Run the project's lint and typecheck commands on the changed scope
|
|
5. Report files touched, key decisions, and verification results back to the channel
|
|
|
|
## Code Standards
|
|
|
|
- Follow existing code patterns
|
|
- Don't add unnecessary abstractions
|
|
- Only do what the PRD asks for; no speculative scope expansion
|
|
- Surface uncertainty back to the channel rather than guessing
|
|
|
|
## Report Format
|
|
|
|
```
|
|
## Implementation Complete
|
|
|
|
### Files Modified
|
|
- <path> — <one-line description>
|
|
|
|
### Implementation Summary
|
|
1. <step>
|
|
2. <step>
|
|
|
|
### Verification Results
|
|
- Lint: <pass|fail|skipped + reason>
|
|
- TypeCheck: <pass|fail|skipped + reason>
|
|
|
|
### Open Questions
|
|
- <if any, otherwise omit>
|
|
```
|