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.md6.8 KB · 144 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
> **SUPERSEDED (2026-06-10):** historical record only. The current audit is `AUDIT-2026-06-10.md` at the repo root.

# Gluecron Audit — 2026-05-16

Comprehensive end-to-end audit run on branch `claude/fix-aa-loop-issue-PonMQ`
at commit `67f64a3`. Four parallel agents covered: route inventory, link/form
target validation, automated checks (bun test + tsc + smoke crawl), and
critical-user-journey code-path tracing.

## Health snapshot

| Check | Result |
|---|---|
| `bun test` | **1995 pass / 0 fail / 2 skip** across 143 files |
| `bunx tsc --noEmit` | **clean — zero errors** |
| Registered HTTP routes | **172** |
| Broken internal `href` | **1** — register form links to non-existent `/legal/*` |
| Broken form actions | 0 |
| Broken client `fetch()` calls | 0 |
| Routes hanging on stub DB | 2 — `/` and `/status` |
| Routes 500ing on stub DB | 1 — `/explore` |

## Verified bugs (severity-ranked)

### P0 — Fixed this session

1. **AA reload loop on admin dashboard.** Layout registered `/sw.js` and
   `/sw-push.js` at the same scope `/`; the SW spec only allows one
   active SW per scope, so each registration kept replacing the other and
   the `updatefound → reload` hook fired on every page load. Cause of the
   "deploy pill flashing" / "typing wiped" / "buttons don't work"
   symptoms. **Commit `d7ba05d`.** Includes regression test.

2. **AI code review silently auto-approves PRs.** `src/lib/ai-review.ts`
   `reviewDiff()` returned `{ approved: true }` whenever Claude's output
   couldn't be parsed as JSON. Combined with the `approved: parsed.approved
   !== false` defaulting, **a missing field or any parse failure became an
   approval signal**, which feeds the K2 auto-merge gate. Fail-open on a
   security-relevant decision. Now fails closed: explicit `approved: true`
   required, otherwise returns `false` with a parseable failure summary.
   **(committed in this batch.)**

3. **Broken legal links in register form.** `src/routes/auth.tsx` linked
   to `/legal/terms` and `/legal/privacy`; mounted routes are `/terms`,
   `/privacy`, `/acceptable-use` (no `/legal/` prefix). 404 on click.
   Fixed to use the live paths. **(committed in this batch.)**

4. **`drizzle.config.ts` crashes obscurely without `DATABASE_URL`.**
   Non-null assertion → undefined → deep parser crash. Now throws a
   clean, actionable error at the top of the run. **Commit `67f64a3`.**

### P1 — Real bugs, not yet fixed

5. **`src/routes/legal/` is an orphan subdirectory.** Contains
   `terms.tsx`, `privacy.tsx`, `acceptable-use.tsx`, `dmca.tsx`. None of
   them are mounted in `src/app.tsx`. Self-reference `/legal/*` paths
   internally. Either mount them (and drop `legal.tsx`), or delete them.
   Currently dead code that wastes reviewer attention.

6. **Duplicate route registration on `/:owner/:repo/dependencies`.**
   Registered in both `src/routes/deps.tsx:45` and
   `src/routes/insights.tsx:183`. Hono is first-wins, and `insightRoutes`
   mounts first (line 372 vs 411 in `app.tsx`), so the `deps.tsx` handler
   is **unreachable dead code**.

7. **`/explore` 500s with no DB.** No defensive error boundary around
   the public repo-list query. Means a Neon hiccup takes the public
   discovery page down hard rather than degrading. Same pattern as
   `public-stats.ts` already handles; copy that approach.

8. **`/` and `/status` hang indefinitely on DB failure.** The home page
   handler blocks on `computePublicStats()` (and that file already has a
   "degraded to zeros" fallback) but the underlying query path can hang
   when the connection refuses rather than fails. Needs an explicit
   `Promise.race` against a 3–5s timeout so the page renders cached or
   zero data instead of timing out at the proxy.

### P1 — Silent failures across journeys (from critical-path audit)

9. **Post-receive hook silent failures.** `src/hooks/post-receive.ts`
   fires auto-repair, analysis, health-score updates as fire-and-forget
   with `.catch(() => {})`. User's push reports green from git but
   downstream automation may have crashed. No surface on the repo page.

10. **Import-bulk has no input validation, no size limits.** A 10GB repo
    can be cloned into RAM with no progress feedback or timeout
    (`src/routes/import-bulk.tsx`, `src/lib/import-helper.ts`). Git stderr
    is truncated to 200 bytes, so real errors are illegible.

11. **`releaseExpiredWaitTimers` `.set is not a function`** at
    `src/lib/environments.ts:376`. Caught and silently logged in tests;
    in production this means env-approval wait timers never release.
    Looks like a stale Drizzle call after a schema change.

### P2 — Style / pattern issues (lower priority)

12. **Admin auth is inconsistent.** Some admin routes use `requireAdmin`
    middleware, others use inline `gate()` helpers that call
    `isSiteAdmin()`. **All routes audited are properly admin-gated** —
    the route auditor flagged false positives on `mirrors`,
    `github-oauth`, `sso`, but all three have explicit `isSiteAdmin()`
    checks inside the handler. The inconsistency is a maintenance hazard,
    not a security hole.

13. **Many helpers `return null` instead of returning a `Response` or
    throwing.** Pattern in `ai-tests.tsx`, `ai-explain.tsx`,
    `discussions.tsx`, `issues.tsx`, `admin-ops.tsx`. Non-standard
    semantics that could mask bugs. Not a current crash source.

14. **Silent `.catch(() => {})` patterns.** Several auth flows swallow
    notification and audit-log failures without logging. Appropriate for
    best-effort side effects but lack of observability means operational
    issues are invisible.

## Verdict

The codebase is **substantially more solid than the user's framing
suggested**. 1995 tests pass, navigation has zero broken links/forms, all
admin routes are properly authenticated. The user-visible symptoms ("loop",
"buttons don't work") trace to a single root cause (the SW scope collision)
which is now fixed.

The genuine P0s are concentrated in two areas:
- The **AI auto-merge pipeline** (now fixed — review can no longer fake
  approval through JSON parse failure)
- **Failure surfaces** — post-receive, imports, and env approvals fail
  silently rather than reporting to the user

What this is **not**: a beginner codebase. It is an ambitious one with
~170 routes and significant feature breadth (SSO, OAuth, GraphQL, MCP,
marketplace, AI review, etc.). The fragility comes from surface area, not
craftsmanship.

## What's still needed for "usable as a normal website"

1. Deploy `d7ba05d` + the fixes in this batch to prod.
2. Run a golden-path smoke test manually: register → create repo → `git
   push` → file an issue → open a PR. Each step that fails gets a fix.
3. Address P1 items as discovered during the smoke test, in order of
   user-visible impact.

Visibility sweep (activity drawer, live admin, repo activity rail, run
pages) is a separate effort and belongs on a fresh branch after the
golden-path is green.