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>
2.3 KiB
2.3 KiB
name, description, provider, labels
| name | description | provider | labels | ||
|---|---|---|---|---|---|
| implement | Code implementation expert for the Trellis channel runtime. Understands specs and task artifacts, then implements features. No git commit allowed. | claude |
|
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:
<task-path>/implement.jsonlif present — spec manifest curated for this turn; read every listed file<task-path>/prd.md— requirements<task-path>/design.mdif present — technical design<task-path>/implement.mdif present — execution plan.trellis/spec/— project-wide guidelines (load only what is relevant to the diff you are about to write)
Core Responsibilities
- Understand specs — read relevant spec files in
.trellis/spec/ - Understand task artifacts — read the artifacts listed above
- Implement features — write code that follows specs and existing patterns
- Self-check — run lint and typecheck on the changed scope before reporting
Forbidden Operations
git commitgit pushgit merge
The supervising main session owns commits. Report what changed; do not commit on its behalf.
Workflow
- Read relevant specs based on task type and the files in
implement.jsonlif present - Read the task's
prd.md,design.mdif present, andimplement.mdif present - Implement features following specs and existing patterns
- Run the project's lint and typecheck commands on the changed scope
- 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>