Parent: self-drive master umbrella (fkst-packages#139), pillar C wave-1. Site umbrella: #2.
Motivation (production evidence)
After waves 1 and 2 of the official site merged, a human verified the deployment by curl-probing the live pages (/, /zh/, /architecture.html, /doctrine.html). Self-acceptance means the system probes its own deployed artifact and converts a broken deploy into a defect issue — CI greenness does not prove the published site renders.
Scope (tight)
- New flat package
packages/site-probe/ (or a department inside site-board if conformance favors it — implementer's choice, justify in PR):
- cron raiser (e.g. every 30m) →
probe_scan department.
- Reads the canonical page list from one place:
site/probe-manifest (a tracked plain-text file, one URL path per line, seeded with /, /zh/, /architecture.html, /doctrine.html, /zh/architecture.html, /zh/doctrine.html).
- For each path:
curl -sL -o /dev/null -w '%{http_code}' against https://chronoaiproject.github.io/fkst-website — non-200 = failure (curl via exec_sync, mocked in tests; unmocked external commands fail closed).
- On any failure: raise
github-proxy.github_issue_create_request with a defect issue (title includes the failing paths; body includes status codes and probe time), deduped via an idempotent marker/cache key per (path set, day) so a persistent outage files ONE issue, not one per tick.
- On success: structured greppable log line only (PROBE ok paths=N).
- Dry-run posture: issue creation only when
FKST_GITHUB_WRITE=1 (existing proxy behavior); probe itself is read-only.
Must keep (DELETE NOTHING ELSE)
- No changes to
site/ pages themselves or pages.yml.
- Payload constitution: the issue body carries status codes and paths (small control data), no page content.
- Fail-closed: curl/network errors count as probe failure of that path, but a fully-failed probe sweep (all paths erroring, e.g. local network down) files NOTHING and logs a skip — do not convert babysitter-side network flakiness into site defect issues (lesson: a transient empty
git ls-remote once caused a false kill).
Acceptance
- Tests: all-200 → no issue request + ok log; one 404 → exactly one issue request with path and code, idempotent across repeated ticks; all-paths-network-error → no issue request + skip log.
scripts/run.sh test + scripts/run.sh check green.
⟦AI:FKST⟧
Parent: self-drive master umbrella (fkst-packages#139), pillar C wave-1. Site umbrella: #2.
Motivation (production evidence)
After waves 1 and 2 of the official site merged, a human verified the deployment by curl-probing the live pages (/, /zh/, /architecture.html, /doctrine.html). Self-acceptance means the system probes its own deployed artifact and converts a broken deploy into a defect issue — CI greenness does not prove the published site renders.
Scope (tight)
packages/site-probe/(or a department insidesite-boardif conformance favors it — implementer's choice, justify in PR):probe_scandepartment.site/probe-manifest(a tracked plain-text file, one URL path per line, seeded with/,/zh/,/architecture.html,/doctrine.html,/zh/architecture.html,/zh/doctrine.html).curl -sL -o /dev/null -w '%{http_code}'against https://chronoaiproject.github.io/fkst-website — non-200 = failure (curl via exec_sync, mocked in tests; unmocked external commands fail closed).github-proxy.github_issue_create_requestwith a defect issue (title includes the failing paths; body includes status codes and probe time), deduped via an idempotent marker/cache key per (path set, day) so a persistent outage files ONE issue, not one per tick.FKST_GITHUB_WRITE=1(existing proxy behavior); probe itself is read-only.Must keep (DELETE NOTHING ELSE)
site/pages themselves orpages.yml.git ls-remoteonce caused a false kill).Acceptance
scripts/run.sh test+scripts/run.sh checkgreen.⟦AI:FKST⟧