| name | showroom:push-ready |
| description | Pre-push checklist for the TARSy Showroom repo. Verifies that no local testing artifacts are staged, ui-config.yml has the production port, AsciiDoc content passes validation, scripts reference correct UUIDs and container names, and the TARSy app repo changes are present. Run before git push origin main. |
Pre-push readiness skill
Run the full pre-push checklist for the TARSy Showroom repo. Announce at the start: "I'm using showroom:push-ready to run the pre-push checklist."
Work through every check. Do not skip checks that appear trivially correct — each one catches a specific recurring error.
Critical values (must not change without updating HOW specs)
| Value | Expected |
|---|
| Session 1 UUID | 00000000-0000-0000-0000-000000000001 |
| Container name | tarsy-app |
| Validation endpoint | GET /api/v1/sessions/{uuid} (field: chat_message_count) |
| Solve endpoint | POST /api/v1/sessions/{uuid}/chat/messages |
| Production port | 8080 |
Check 1 — Production port in ui-config.yml
Read ui-config.yml. The port field under tabs must be 8080.
Pass: port: 8080 is present.
Fail: any other value (8081, 8082, etc.) means a local testing port was not reverted.
Fix: set port: 8080 in ui-config.yml.
Check 2 — No local artifacts in git status
Run git status in the showroom repo.
Flag any of the following as errors if staged or untracked and about to be added:
| Path | Problem |
|---|
www/ | Built output — must not be committed |
.cache/ | Antora cache — must not be committed |
.DS_Store | macOS metadata |
ui-config.yml with non-8080 port | Local test value |
If www/ or .cache/ are untracked, confirm .gitignore excludes them. Read .gitignore to verify.
Pass: none of the above are staged or missing from .gitignore.
Check 3 — AsciiDoc content validation
Run the following checks on every .adoc file in content/modules/ROOT/pages/:
3a — No em dashes
Search each file for literal — or —. An -- inside a backtick code span or ---- block delimiter is allowed; -- in prose or list text is not.
3b — Sentence case headings
Every == and === heading must use sentence case (only first word and proper nouns capitalized). TARSy, Kubernetes, HighErrorRate, NodePressure, DeploymentFailing, PodCrashLoop, PodCrashLoopBackOff, LLM are proper nouns and may be capitalized.
3c — Blank lines before and after lists
Every unordered (*) and ordered (.) list must have a blank line immediately before the first item and a blank line immediately after the last item (or end of block). Check that no list item follows a paragraph with no blank line separation.
3d — No hardcoded UUIDs or hostnames
No .adoc file may contain a literal UUID (e.g., 00000000-0000-0000-0000-000000000001) or a literal hostname (e.g., localhost, host1). These must use AsciiDoc attributes ({session1_uuid}, {tarsy_url}).
3e — External links use ^ caret
Any http:// or https:// link that is not inside a code block must include ^ for new-tab behavior: https://example.com[Link text^].
Report all violations found. If none, mark this check as passing.
Check 4 — Runtime automation scripts
Read these four files and verify the values listed:
runtime-automation/module-03/validation-host1.sh
SESSION_ID must equal 00000000-0000-0000-0000-000000000001
- Uses
podman exec tarsy-app wget for the GET request
- Endpoint is
http://localhost:8080/api/v1/sessions/${SESSION_ID} (no /chat/messages suffix)
- Parses
chat_message_count from the response
- Exit code 0 on success, 1 on failure (no hardcoded
exit 0)
runtime-automation/module-03/solve-host1.sh
SESSION_ID must equal 00000000-0000-0000-0000-000000000001
- Uses
podman exec tarsy-app curl for the POST request
- Endpoint is
http://localhost:8080/api/v1/sessions/${SESSION_ID}/chat/messages
- Body is
{"content":"What specific evidence pointed to a memory limit issue?"}
- No hardcoded
exit 0 at the end (curl exit code must propagate)
setup-automation/setup-host1.sh
- Installs
python3-psycopg2 via dnf
- Starts containers with
podman compose -f deploy/podman-compose.yml up -d
- Waits for
http://localhost:8080/health before seeding
- Runs
python3 "$TARSY_DIR/demo/seed.py"
Pass: all values match. Fail: report the specific mismatch.
Check 5 — TARSy app repo readiness
The showroom depends on four changes in the TARSy app repo. This check does not push the TARSy repo — it asks you to verify each change is present.
Read the following files in the TARSy app repo (../clone/tarsy/ relative to the showroom repo):
5a — X-Frame-Options removed (pkg/api/middleware.go)
Search for X-Frame-Options in pkg/api/middleware.go. It must not appear. If it does, the iframe embedding will be broken.
5b — curl in Dockerfile
Read Dockerfile. The runtime stage apk add line must include curl.
5c — oauth2-proxy restart policy (deploy/podman-compose.yml)
Read deploy/podman-compose.yml. The oauth2-proxy service must have restart: on-failure:3.
5d — seed script exists (demo/seed.py)
Check that demo/seed.py exists. It does not need to be read — presence is sufficient.
Report each item as pass/fail. If any TARSy app change is missing, the Showroom will not work after provisioning even if the showroom repo is correct.
Check 6 — Uncommitted showroom changes
Run git status in the showroom repo.
If there are staged or unstaged changes to files other than the local artifacts listed in Check 2, list them and ask:
The following files have uncommitted changes:
<list>
Commit these before pushing, or confirm they should be left out.
Wait for the user to confirm before proceeding.
Final report
Print a summary table:
Pre-push checklist results
──────────────────────────────────────────────────
Check 1 ui-config.yml port PASS / FAIL
Check 2 No local artifacts PASS / FAIL
Check 3 AsciiDoc validation PASS / FAIL (N issues)
Check 4 Runtime automation scripts PASS / FAIL
Check 5 TARSy app repo changes PASS / FAIL (N/4 present)
Check 6 Uncommitted changes PASS / CONFIRMED
──────────────────────────────────────────────────
If all pass: recommend git push origin main and note that TARSy app changes (if any) must be pushed separately to the TARSy repo.
If any fail: list required fixes. Do not offer to push until all checks pass.