Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
CodeIssuesDiscussionsWikiPull RequestsProjectsCommitsActionsReleasesContributorsPulse● GatesSecuritySettingsDeploymentsPipelineInsightsAgents✨ Explain✨ Ask AI✨ Workspace✨ Spec✨ Tests▓ Debt Map✨ NL Search🏛 Archaeology
claude/adoring-hopper-5x74bqclaude/affectionate-feynman-ykrf1hclaude/architecture-audit-design-wxprenclaude/build-status-update-3MXsfclaude/charming-meitner-mllb5rclaude/compare-gate-gluecron-s4mFQclaude/confident-faraday-tikcwbclaude/continue-work-XMTlIclaude/crontech-gluecron-deploy-7MIECclaude/crontech-platform-setup-SeKfwclaude/design-2026claude/ecstatic-ptolemy-jMdigclaude/enhance-github-integration-QNHdGclaude/fix-aa-loop-issue-PonMQclaude/fix-actions-and-processclaude/fix-desktop-errors-XqoW8claude/fix-red-workflowsclaude/fix-website-access-6FKJNclaude/gatetest-integration-hardeningclaude/github-audit-improvements-bDFr9claude/gluecron-launch-status-FoMRlclaude/hopeful-lamport-olfCTclaude/issue-to-pr-and-protectionsclaude/jolly-heisenberg-2sg1Qclaude/launch-preparation-QmTb6claude/new-session-xk1l7claude/plan-platform-architecture-kkN4yclaude/platform-analysis-roadmap-1nUGLclaude/platform-launch-assessment-8dWV8claude/polish-platform-release-AeDrUclaude/resume-previous-work-KzyLwclaude/review-crontech-handoff-qYEVqclaude/review-project-completeness-lHhS2claude/review-readme-docs-ulqPKclaude/serene-edison-rj87weclaude/setup-multi-repo-dev-BCwNQclaude/ship-fixes-and-tests-Jvz1cclaude/site-audit-competitive-pctlwgclaude/site-migration-vercel-XstpKclaude/standalone-product-repos-XHFTDcopilot/feat-smart-empty-states-keyboard-first-enhancementcopilot/feat-smart-morning-digest-review-context-restorecopilot/fix-and-process-workflowscopilot/update-ai-powered-code-reviewfeat/debt-mapfeat/push-policy-codeowners-hardeningfeat/smart-digest-contextfeat/stage-impactfeat/t1-secret-migrationfeat/u-polishfeat/w-self-hostfeat/w2-claude-configfix/agent-journey-orphan-sweepgatetest/auto-fix-1776586424172gatetest/auto-fix-1776586534814gatetest/auto-fix-1776590685143gatetest/auto-fix-1776590808199mainops/redeploy-retriggerstyle/dxt-cta-themeworktree-agent-a3377aad30d55da26worktree-agent-a7ef607b7ee1d6c74
AUDIT-2026-07-07-CHECKLIST.md5.3 KB · 87 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# Audit & Remediation Checklist — 2026-07-07

Running status of the full-platform audit and fixes. **Source of truth for this
work.** Ticks are only green when verified (tests run / diff reviewed), not when
"written". Full findings live in the session memory `audit_2026-07-07.md`.

Legend: ✅ done & verified · 🔄 in progress · ⬜ not started · 🚫 blocked (needs owner)

---

## Phase 0 — Audit (4 parallel agents)
- ✅ Feature/product reality vs BUILD_BIBLE
- ✅ Security & secrets
- ✅ Design & UX
- ✅ MCP / agent connectivity
- ✅ GateTest MCP installed (`claude mcp add gatetest`) — active after Claude Code restart

## Phase 1 — CRITICAL security fixes (commit `5bb52fa`)
- ✅ **C1** Workflow runner secret leak — env allowlist + denylist (`src/lib/workflow-runner.ts`)
- ✅ **C2** Private repos world-readable (git protocol) — read-access gate (`src/routes/git.ts`)
- ✅ **C2** Private repos world-readable (web browse) — `assertRepoReadable` on 12 routes (`src/routes/web.tsx`)
- ✅ **C3** Anonymous push to any repo — write-access gate (`src/routes/git.ts`)
- ✅ **C4** Stored XSS in markdown — `sanitize-html` + 14 regression tests (`src/lib/markdown.ts`)
- ✅ **C5** Unauth admin sandbox endpoints — site-admin gate + bounded ports (`src/routes/admin-command.tsx`)

## Phase 2 — Review hardening (commit `6b75ac1`)
- ✅ Fail-CLOSED on DB error in `assertRepoReadable` (was fail-open) — flagged by automated review

## Phase 2.5 — LOGIN LOCKOUT root cause (commit `2aefa37`)
**Why the owner is locked out of gluecron.com:** a previous agent's `signin-v2`
redesign shipped PASSWORDLESS — `GET /login` renders `SignInV2`, which had OAuth +
passkey + magic-link but **no username/password field** (subheading literally said
"no new passwords"). The live site still shows a password box only because it runs
OLDER code. Deploying as-is would have DELETED password login and locked the owner
out worse.
- ✅ Restored a real password `<form action=/login>` (username + password + Sign in +
  Forgot-password link) above the Google/GitHub/passkey/magic options in `signin-v2.tsx`.
- ✅ Verified: `/login` renders 200 with password+username fields, posts to `/login`,
  Google + GitHub buttons present, `/forgot-password` link present. web-routes 13/13.
- ✅ Owner password reset to a known value via `scripts/reset-admin-password.ts`
  (account `ccantynz`, now site-admin). It failed on live because live = old passwordless code.
- ⏳ After deploy: owner logs in at `/login` with `ccantynz` + password. Google/GitHub
  BUTTONS will show; for them to COMPLETE, OAuth client id/secret must be set in DB at
  `/admin/github-oauth` and `/admin/google-oauth` (owner is admin now, can do this post-login).
- ⚠️ Deploy risk: `self-deploy.sh` runs `db:migrate`; if the live DB has migration drift it
  may fail+rollback (safe — keeps current). Watch `/admin/deploys`.

## Phase 3 — Verification
- ✅ Full suite baseline (stashed): 23 fail / 2896 pass
- ✅ Full suite with fixes: 23 fail / 2910 pass (+14 new, **0 new failures**)
- ✅ Targeted: web-routes 13/13, repo-access 5/5, markdown-xss 14/14, workflows+secrets 28, api 6/6
- ✅ Clean module imports for every edited file

## Phase 4 — Ship
- ✅ Committed to `main` (`5bb52fa`, `6b75ac1`)
- ✅ Pushed to `origin` (GitHub mirror) — `main` == `origin/main` @ `6b75ac1`
- 🚫 **Deploy LIVE to gluecron.com** — needs `GLUECRON_PAT` (not in session).
     Run: `git push https://x:<PAT>@gluecron.com/ccantynz/Gluecron.com.git main`
     Until done, the live site still runs the vulnerable code.

---

## Phase 5 — HIGH security items (NOT started)
- ⬜ H1 `git grep` arg injection — add `--`, reject leading-`-` query (`src/git/repository.ts:518`)
- ⬜ H2 SSRF DNS-rebinding — wire `resolvesToPrivate`, `redirect:"manual"` (`webhook-delivery.ts`, `mirrors.ts`)
- ⬜ H3 Spoofable X-Forwarded-For — trusted-proxy IP only (`rate-limit.ts`, `auth.tsx`)
- ⬜ H4 `/api/auth/*` no throttle/lockout — apply auth limiter + lockout
- ⬜ H5 GitHub OAuth takeover via unverified email — require verified email (`sso.ts:594`)
- ⬜ H6 api-v2 workflow-dispatch missing write check (IDOR) — gate on write access (`api-v2.ts:2610`)

## Phase 6 — Overstated features (NOT started)
- ⬜ CI does not run on push — wire workflow trigger into `post-receive.ts`
- ⬜ "Verified" commit badge does no crypto verification — real verify or remove badge
- ⬜ Orgs/teams don't gate repo access — consult org/team roles in `repo-access.ts`
- ⬜ Test suite red on main (23 pre-existing fails) — fix or quarantine

## Phase 7 — Design unification (NOT started)
- ⬜ Quick wins: flat near-black buttons, delete glow orbs, emoji→SVG icons
- ⬜ Collapse 4 design systems → 1 (QI palette: bg #fcfcfd, ink #16181d, accent #4353c9)
- ⬜ Delete dead landings (`landing.tsx`, `landing-2030.tsx`, `landing-v2.tsx`)
- ⬜ Wire orphaned `pr-redesign.tsx`

## Phase 8 — MCP connectivity (NOT started)
- ⬜ Fix `/docs/mcp-server` broken config (`.claude/settings.json``.mcp.json`) — 1-line, highest ROI
- ⬜ OAuth discovery (`/.well-known/*` + DCR + 401 challenge) → unlocks Claude Desktop/web + directories
- ⬜ Cross-client install (Add-to-Cursor deeplink, Windsurf/VS Code snippets)
- ⬜ Token UX: expiry presets, stop passing PAT in URL query