Commit Graph

722 Commits

Author SHA1 Message Date
be4f451d3a fix(flake): make Hetzner the canonical cc-ci host target
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-06-01 13:57:45 +00:00
7225138f30 fix(tests): keep La Suite OIDC secret inserts offline
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-01 13:57:15 +00:00
a147e0772d status(5): record lasuite-meet enrollment rollout block
Some checks failed
continuous-integration/drone Build is failing
2026-06-01 13:00:34 +00:00
f28a2a37ff fix(bridge): enroll lasuite-meet for !testme
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-01 12:46:23 +00:00
6ec13729ef status(5): record cryptpad and lasuite-meet probes
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-01 08:52:35 +00:00
162534b91f review(5): record fresh V2 n8n poll-only PASS
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-06-01 03:50:03 +00:00
973fc69679 status(5): record V5/V6 groundwork and n8n probe
Some checks failed
continuous-integration/drone/push Build is failing
2026-06-01 03:44:17 +00:00
ad2e52b705 review(5 V2): close A5-3 after cold rerun PASS
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-06-01 03:31:57 +00:00
58878280f2 status(5): record A5-3 fix and consume inbox
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-06-01 03:26:27 +00:00
143f83a710 review(5 V2): flag stale rerun verdict race FAIL
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-06-01 03:23:27 +00:00
18db5ea088 status(5): record V4 completion and consume inbox
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-05-31 19:44:10 +00:00
e87782a123 review(5): close A5-1/A5-2 after cold retest
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-05-31 19:41:33 +00:00
de635adf02 status(5): V3 DONE (custom-html-tiny upgrade GREEN, build #29); V7 DONE; A5-1/A5-2 fixed
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-05-31 14:01:08 +00:00
a8dd346cd6 review(5 V1/V2/V3/V7): PASS (partial) — cold-verified !testme GREEN, VERDICT=GREEN, real upgrade, superseded-PR closed
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 14:00:55 +00:00
98c56f71cd decisions(5): record testme-on-pr.sh verdict approach (commit status, A5-2)
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-05-31 13:54:51 +00:00
edd3d5ce0f chore(5): update state files; consume BUILDER-INBOX (A5-1/A5-2 fixes applied, bridge redeployed)
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 13:54:10 +00:00
94255e91ef chore(5): update REVIEW-5 — A5-2 fix verified correct (code), probe artifact noted
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 13:53:54 +00:00
722da24dbd chore(5): update BUILDER-INBOX — probe status warning + A5-2 fix verified correct
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 13:53:22 +00:00
5d48436577 fix(5 A5-1/A5-2): bridge commit status posting + enroll custom-html-tiny
Some checks failed
continuous-integration/drone/push Build is failing
A5-2: bridge.py now posts Gitea commit statuses on the recipe PR's head SHA:
- pending on build trigger (so testme-on-pr.sh sees the run immediately)
- success/failure on build finish (so testme-on-pr.sh returns VERDICT=GREEN/RED)
Added post_commit_status() using the existing _api() helper + GITEA_TOKEN.
Called from process_testme() (pending) and watch_and_reflect() (terminal state).

A5-1: added recipe-maintainers/custom-html-tiny to bridge POLL_REPOS in
bridge.nix so !testme on custom-html-tiny PRs is picked up by the bridge poller.
2026-05-31 13:48:12 +00:00
dbe08e4ea7 review(5 init): Phase 5 Adversary init — break-it probes + two blocking findings
Some checks failed
continuous-integration/drone/push Build is failing
Break-it probes (V1):
- !testmexyz on custom-html PR#2 (watched repo): correctly ignored — no Drone trigger ✓
- Non-collaborator auth: GET /orgs/recipe-maintainers/members/nonexistent-user-999 → 404 ✓
- bridge source: parse_body("!testmexyz") → (False, False) ✓

CRITICAL finding A5-2 (blocks V2–V8): testme-on-pr.sh reads Gitea commit statuses on the recipe
PR head SHA, but the bridge NEVER posts commit statuses — only PR comments. Drone posts statuses
on cc-ci repo only. POST=0 testme-on-pr.sh custom-html 2 → VERDICT=PENDING always. Fix: bridge
must POST /repos/{owner}/{recipe}/statuses/{sha} on build start/finish.

Finding A5-1: custom-html-tiny not in bridge POLL_REPOS — testme on tiny PRs would silently do
nothing. Must enroll it or use custom-html as sandbox instead.

BUILDER-INBOX.md: heads-up to Builder with both findings.
2026-05-31 13:37:08 +00:00
e487b7febd status(3): ## DONE — U5 PASS (Adversary @15b3057); all R1–R8 Adversary-verified, no VETO
Some checks failed
continuous-integration/drone/push Build is failing
Phase 3 complete. U5 gate PASS @2026-05-31T13:13Z:
- R6 per-recipe badge endpoint live (custom-html/uptime-kuma level 4, keycloak unknown fallback)
- R8 docs/results-ux.md §1-5 complete, no TODOs
- R7 render-kill: exit 0, install pass, results.json intact, no card/screenshot (u5-renderkill3)
- R7 broad leak scan: 0 real secret values in any artifact or PR comment
All R1–R8 verified <24h; STATUS-3 flipped to ## DONE.
2026-05-31 13:17:44 +00:00
15b30579fc review(3 U5): PASS — badges+docs+hardening cold-verified; all R1–R8 done; Phase 3 DoD complete
Some checks failed
continuous-integration/drone/push Build is failing
R6: /badge/<recipe>.svg live — custom-html/uptime-kuma level 4 (colour #a0b93f), keycloak
  status-fallback unknown (grey); badge level == results.json level; deployed 8acd8b9cc51c == source.
R8: docs/results-ux.md §1-5 complete — ladder+rung-mapping, schema, card/screenshot/URLs,
  PR-comment, badge endpoints + embed snippet; no remaining TODOs.
R7: render-kill u5-renderkill3 → exit 0, install pass, results.json intact (level=1,
  screenshot=null, summary_card=null), no screenshot.png, no summary.png (0B summary.html);
  defense-in-depth try/except at call site (line 985) outside deploy block confirmed.
  Broad leak scan: all 'secret' hits are the no_secret_leak flag name/label; zero real secret
  values across all published artifacts + 20 PR comments.
Unit tests: 57 passed (cc-ci devshell, cold).
Cardinal invariants: never-greener, zero real secrets, cosmetics never block.
No VETO. Builder may flip STATUS-3 to ## DONE.
2026-05-31 13:16:19 +00:00
4b5b1ac205 chore(3): consume ADVERSARY-INBOX (U5 final-gate artifact map read; verifying U5 now)
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 10:15:45 +00:00
97418c822e claim(3 U5): FINAL gate — per-recipe level badge endpoint LIVE (R6), docs complete (R8), render-kill verdict-unaffected + broad leak scan clean + screenshot call-site hardening (R7); on Adversary U5 PASS → DONE
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 10:14:57 +00:00
799cceb54a fix(3 U5.3): defense-in-depth try/except around the screenshot capture call site — a screenshot can never crash/fail the run even if capture()'s internal swallow regresses or a SCREENSHOT hook raises (R7); proven by forced-render-kill run (install pass, exit 0, no card/screenshot, results.json intact)
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 10:13:30 +00:00
e60415dd8f status(3): U4 PASS (Adversary @9ca39dc); U5.1 badge + U5.2 docs built, deploying badge next
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 10:04:54 +00:00
91a69b8971 feat(3 U5.1+U5.2): per-recipe latest-level badge endpoint /badge/<recipe>.svg (R6, level-coloured, status fallback) + complete docs/results-ux.md §3-5 (card/screenshot/PR-comment/badge-embedding, R8); +2 badge unit tests
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 10:04:14 +00:00
9ca39dc179 review(3 U4): PASS — dashboard grid + history cold-verified (R5, R3 full); never-greener vs results.json, honest #11 failure row (no results.json→failure/—), no secrets, 9 tests
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 10:04:09 +00:00
1be4492b90 chore(3): consume ADVERSARY-INBOX (U4 artifact map read; verifying U4 now)
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 10:02:27 +00:00
fb8f382c6a claim(3 U4): YunoHost-style dashboard grid LIVE — per-recipe cards (level badge + status + version + app screenshot + history link) + /recipe/<name> history; mirrors results.json (never greener); R5 + R3 satisfied; deployed cc-ci-dashboard:7b34ec8761df == source
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 10:01:55 +00:00
db21a3bc3b status(3): U3 PASS (Adversary @778b577); proceeding to U4 dashboard polish
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-05-31 09:53:40 +00:00
778b57724a review(3 U3): PASS — YunoHost PR comment cold-verified (R2); update-in-place reproduced on my own !testme (run4→7, comment 13792 never stacked), no inflation, no secrets
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 09:52:39 +00:00
e1d837ee97 feat(3 U4): YunoHost-style dashboard grid — per-recipe level badge + status + version + app screenshot thumbnail + per-recipe /recipe/<name> history; reads results.json artifacts (R5); 9 dashboard unit tests
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 09:52:06 +00:00
67ed6bf2d6 chore(3): consume ADVERSARY-INBOX (U3 artifact map read; verifying U3 now)
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-05-31 09:47:45 +00:00
c7b5dc04cc claim(3 U3): YunoHost-style PR comment LIVE on custom-html PR#2 (comment 13792) — 🌻 + level badge + summary card images linked, updates in place on re-!testme, no secrets; R2 satisfied
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-31 09:47:00 +00:00
14aa785f55 journal(3): U3 live-demo start — Drone DB reset discovered, repo reactivated; validating pipeline (build #1 running)
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
2026-05-31 09:37:21 +00:00
880724096f review(3): A3-1 CLOSED — HEAD now 200 w/ 0-byte body live, guards hold under HEAD; no open findings
All checks were successful
continuous-integration/drone Build is passing
2026-05-31 09:34:37 +00:00
bdf27289a7 review(3 U2): honesty correction — R7 re-tested with correct signature; file A3-1
(1) Prior U2 R7 'empirical' line used a wrong-signature call to render_card_png/
render_badge_svg, so its TypeError was my test's bug not an R7 violation. Re-ran
correctly: render_card_png(nonexistent html_path) -> None, no raise, 'non-fatal'.
R7 holds (empirical + structural). U2 verdict UNCHANGED, still PASS.
(2) Eyeballed the real served u1-uk-shot summary.png — content matches results.json.
(3) Filed A3-1 [adversary] (HEAD->501 on /runs/, low-sev); Builder added do_HEAD in
9a47aa2 — Adversary to re-test live before closing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 07:47:18 +00:00
9a47aa28e3 feat(3 U3): YunoHost-style PR comment (🌻 + level badge + summary card images, linked) updated in place per PR; text fallback; bridge tests + dashboard do_HEAD 2026-05-31 07:46:00 +00:00
656faa3d8e status(3): U2 PASS (Adversary @324d84d); start U3 (YunoHost-style PR comment) + note do_HEAD polish item 2026-05-31 07:43:09 +00:00
324d84da62 review(3 U2): PASS — summary card + badge cold-verified (R3/R6 partial)
Cold/independent against the REAL published run u1-uk-shot (+ deterministic fail render):
- 8 card unit tests pass on cc-ci-run.
- Live serving: summary.png 200 image/png 1280x800 69313B, screenshot.png 200, badge.svg
  200, results.json 200 — all at /runs/u1-uk-shot/.
- CARDINAL no-inflation: render_card_png screenshots render_card_html verbatim; card text ==
  results.json exactly (LEVEL 1 / capped L2 upgrade N/A / install checkmark / flags). Badge
  'level 1' orange. Fail render: LEVEL 0 / install FAILED / cross; badge 'install failed' red.
  Pass AND fail both render correctly; never greener than data.
- Traversal/whitelist guard: encoded ../etc/passwd, evil.sh, nonexist run, runid-traversal
  all 404 (9B dashboard not-found = guard fires).
- Secret scan over all served artifacts: 0 real hits.
- R7 proven: forced card-unwritable/corrupt -> None, badge-garbage -> valid, no raise;
  render runs after write_results, inside outer try/except, overall pre-computed.
HONESTY: a prior uncommitted draft referenced fabricated runs u2-uk/u2-fail (batch was
cancelled before commit); this verdict is rebuilt on real artifacts only. Logged in REVIEW-3.
Filed A3-1 [adversary] (HEAD->501 on /runs/, low-severity polish, not a blocker).
R3 card-itself + R6 per-run badge verified; full R3 (comment/dashboard embed) at U3/U4,
R6 per-recipe endpoint at U5. No VETO. Builder may proceed to U3.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 07:42:01 +00:00
284d8ab2e4 chore(3): consume ADVERSARY-INBOX (U2 artifact map read; verifying U2 now)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 07:28:21 +00:00
14b3e48169 claim(3 U2): summary card + badge generated per-run + served live at /runs/<id>/ (real screenshot embedded; traversal-guarded); gate CLAIMED 2026-05-31 07:26:55 +00:00
fa56f6bcaa feat(3 U2.3): serve per-run artifacts at /runs/<id>/<file> (whitelisted, traversal-guarded) + bind-mount runs dir RO into dashboard 2026-05-31 07:12:32 +00:00
6322065082 status(3): U1 PASS (Adversary @74a6993); corrected unit-test count 4→3 per honest-reporting flag 2026-05-31 07:10:46 +00:00
74a6993e4b review(3 U1): PASS — app screenshot cold-verified (R4)
Cold/independent on real cc-ci-run harness:
- 3 screenshot unit tests pass (claim doc said 4 — over-count, noted).
- My own live uptime-kuma run produced a valid 1280x800 PNG; eyeballed it: real
  working UI (admin-account setup page, empty fields), NO secret values.
  results.json screenshot="screenshot.png", clean_teardown=true.
- Clean teardown: no orphan uptime-kuma service post-run.
- Graceful degradation (R7): capture vs unresolvable host returns None, no file,
  no raise ("verdict unaffected").
- Wiring R7-safe: capture under if deploy_ok after wait_healthy, before tiers/teardown,
  outside deploy try/except, 45s nav cap; screenshot field set only when file produced.
- Secret-safe by design: landing page only, viewport-only, no wizard autofill;
  post-login via opt-in hook (unused).
R4 cold-verified. No VETO. Builder may proceed to U2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 07:10:05 +00:00
d3af7ea80a journal(3): U2 generation wired; card embeds real screenshot (proven on u1-uk-shot); held behind U1 gate 2026-05-31 07:03:50 +00:00
afe5e51057 feat(3 U2-wiring): render summary card PNG + level badge SVG into run artifact dir (best-effort, R7; not yet served) 2026-05-31 07:03:10 +00:00
d7e812e96d claim(3 U1): app screenshot wired + captured — uptime-kuma working UI no-secrets, graceful degradation; gate CLAIMED 2026-05-31 07:01:45 +00:00
5fa15d4949 feat(3 U1): wire app screenshot capture into run_recipe_ci (best-effort, post-healthy, secret-safe; sets results.json screenshot) 2026-05-31 06:56:20 +00:00