Feature
- A person opens a Linear issue with acceptance criteria, or describes the feature and lets the
featureskill create one issue after the plan is agreed. - The developer points the agent at the issue. The agent prints the route banner, including the skills commit and the generator commit, and waits for a yes before editing files.
- The agent runs
odlc status --check(whenscripts/odlc.pyis present) and readsservice.yamlto load the active capabilities and rules. If the feature needs a new cloud resource, bucket, database, queue, cron schedule, secret, or plain environment variable (a domain, email list, port, or flag), the agent followschange-appin the same chat and opens that pull request before product code. Product code waits until the developer says that pull request has merged. The user does not have to name the skill or the script. - Depth is
express(one file: test and code, no OpenSpec),standard(OpenSpec, the default), ormigration(a local plan already decided the shape). The agent branches frommainasfeat/<ticket>-<short-slug>. - On
standardandmigration, the agent writes an OpenSpec on that branch, syncs it to Linear, then implements only those tasks. Onexpress, it writes the test and the code. - The agent writes
.sdlc/intent.yamlafter the plan is approved so a new chat resumes at the next step. It runs.githooks/pre-commitandmake ci, then opens one pull request intomain. The body has the Linear link, the OpenSpec path when there is one, the commands it ran, and the risk box. It then prints the ship card:git push origin <branch>:staging, do not mergemainintostaging, and production is a pull request frommainintoproduction. It does not pushstagingunless the developer asks. - CI and, when the app has Terraform, the plan run. Dobby comments. The developer reviews the spec and the code together.
- The developer squash-merges. The message is
feat: <ticket> <short summary>.maindoes not deploy. - To try the change in staging, the developer pushes that branch directly to
staging. That deploys staging. There is no pull request, andmainis not merged intostaging. - The developer opens a pull request from
mainintoproductionand merges it. That is the only deploy that comes frommain. - The developer moves the Linear issue to Done.
Product code and changes to infra/, workflows, config/jobs.yaml schedules, or service.yaml are separate pull requests.