New app
The agent scaffolds the app in five phases (check → init-runtime → add-data → add-tests → sync-infra), proves it runs locally, and creates the GitHub repository only after the developer says yes.
- A person opens a Linear issue with the users, the outcome, the production GCP project, and who can sign in (and an optional migration or design plan in the folder).
- The developer runs the
create-appskill. The skill reads the Linear issue and any local plan, confirms archetype, name, auth, data store, andprod_project, and asks only what is still missing. The 17-point table is the receipt after phase 5, not the interview. If.sdlc/state.yamlalready exists, it resumes the next phase. - If part of the request is outside the platform catalog, the skill records it under
unmetinservice.yamlwith a recommendation and scaffolds everything else. - After the developer agrees,
create-appruns the 5 phases usingodlc(scripts/odlc.py): - Phase 1 (
check): Writes and validatesservice.yaml. - Phase 2 (
init-runtime): Scaffolds the runtime skeleton and customizes the initial routes, job entrypoints, or UI layout. - Phase 3 (
add-data): Installs the database/storage/queue/secret packages and customizes the state or schema helpers. - Phase 4 (
add-tests): Sets up the test runner, writes unit tests for the scaffolded entrypoints and invariants, and verifiesruffandpytest/npm testpass. - Phase 5 (
sync-infra): Deterministically generatesinfra/,.github/workflows/,AGENTS.md,CLAUDE.md,.cursor/rules/*.mdc,.devcontainer/, andREADME.md. - The developer runs
make setup && make dev && make test && make ci.make cibuilds the same image the deploy workflow builds, and runsterraform validatewith-backend=falsewhen Terraform is installed. That validate does not read state and does not apply. The GitHub repository waits untilmake ciexits 0. A failed image build is fixed inservice.yaml(path,docker_context,dockerfile) andsync-infraruns again. The last phase recordsgenerator_shain.sdlc/state.yaml. Later generator runs reuse that commit until someone asks to upgrade. - The developer says yes. The agent creates a private
opptra/<name>repository, pushesmain,staging, andproduction, and creates the GitHub environmentsstagingandproduction. - Connect GitHub Actions to GCP. The checklist is Bind a repository. Neither script deploys the app, and neither protects branches.
mainandproductionare covered by the organization ruleset.stagingstays open so a push can deploy. - The agent has already created the GitHub environments
stagingandproduction. A repository admin adds a required reviewer onproductionwhen the plan allows it. Then set the Actions variables the scripts print. - The developer runs
scripts/bind-staging.shwhen they can change IAM inopptra-stagingand can read the pool inopptra-sdlc-ci. They run the twogh variable setcommands that script prints. They do not need production access. - The developer sends
scripts/bind-production.shto someone who can change IAM inprod_project. That person runs it and runs the two productiongh variable setcommands it prints. They do not need access toopptra-staging. If they cannot set GitHub variables, they send those two commands back to a repository admin.