App Update
Implement one approved app update with minimal app-local changes.
This skill follows docs/ai-sdlc/03-update-pipeline.md, docs/ai-sdlc/05-quality-gates.md, and docs/ai-sdlc/06-test-report-format.md.
Supporting files in this skill:
checklist.mdprompt-fragments.mdreport-template.md
Inputs
- app name (required)
- target version (required unless already fixed by the issue or approved assessment)
- upstream references (required)
Steps
- Read repository facts from
apps/<app>/,metadata/maintenance.yaml, and the app notes when relevant. - Read
docs/w9-env-spec.mdbefore touching.envordocker-compose.yml; use it as the canonicalW9_*reference, then mirrormetadata/templates/new-app/.env.tmplfor layout. - Read the approved assessment result, if one exists.
- Read upstream release notes, upgrade notes, image tags, and requirements.
- Update only the files required for the target version and any app-local files that must change to satisfy current repository quality gates or generation rules, typically
.env,docker-compose.yml,variables.json,README.md,CHANGELOG.md, andsrc/. - Keep changes app-local unless the task explicitly requires cross-repo updates.
- Apply the version tag policy from
docs/devops-spec.md: preferx.x, usex.x.xonly when exact patch pinning is required. - If new translatable env keys are introduced, register them in
i18n/translation.json. - When
.envis touched, keep the "image environment variables" section intact and mirror the template layout inmetadata/templates/new-app/.env.tmpl: keep the section banner, the Docs URL, the "Used by docker-compose.yml" group, and the commented "Not used by default" group. Refresh the single Docs URL if the upstream changed, keep only the variables required by the current package shape plus any user-facing essentials, keep the used vars aligned withdocker-compose.yml, and keep commented unused vars at no more than 5. Follow the decision rules indocs/w9-env-spec.mdforW9_URL,W9_URL_REPLACE, login pairs,_SETports, and dependency helpers. Whenever.envis touched at all, convert every environment-variable reference in the whole file to the braced form${VAR}; do not leave bare$VARin the file even on lines that were already present. - When
docker-compose.ymlis touched, ensure every published port line carries an inline# purposecomment and that no# image:/# docs:source comments remain — image and documentation sources live only invariables.jsonupstream. Convert every environment-variable reference in the whole file to the braced form${VAR}(for example${W9_REPO},${W9_HTTP_PORT_SET}), not just the lines being changed. - When a credential or config env var only takes effect on first container startup (the image's entrypoint uses a marker file, e.g.
webconsole.security.enabled), record that fact invariables.jsonasenv.first_startup_only(a list of such env names). The README generator then auto-renders the warning; keep the "how to rotate" solution in the hand-written README Change Password section or Notes instead of in metadata. - Healthchecks should default to the main app container only. Add healthchecks to sidecar or dependency containers only when the official upstream compose explicitly defines them or the task explicitly requires them.
- If the target app has app-local drift against the current repository rules (for example template, metadata, env policy, or generated README expectations), fix the minimum blocking or directly relevant items as part of the same update.
- Keep
apps/<app>/CHANGELOG.mdas the single source of app change history. Use a pure-date heading## YYYY-MM-DDas the first-level heading for each change batch; list all changes for that date below it. Do not duplicate changelog content intoREADME.md. - Run
.venv/bin/libs app-gen-readme --app <app> --jsonafter metadata or README marker content changes so generated sections stay current. - For dependency images such as PostgreSQL, MySQL, MariaDB, Redis, or pgvector, prefer
x.xtags even when upstream examples showx.x.x, unless exact patch pinning is demonstrably required. Hard-coded dependencyx.x.xtags indocker-compose.ymlare policy drift and should be normalized before handoff. - Verify braced references: scan the touched
.envanddocker-compose.ymlfor any remaining bare$VARreference (for examplegrep -nE '\$W9_[A-Z_]+'); fix every hit to${VAR}before handoff. A file that was touched must contain no bare$VARanywhere. - Run the
deploy-validationskill for the changed app. - Produce a short test report.
Output
- files changed
- target version
- automated validation result
- risks
- owner E2E focus
Rules
- Do not start implementation for a
review-firstcandidate unless the owner has approved continuation. - Keep the smallest correct change.
- The update is not a blind version bump. The changed app must still pass the current quality gates after the work is complete.
- Do not perform broad cosmetic template re-alignment. Fix only the app-local conformance items that are blocking, directly relevant to the update, or required by current gates and generators.
- Keep
upstream.imageas the single version source. Never writeversion_from,fork_url, orrequirements.url. - Prefer official or trusted upstream images.
- Produce the report in the same language the user used unless the user asks otherwise.
- Use
report-template.mdwhen the user asks for a formal implementation report.