Adds .gitea/workflows/test-backoffice.yml (paths-filtered to
backoffice/app/** and backoffice/db/**, self-hosted homelab runner,
plain git clone matching deploy-backoffice.yml's conventions) so a
regression no longer needs a human to notice it.
The psycopg[binary]==3.2.1 pin turned out to be correct, not stale: it
only ships wheels through cp312, so it resolves cleanly under the
project's python:3.12-slim target but not under newer interpreters.
Documented in requirements.txt and docs/agents/testing.md, along with
the fact that the suite spins up its own throwaway postgres:16-alpine
container (tests/conftest.py) with no manual DB setup required.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
inputs.ref resolves fully-qualified (refs/heads/main) rather than the
declared default "main", so git clone --branch was failing with
"Remote branch refs/heads/main not found".
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
actions/checkout@v4 failed with "Cannot find: node in PATH" (the
runner intentionally has no Node toolchain). Replaced with a plain
git clone authenticated via a new DEPLOY_TOKEN Gitea Actions secret,
since the repo needs auth even for a read-only clone.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Manual (workflow_dispatch) pipeline that syncs backoffice/db and
backoffice/app to the homelab, re-applies the idempotent schema,
rebuilds/restarts smb-crm, and health-checks it — the same sequence
that was previously run by hand over SSH.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>