Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
Commit5e888b7unknown_key

docs(BIBLE): flip C1 to shipped + lock workflow files

docs(BIBLE): flip C1 to shipped + lock workflow files

Scorecard: GitHub Actions equivalent → ✅.
LOCKED BLOCKS: 0008 migration, workflow-parser.ts, workflow-runner.ts,
workflows.tsx, RepoNav active enum updated with 'actions'.
Claude committed on April 15, 2026Parent: eafe8c6
1 file changed+1175e888b763f8c8d558f07bf40c816f51727f42aad
1 changed file+11−7
ModifiedBUILD_BIBLE.md+11−7View fileUnifiedSplit
123123| AI code review | ✅ | `src/lib/ai-review.ts` |
124124| AI merge conflict resolver | ✅ | `src/lib/merge-resolver.ts` |
125125| AI chat (global + repo) | ✅ | `src/routes/ask.tsx` |
126| GitHub Actions equivalent (workflow runner) | ❌ | GateTest integrated, no generic runner |
126| GitHub Actions equivalent (workflow runner) | ✅ | `src/lib/workflow-parser.ts`, `src/lib/workflow-runner.ts`, `src/routes/workflows.tsx`; `.gluecron/workflows/*.yml` auto-discovered on push; Bun subprocess executor, per-step timeouts, size-capped logs |
127127| Dependabot equivalent (AI dep bumper) | ❌ | |
128128| Code scanning UI | 🟡 | data exists, no dedicated UI page |
129129| Copilot code completion | ❌ | |
203203- **B6** — OAuth 2.0 provider (third-party apps can request access) → ✅ shipped (pending final commit)
204204
205205### BLOCK C — Runtime + hosting
206- **C1** — Actions-equivalent workflow runner
207 - Workflow YAML parser (`.gluecron/workflows/*.yml`)
208 - Job queue + worker pool (Bun subprocesses)
209 - Artifact storage + log streaming
210 - Integrates with gates
206- **C1** — Actions-equivalent workflow runner → ✅ shipped (`eafe8c6`)
207 - Workflow YAML parser (`src/lib/workflow-parser.ts`) — hand-rolled subset
208 - Background worker (`src/lib/workflow-runner.ts`) — Bun.spawn, size-capped logs, SIGTERM→SIGKILL timeouts
209 - Auto-discovery from `.gluecron/workflows/*.yml` on default-branch push
210 - UI at `/:owner/:repo/actions` with manual trigger + cancel
211211- **C2** — Package registry (npm + container protocol)
212212- **C3** — Pages / static hosting (`gh-pages` branch → served at `<owner>.<repo>.pages.gluecron.com`)
213213- **C4** — Environments (prod/staging/preview) with protected approvals
267267- `drizzle/0005_totp_2fa.sql` (Block B4) — migration, never edited in place
268268- `drizzle/0006_webauthn_passkeys.sql` (Block B5) — migration, never edited in place
269269- `drizzle/0007_oauth_provider.sql` (Block B6) — migration, never edited in place
270- `drizzle/0008_workflows.sql` (Block C1) — migration, never edited in place
270271
271272### 4.2 Git layer (locked)
272273- `src/git/repository.ts` — tree / blob / commits / diff / branches / blame / search / raw / tags / commitsBetween
283284- `src/lib/totp.ts` (Block B4) — TOTP enroll / verify / recovery codes
284285- `src/lib/webauthn.ts` (Block B5) — WebAuthn registration + assertion helpers
285286- `src/lib/oauth.ts` (Block B6) — OAuth 2.0 provider: authorization code grant, token issuance, scope enforcement
287- `src/lib/workflow-parser.ts` (Block C1) — YAML subset parser for `.gluecron/workflows/*.yml`. Exports `parseWorkflow(src)` returning `{ ok, workflow | error }`. Never throws.
288- `src/lib/workflow-runner.ts` (Block C1) — shell executor. Exports `executeRun`, `drainOneRun`, `enqueueRun`, `startWorker`. Clones repo to tmpdir, runs each job via `Bun.spawn(["bash","-c",step.run])` with SIGTERM→SIGKILL timeouts, size-capped stdout/stderr, cleans up in `finally`.
286289
287290### 4.4 AI layer (locked)
288291- `src/lib/ai-client.ts` — Anthropic client + model constants
338341- `src/routes/passkeys.tsx` (Block B5) — WebAuthn passkey registration / assertion / management. All require auth.
339342- `src/routes/oauth.tsx` (Block B6) — OAuth 2.0 authorize + token + userinfo endpoints.
340343- `src/routes/developer-apps.tsx` (Block B6) — developer-facing OAuth app CRUD (`/settings/developer/apps`), client secret rotation, audit-logged.
344- `src/routes/workflows.tsx` (Block C1) — Actions UI. `GET /:owner/:repo/actions`, `GET /:owner/:repo/actions/runs/:runId`, `POST /:owner/:repo/actions/:workflowId/run` (auth+owner), `POST /:owner/:repo/actions/runs/:runId/cancel` (auth+owner). Manual runs are `event=manual`, ref=default branch.
341345
342346### 4.7 Views (locked contracts)
343347- `src/views/layout.tsx``Layout` accepts `title`, `user`, `notificationCount`
344- `src/views/components.tsx``RepoHeader`, `RepoNav` (active: `code|issues|pulls|commits|releases|gates|insights|...`), `RepoCard`, etc.
348- `src/views/components.tsx``RepoHeader`, `RepoNav` (active: `code|issues|pulls|commits|releases|actions|gates|insights|...`), `RepoCard`, etc.
345349- `src/views/reactions.tsx``ReactionsBar` (no-JS compatible, form-per-emoji)
346350- Nav links: logo · search · theme-toggle · Explore · Ask · Notifications · New · Profile (or Sign in / Register)
347351- Keyboard chords: `/`, `Cmd+K`, `?`, `n`, `g d`, `g n`, `g e`, `g a`
348352