You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Church/Basketball business milestone was accepted in #289 on 2026-09-15. This platform track is resumed.
Execution lane:phase: platform-later. Status: active for discovery and local artifact work; waiting for a target and authorization before deployment.
Completed
PR #338 merged the reproducible production-image validation package. PR #339 merged the guarded provider-neutral staging acceptance runner. Exact PR #339 head 965fede3d99871679ab4a65430edc079d343cc48 passed make test-all (2,019 passed, 21 documented skips, all 73 Playwright), local HTTPS artifact validation and source/image security validation with no findings. The runner refuses non-HTTPS targets, release-SHA mismatches, missing approval references and remote use without explicit opt-in; the provider-disabled image digest and rollback commands are recorded in the issue receipts.
Remaining
The owner must name a disposable staging platform/project, region and hostname and explicitly authorize deployment. Then deploy the exact candidate with paid providers disabled, record source SHA/image digest/toolchain, run the guarded migration/HTTPS/playbook/browser acceptance, prove rollback, and update #284. Do not invent a target, install or authenticate a hosting CLI, create cloud resources, or deploy before that authorization.
All validation and code review remain local. GitHub Actions does not run tests, and Ollama is not a code-review provider. This issue stays open until the deployed staging evidence satisfies its unchecked acceptance criteria.
Current Implementation Handoff
Prepared 2026-09-13 for a lower-cost builder at source 21a4a804aa57580451edded04736b1f51aef7e48. No CI checks. All implementation validation and code review run locally.
Use the shared builder contract and this issue's work packages; no xhigh model or automatic model upgrade is required. This is a detailed recommendation, not a claim that a smaller model cannot make mistakes or that tests have passed.
Risk/review focus: High: release artifact and operational rollout. Start condition: ACTIVE FOR DISCOVERY; BLOCKED FOR DEPLOYMENT. Continue local evidence work, but deploy only after the owner names the staging target and explicitly authorizes deployment.
Dockerfile runs a root Poetry install after copying source but not README.md, which pyproject declares as readme. Entrypoint migrates on every start and CMD fixes four workers; do not treat source-copy assertions as proof a clean image starts.
This handoff supersedes stale implementation statements in the background below. Preserve existing successful behavior and tests. Recheck the current branch before editing; the baseline is a source pointer, not permission to discard newer changes.
Shared source/ORM/migration changes are serialized per the master roadmap. Do not start concurrent edits to the same ownership area.
Recommended Decisions
Build one immutable runtime artifact from the locked source; include package metadata, templates/static assets and migrations. Keep nonroot runtime and separate build tools from runtime.
Recommend an explicit one-shot migration operation before starting application replicas; replicas must not race to migrate or repair schema with create_all. Validate upgrades before changing the boot contract.
Each item is one reviewable slice, not permission for one giant PR. Add the failing regression first; finish code, tests and affected docs for that slice together. Leave this issue open until all packages and original acceptance criteria are satisfied or explicitly revised by the owner.
265.1: Add failing packaging/entrypoint tests, repair the smallest metadata/install issue and run a fresh local container build.
265.2: Separate migration execution from app startup and test upgrade failure, process signals and readiness in a disposable stack.
265.3: Exercise the built image with production settings and PostgreSQL: login, static assets, basic roster, publish, export and worker/broker connectivity.
These are specifications for tests to add/retain, not claimed execution results. Each new negative case must assert unchanged unauthorized state and zero forbidden side effects.
T265-01: Clean build without repository bind mount -> imports api/web, renders real assets and exposes intended app entry points.
T265-02: Migration failure -> application never becomes ready; starting two replicas cannot run competing migrations.
T265-03: Nonroot container stops gracefully on SIGTERM; no secret file appears in image layers or build output.
T265-04: Private datastore ports are not publicly published; authenticated Redis health works; image identity matches the tested digest.
Local Commands and Evidence
Existing targeted commands (paths checked against the audit source; run only after the stated safe preflight):
poetry run pytest tests/unit/test_docker_packaging.py tests/unit/test_secret_key_guard.py tests/api/test_readiness.py -q
Also run the shared formatting/lint/touched-type/unit/full-suite and local review protocol from #252 for the final pushed revision. Add new targeted tests to these commands when implemented. Run API and browser tiers in separate processes. Native, PostgreSQL, image, provider and operator drills require their explicit environment; an unavailable tool/target is blocked/not run, never a pass.
Schema and Compatibility
Use #260's migration history unchanged unless an explicit upgrade defect is fixed. Application rollback must remain compatible with the migrated schema; downgrade is not an automatic rollback strategy.
Stop Conditions
No Docker daemon -> runtime slice blocked, not passed. No staging target/region/operator approval -> stop before deployment. Never delete shared volumes to obtain a clean build.
After two failed focused repair attempts without new diagnostic evidence, stop the affected package and post the exact failure, commands, suspected boundary and needed decision. Do not silently broaden scope, weaken tests or upgrade models. A fresh local reviewer checks: Inspect actual image contents and runtime process/DB behavior, not only Dockerfile text; compare tested and deployed digests.
Completion Receipt
Work-package and regression IDs above map to changed files and actual results.
Commands, versions, dates, pass/fail/skip/not-run counts, logs/screenshots and tested head/base SHAs are linked.
A separate local review records findings and resolution; self-review is labeled if used and is not misrepresented as independent review.
Affected docs/README/playbooks/screenshots and dependency/roadmap status are reconciled, not left as unnamed follow-ups.
If implementation is authorized through PR/merge, GitHub reports mergeable and the shared local-evidence requirements are met; reviewer agents never merge.
No hosted CI check, status attestation, Ollama reviewer, live provider action, deployment, real-data purge or store submission was introduced by implication.
Copyable Builder Prompt
First read this issue's Current Priority Decision and #289. Run only its NOW slice.
If this issue is deferred, report that state instead of starting the older package list.
Implement the next ready work package in tomqwu/SignUpFlow issue #265.
Read its Current Implementation Handoff and #252 Builder Handoff Contract first.
Inspect current source and preserve newer/unrelated changes. Start with the
package's failing regression, then complete code, local tests, local review and
affected docs/assets together. Do not skip acceptance or invent passing evidence.
No CI checks or Ollama code review. Do not deploy, activate providers, purge real
data or submit to stores. Stop and report unmet prerequisites or policy decisions.
Record the package/test IDs and exact reviewed/tested source SHAs before claiming done.
Earlier Audit and Acceptance Context
Current policy (2026-09-13)
No CI checks. Everything is validated locally. This includes code review,
formatting, lint, type checks, migrations, all test tiers, security scans,
artifact checks and mobile validation. Do not add hosted jobs, required CI
statuses, synthetic success checks or an Ollama reviewer. GitHub is for source,
PRs, issues and publication, not validation.
Record commands, environment, results, limitations and reviewed head/base SHAs.
Builders merge only with completed local evidence and GitHub mergeability;
reviewer agents never merge. Real staging/provider/device acceptance remains
required where applicable, driven by authorized local operator tools.
Historical evidence and older comments do not override this policy.
Priority: P1, blocks core production pilot. Phase: C. Suggested owner: Platform/release. Original estimate (superseded; re-estimate remaining work): 4-6 engineering days.
Historical audit evidence (recheck against current source)
Dockerfile:40 installs the root Poetry project without copying the README declared by pyproject.toml:6; only api is listed as a package although api.main imports web. These packaging risks were not verified with a clean Docker build in this audit. docker-compose.yml publishes PostgreSQL/Redis ports, requires a Redis password but probes it without authentication, omits ENVIRONMENT, and starts no active worker service. docker-entrypoint.sh migrates on every container start. GitHub shows only a github-pages environment, not a verified backend staging deployment.
Source baseline: GitHub main 214e3f3f17a582d5f9b2063be6872ea2b1d25714, audited 2026-09-09. Infrastructure/provider claims marked unverified require actual staging evidence.
Implementation plan
Resolve the owner's hosting region/provider, budget, external hostname and rollback operator, then document one supported topology with managed or private PostgreSQL/Redis and TLS termination.
Build from a clean checkout using a pinned compatible Python/Poetry toolchain. Correct project/README/web template/static packaging and smoke-test imports/assets from the actual image, not the source tree.
Fix authenticated Redis readiness with a genuine successful PING check; keep database/broker ports private and wire the canonical production environment and broker settings.
Run migrations in a controlled once-per-deploy step, provision secrets through the hosting system, and restrict the running app's DB privileges.
Run artifact builds and smoke validation locally, retaining immutable image tags/digests. Promote the same tested image into staging and later production; record source SHA and migration revision.
Exercise rolling restart, graceful shutdown, failed migration and rollback to a known previous image without destructive automatic database downgrade.
Acceptance criteria
A fresh clone produces an image that boots against fresh PostgreSQL, serves API/web/templates/static assets and exposes correct probes.
Missing secrets/invalid configuration prevent readiness; no data-store ports are publicly exposed.
Staging serves HTTPS with production cookie/security settings and no test bypass flags.
The deployment records an immutable image digest, source SHA and migration version, and a tested rollback path.
Local artifact checks have retained results for the exact source SHA and image digest.
Clean Docker build and container smoke, staging login/invite/solve/publish journeys, migration failure drill and rolling restart. Store deployment logs/results without secrets.
Whole-repository audit scope (2026-09-13)
Baseline: 21a4a804aa57580451edded04736b1f51aef7e48. This addendum assigns full-scope follow-through; it is not a new test pass or production sign-off. No CI checks; all review and validation runs locally.
Review both Dockerfiles, both Compose files, .dockerignore, docker-entrypoint.sh, pyproject/lock and packaging metadata as one artifact contract. Verify README/root package metadata and web/templates/static assets are actually present in a clean build; source-existence tests alone are insufficient. Validate effective production env, private datastore exposure, Redis authentication/health checks, worker topology, migrations-on-boot/concurrent starts and immutable artifact rollback. #283 handles stale binary/demo tooling; #284 documents only proven commands. Record build source/digest and authorized staging evidence; do not deploy from this issue plan alone.
Keep evidence and disposition synchronized with master roadmap #252 and documentation ledger #277. Close only after the remaining acceptance criteria have linked local results; a planning/audit note is not completion.
Current Priority Decision
The Church/Basketball business milestone was accepted in #289 on 2026-09-15. This platform track is resumed.
Execution lane:
phase: platform-later. Status: active for discovery and local artifact work; waiting for a target and authorization before deployment.Completed
PR #338 merged the reproducible production-image validation package. PR #339 merged the guarded provider-neutral staging acceptance runner. Exact PR #339 head
965fede3d99871679ab4a65430edc079d343cc48passedmake test-all(2,019 passed, 21 documented skips, all 73 Playwright), local HTTPS artifact validation and source/image security validation with no findings. The runner refuses non-HTTPS targets, release-SHA mismatches, missing approval references and remote use without explicit opt-in; the provider-disabled image digest and rollback commands are recorded in the issue receipts.Remaining
The owner must name a disposable staging platform/project, region and hostname and explicitly authorize deployment. Then deploy the exact candidate with paid providers disabled, record source SHA/image digest/toolchain, run the guarded migration/HTTPS/playbook/browser acceptance, prove rollback, and update #284. Do not invent a target, install or authenticate a hosting CLI, create cloud resources, or deploy before that authorization.
All validation and code review remain local. GitHub Actions does not run tests, and Ollama is not a code-review provider. This issue stays open until the deployed staging evidence satisfies its unchecked acceptance criteria.
Current Implementation Handoff
Prepared 2026-09-13 for a lower-cost builder at source
21a4a804aa57580451edded04736b1f51aef7e48.No CI checks. All implementation validation and code review run locally.
Use the shared builder contract and this issue's work packages; no
xhighmodel or automatic model upgrade is required. This is a detailed recommendation, not a claim that a smaller model cannot make mistakes or that tests have passed.Risk/review focus: High: release artifact and operational rollout.
Start condition: ACTIVE FOR DISCOVERY; BLOCKED FOR DEPLOYMENT. Continue local evidence work, but deploy only after the owner names the staging target and explicitly authorizes deployment.
Source of Truth and Current State
DockerfileDockerfile.dev.dockerignoredocker-compose.ymldocker-compose.dev.ymldocker-entrypoint.shpyproject.tomlpoetry.lockapi/main.pytests/unit/test_docker_packaging.pyDockerfile runs a root Poetry install after copying source but not README.md, which pyproject declares as readme. Entrypoint migrates on every start and CMD fixes four workers; do not treat source-copy assertions as proof a clean image starts.
This handoff supersedes stale implementation statements in the background below. Preserve existing successful behavior and tests. Recheck the current branch before editing; the baseline is a source pointer, not permission to discard newer changes.
Dependencies and Ownership
Recommended Decisions
Small Work Packages
Each item is one reviewable slice, not permission for one giant PR. Add the failing regression first; finish code, tests and affected docs for that slice together. Leave this issue open until all packages and original acceptance criteria are satisfied or explicitly revised by the owner.
Required Regression Cases
These are specifications for tests to add/retain, not claimed execution results. Each new negative case must assert unchanged unauthorized state and zero forbidden side effects.
Local Commands and Evidence
Existing targeted commands (paths checked against the audit source; run only after the stated safe preflight):
Also run the shared formatting/lint/touched-type/unit/full-suite and local review protocol from #252 for the final pushed revision. Add new targeted tests to these commands when implemented. Run API and browser tiers in separate processes. Native, PostgreSQL, image, provider and operator drills require their explicit environment; an unavailable tool/target is blocked/not run, never a pass.
Schema and Compatibility
Use #260's migration history unchanged unless an explicit upgrade defect is fixed. Application rollback must remain compatible with the migrated schema; downgrade is not an automatic rollback strategy.
Stop Conditions
No Docker daemon -> runtime slice blocked, not passed. No staging target/region/operator approval -> stop before deployment. Never delete shared volumes to obtain a clean build.
After two failed focused repair attempts without new diagnostic evidence, stop the affected package and post the exact failure, commands, suspected boundary and needed decision. Do not silently broaden scope, weaken tests or upgrade models. A fresh local reviewer checks: Inspect actual image contents and runtime process/DB behavior, not only Dockerfile text; compare tested and deployed digests.
Completion Receipt
Copyable Builder Prompt
Earlier Audit and Acceptance Context
Current policy (2026-09-13)
No CI checks. Everything is validated locally. This includes code review,
formatting, lint, type checks, migrations, all test tiers, security scans,
artifact checks and mobile validation. Do not add hosted jobs, required CI
statuses, synthetic success checks or an Ollama reviewer. GitHub is for source,
PRs, issues and publication, not validation.
Record commands, environment, results, limitations and reviewed head/base SHAs.
Builders merge only with completed local evidence and GitHub mergeability;
reviewer agents never merge. Real staging/provider/device acceptance remains
required where applicable, driven by authorized local operator tools.
Historical evidence and older comments do not override this policy.
Parent roadmap: #252
Priority: P1, blocks core production pilot. Phase: C. Suggested owner: Platform/release. Original estimate (superseded; re-estimate remaining work): 4-6 engineering days.
Historical audit evidence (recheck against current source)
Dockerfile:40 installs the root Poetry project without copying the README declared by pyproject.toml:6; only api is listed as a package although api.main imports web. These packaging risks were not verified with a clean Docker build in this audit. docker-compose.yml publishes PostgreSQL/Redis ports, requires a Redis password but probes it without authentication, omits ENVIRONMENT, and starts no active worker service. docker-entrypoint.sh migrates on every container start. GitHub shows only a github-pages environment, not a verified backend staging deployment.
Source baseline: GitHub main
214e3f3f17a582d5f9b2063be6872ea2b1d25714, audited 2026-09-09. Infrastructure/provider claims marked unverified require actual staging evidence.Implementation plan
Acceptance criteria
Dependencies
#258, #260, #259
Validation
Clean Docker build and container smoke, staging login/invite/solve/publish journeys, migration failure drill and rolling restart. Store deployment logs/results without secrets.
Whole-repository audit scope (2026-09-13)
Baseline:
21a4a804aa57580451edded04736b1f51aef7e48. This addendum assigns full-scope follow-through; it is not a new test pass or production sign-off. No CI checks; all review and validation runs locally.Review both Dockerfiles, both Compose files, .dockerignore, docker-entrypoint.sh, pyproject/lock and packaging metadata as one artifact contract. Verify README/root package metadata and web/templates/static assets are actually present in a clean build; source-existence tests alone are insufficient. Validate effective production env, private datastore exposure, Redis authentication/health checks, worker topology, migrations-on-boot/concurrent starts and immutable artifact rollback. #283 handles stale binary/demo tooling; #284 documents only proven commands. Record build source/digest and authorized staging evidence; do not deploy from this issue plan alone.
Keep evidence and disposition synchronized with master roadmap #252 and documentation ledger #277. Close only after the remaining acceptance criteria have linked local results; a planning/audit note is not completion.