Build · refounding

RAILS

Overview
Current Owner
@tristan
Stage
Build
Time in Stage
9d
Slack Channel
Stage Timeline
Backlog
2026-04-06 · @tristan
Shape
2026-04-06 · @tristan
Build
2026-04-06 · @tristan
Expedite
Ship
Learn
Done
Stage Documents
shape.md Shape Deliverable

RAILS — Shape

Definition of done

Both @tristan and @dan feel confident using RAILS on real projects with other team members.

Scope

Slackbot infra

Must work reliably in project channels. Should not break when people use threads inside those channels.

Web dashboard

Multiple views at different zoom levels:

  • Company: all projects in flight, organized by initiative
  • Initiative: all projects for a particular initiative
  • Project: state of a single project
  • Stage: zoomed-in view of where a project currently sits Intentionally minimal/unstyled — avoid design opinions early so feedback stays on the process, not pixels (Spolsky's Iceberg Secret). Pull Slack profile pics for user avatars via the Slack API.

Assistant logic

Keeps projects on track and organized. Is genuinely helpful, not just a state machine. SOUL.md for personality.

File handling

Save all files shared in a project channel to the project's folder in the repo. Currently only images are downloaded — extend to all file types.

Migration / onboarding

A temporary process to onboard current in-flight projects to their correct states in RAILS. Once deployed, new projects just start in RAILS natively and this goes away.

Daily message archive

Save all messages from each project channel as a daily file in the project folder. Makes project context portable for AI workflows and preserves full history independent of context.md.

Stretch: context pull for coding sessions

Simple UX for a team member to pull all project context (history, decisions, blockers, deliverables, docs) into their interactive coding session (Claude Code, Codex, etc). Nice to have but likely a "wow" moment for team buy-in.

Stretch: company-wide context

A shared context file (team profiles, products, org structure) so the bot doesn't need things explained that everyone already knows. Could eventually live at the Contextone platform level.

Stretch: daily cron digest

Automated daily summary of where each project sits. Doubles as a default view in the web dashboard.

Stretch: RAILS bug/feature tracker

A lightweight way for RAILS users to quickly log bugs and feature requests without breaking flow. Keeps the "user hat" and "builder hat" separate while dogfooding.

Appetite

Small — a few days.

build.md Build Deliverable

RAILS — Build (WIP)

This document is underway while the project is in Build. It will be finalized when the stage completes.

Entered Build: 2026-04-06 · Owner: @tristan · Initiative: Refounding

Goal

Get RAILS working well enough that both @tristan and @dan feel confident using it on real projects with other team members (from Shape definition of done).

What's been built

Slackbot infra

  • Core listener/router/session architecture working in project channels
  • Thread handling implemented — threads in a project channel are part of the same project conversation
  • Mention-reply rules hardened (must always use slack-post.js)
  • Auto-orientation on startup (finds project by channel ID, reads state + latest digest)

Web dashboard

  • Live at hosted URL (contextone bug blocking it resolved Apr 7)
  • Company kanban view landed
  • Initiative, Project, and Stage zoom levels deferred — no real projects to test with yet

Assistant logic

  • CLAUDE.md is the functional brain — stage management, git conventions, Slack conventions
  • SOUL.md referenced via @import, left empty for human authoring
  • claude-code-guide agent directive added for harness questions
  • Bot personality and judgment improving through daily use

Daily digests (replaced context.md)

  • daily_digests/manifest.md + YYYY-MM-DD.md structure — battle-tested from @dan's workflows
  • Digests generated via /loop 1d (session-scoped; /schedule is upgrade path)
  • Digests updated on stage transitions, not just daily
  • Backfilled Apr 6–7 from original context.md

Stage model

  • Originally 6 stages, split Execute into Build + Expedite (7 total: Backlog, Shape, Build, Expedite, Ship, Learn, Done)
  • Stage definitions from original diagram codified in CLAUDE.md
  • PR #3 merged with split + test fixes (94 tests passing)

File handling

  • Images supported; non-image files still dropped on the floor

CLAUDE.md resilience

  • Bot accidentally clobbered hardened rules twice during PR edits — caught and restored
  • Memory added to prevent this in future sessions

What's in progress

  • Project backfill skill — @tristan building a skill to onboard existing in-flight work into RAILS
  • Migration of @dan's 10+ in-flight channels (last core Build item before this is a real tool)

What's not done yet

  • Dashboard Initiative/Project/Stage zoom levels (deferred until real projects exist)
  • File handling for non-image types
  • Context pull for coding sessions (stretch)
  • Company-wide context file (stretch)
  • RAILS bug/feature tracker (stretch)

Open Questions (for Expedite)

  • Document storage UX: git markdown works for agents but feels "disconnected" for humans. Likely a dashboard UI problem, not a format issue. Wikiwise renders markdown readably as a reference point.
  • Where do product questions found during Build go? Consensus: park for Expedite batching, not one-by-one handling.
  • Should project view show state from GitHub/Figma/Notion? Decision: keep RAILS as source of truth for stage/ownership, link out to external tools rather than mirror their state.
  • Expedite feedback aggregation feature — @dan's idea for a RAILS-owned skill that constantly collects team feedback during polishing.
  • Dashboard version history — surface git commit history for project docs so users can see what changed and why. Git gives this for free, just needs UI. (per @kris and @dan)
  • Dashboard deep linking to doc sections (anchor on headings) + Slack link previews for inline context. (per @kris)
  • Inline LLM editing — select part of a doc in the dashboard, give an instruction, get it updated. Key requirement: output must be trustworthy. (per @kris)
  • Embedded video in docs — pull/trim Loom mp4s directly instead of linking out. (per @dan)
  • Periodic jobs for daily digests — replace session-scoped /loop with contextone cron jobs that run at a fixed time. (per @tristan and @dan)
Daily Digests 6
2026-04-15 Daily Digest

RAILS — 2026-04-15

Stage: Build | Owner: @tristan | Initiative: Refounding

Activity

  • @tristan shipped backfill skill and used it on Global Ghostreader (PR #4 merged). Full project backfilled: state.yml, motivation.md, shape.md, WIP build.md, 12 daily digests back to Dec 2025.
  • Dashboard improvements shipped: daily digests UI, Bookwise design system, theme toggle, Overview section, linked docs fixes.
  • @tristan noted backfill revealed how much context lives in GitHub/Notion — the backfill skill pulls from those sources but RAILS doesn't track them on an ongoing basis.
  • Discussion on ongoing multi-source sync: @tristan suggested daily digest as the natural sync point for GitHub/Notion/Figma context. @dan agreed GitHub at minimum should be in scope. @dan's architecture: links get dropped in Slack naturally, RAILS uses MCP to follow them and pull content.
  • @dan asked about stage framework for dashboard UX — confirmed as Expedite scope (Build = working, Expedite = polished, Ship = released).
  • @tristan working on backfilling all remaining projects — last gate before moving RAILS to Expedite.
  • Daily digest loop was not running (session-scoped /loop instruction had been dropped from CLAUDE.md during prior cleanup). Caught by @tristan, being fixed.

Key decisions

  • Multi-source context sync (GitHub/Notion/Figma) is a recognized gap — architecture TBD (daily digest sweep vs MCP link-following)
  • Dashboard UX confirmed as Expedite scope, not Build
  • Backfilling all projects is the gate to Expedite

Blockers

  • None

What's next

  • Finish backfilling all remaining projects
  • Restore /loop instruction and generate missing digests
  • Move to Expedite once backfill complete
2026-04-14 Daily Digest

RAILS — 2026-04-14

Stage: Build | Owner: @tristan | Initiative: Refounding

Activity

  • @tristan asked about whether project view should show state from GitHub/Figma/Notion. Consensus: keep RAILS as source of truth for stage/ownership, link out rather than mirror external state.
  • @tristan building a backfill skill to onboard existing projects into RAILS — adding it to the rails repo as part of Build scope.
  • @tristan requested WIP stage doc process change: create stage deliverables at stage entry (as WIP), finalize at exit. Implemented and committed.
  • WIP build.md created for the RAILS project itself — comprehensive summary of Build progress so far.
  • Team discussion on Notion vs git markdown for RAILS docs:
    • @kris: Can't fully replace Notion without rebuilding it. RAILS should bridge by constantly pulling from Slack + Notion. Source of truth in git, publish to Notion for collaboration.
    • @dan: Core RAILS docs must stay in git. Supplementary docs can live wherever. Notion API rate limits make it infeasible as a programmatic backend anyway.
    • @kris: His workflow already uses local markdown as source of truth, pushes to Notion to collaborate. Key missing features for replacing Notion: deep linking to doc blocks, inline LLM editing.
    • @tristan: Excited about "clicky UX" for the dashboard to enable direct interaction.
    • Consensus: core RAILS docs in git, supplementary docs wherever works for the individual.
  • @dan requested version history, deep linking, inline LLM editing, and embedded video added to the build.md open questions list. Done.
  • @dan's key insight: keeping discussion in Slack (not Notion comments) means RAILS can see and absorb everything.
  • @dan: 80% of doc quality issues solvable by hardening upstream skills, not by building Notion-replacement features.
  • @kris committing to experiment: no manual Notion edits, see where it breaks.

Key decisions

  • WIP stage docs: create at stage entry, finalize at exit (process change committed)
  • RAILS core docs stay in git; Notion not prohibited for supplementary/personal docs
  • Backfill skill is in-scope for Build (not a separate project)
  • Dashboard features for Expedite: version history, deep linking, inline LLM editing, embedded video

Blockers

  • None

What's next

  • @tristan backfilling all projects (gate to Expedite)
  • Dashboard UX improvements deferred to Expedite
2026-04-13 Daily Digest

RAILS — 2026-04-13

Stage: Build | Owner: @tristan | Initiative: Refounding

Activity

  • @tristan and @dan discussed document storage UX — git markdown works for agents but feels "disconnected" for humans. Notion ruled out. Conclusion: likely a UI issue in the dashboard, not a format issue. Tabled for now.
  • @dan noted Wikiwise renders markdown readably — reinforces it's a dashboard UI problem.
  • @tristan raised concrete example: @piotr has product questions from building GG with no clear place to put them. Currently dumped in Slack, risk of getting lost.
  • Discussion on whether product questions found during Build belong in Build or Expedite. Consensus: park them for batching in Expedite rather than handling one-by-one.
  • @dan suggested the Build deliverable could have an "open items" section for handoff, or the Expedite doc could collect them during Build.
  • @dan suggested a feedback aggregation feature for the Expedite stage — constantly collecting team feedback during polishing. Could be a RAILS-owned skill.
  • PR #3 (Build+Expedite split) merged and deployed.

Key decisions

  • Document format staying as git markdown for now — dashboard UI improvement needed, not a format change
  • Product questions during Build should be parked for Expedite, not handled one-by-one (unless truly blocking)
  • Build deliverable includes Open Questions section for Expedite handoff

Blockers

  • None

What's next

  • Redeploy with Build+Expedite stages
  • Migration of @dan's in-flight channels
  • Expedite feedback aggregation feature (per @dan)
2026-04-12 Daily Digest

RAILS — 2026-04-12

Stage: Build | Owner: @tristan | Initiative: Refounding

Activity

  • New session started after ~5 day gap (no activity Apr 8–11).
  • Bot caught up on full channel history back to Mar 26, updated context.md with missing Apr 7 context. Committed 1e57a9c.
  • @tristan requested PR for daily digest structure (daily_digests/manifest.md + YYYY-MM-DD.md files, /loop 1d for generation).
  • PR #2 created with daily digest support + .claude/loop.md prompt.
  • @tristan noted context.md should be replaced entirely by daily digests. Also requested digest updates on every stage transition.
  • Bot accidentally clobbered hardened CLAUDE.md rules (mention-reply, orientation section) during PR edits — caught by @tristan, fixed in 58292a9.
  • /loop confirmed session-scoped (not persistent) via claude-code-guide. CLAUDE.md updated to say "run /loop 1d after starting a session."
  • context.md fully replaced by daily_digests. Backfilled Apr 6–7 digests from context.md history. Committed e95d9c2.
  • PR #2 merged and deployed.
  • Dashboard URL confirmed: rails-super-secret-yo.infra.contextone.dev/project/rails — bot can't update channel description programmatically, provided draft for @tristan.
  • @tristan noted daily digests have limitations for tracking RAILS state (ongoing discussion with @dan).
  • Stage definitions added to CLAUDE.md from the original diagram (commit 4c66ac4). Bot accidentally clobbered CLAUDE.md again — restored in 175b3b9.
  • @tristan reviewed Build status, deferred Initiative + Stage dashboard views (no real projects to test with yet).
  • @dan weighed in: migration should stay in Build (will surface bugs), Ship = when ready to announce to team.
  • @tristan and @dan decided to split Execute into Build + Expedite. PR #3 created.
  • PR #3 also fixed 4 pre-existing test failures (context.md → daily_digests migration in tests). All 94 tests passing.

Key decisions

  • context.md replaced by daily_digests structure (permanent)
  • Daily digests should be updated on every stage transition, not just daily
  • /loop 1d is session-scoped; /schedule is the future upgrade path
  • Stage definitions from original diagram codified in CLAUDE.md
  • Initiative + Stage dashboard views deferred until real projects exist
  • Execute split into Build + Expedite (7 stages total)

Blockers

  • None

What's next

  • Migration of @dan's 10+ in-flight channels (last core Build item)
  • Expedite stage feedback aggregation feature (per @dan's suggestion)
2026-04-07 Daily Digest

RAILS — 2026-04-07

Stage: Build | Owner: @tristan | Initiative: Refounding

Activity

  • SOUL.md: initial auto-generated version was poor quality. @tristan emptied it, leaving as placeholder. @dan clarified: "soul is about form, claude.md is about function — don't blur the line."
  • BOT_CLAUDE.md now references SOUL.md via @import (Claude Code native feature, per @dan).
  • Added claude-code-guide agent directive to CLAUDE.md for answering harness questions.
  • Contextone bug fixed by @piotr — web dashboard live at rails-super-secret-yo.infra.contextone.dev.
  • Company kanban redesign landed for dashboard.
  • CLAUDE.md hardened: mention-reply rules (must always use slack-post.js) + status-orientation rules committed.
  • context.md identified as stale. Team discussed replacing it with daily digests structure.
  • @dan proposed repo structure: daily_digests/{manifest.md, YYYY-MM-DD.md} — battle-tested pattern from his workflows.
  • @tristan asked bot to PR daily digest support using /loop. Debate over /loop vs /schedule (loop is session-scoped). @tristan chose /loop.
  • @tristan clarified: digest should use slack history AND claude conversation history.

Key decisions

  • Replace context.md with daily_digests structure
  • Use /loop 1d for daily digest generation (session-scoped, re-invoke on restart)
  • SOUL.md left empty — will be human-authored, not AI-generated

Blockers

  • None new. Dashboard blocker resolved.

What's next

  • Finish daily digest PR
  • Remaining dashboard zoom levels (Initiative, Project, Stage)
  • Migration of @dan's 10+ in-flight channels
2026-04-06 Daily Digest

RAILS — 2026-04-06

Stage: Backlog → Shape → Build | Owner: @tristan | Initiative: Refounding

Activity

  • Project created in Backlog by @tristan. @dan joined and onboarded — deep dive into architecture: how BOT_CLAUDE.md injection works, listener/router/session model, skills/MCP extensibility.
  • Moved to Shape. @dan and @tristan collaboratively finalized the shape doc — scope: slackbot infra, web dashboard (4 zoom levels, intentionally unstyled per Spolsky's Iceberg Secret), assistant logic + SOUL.md, file handling, migration.
  • @dan comfortable with lighter spec since @tristan is the builder. Moved to Build.

Key decisions

  • Dashboard intentionally unstyled to keep feedback on process, not pixels
  • SOUL.md added to shape scope for bot personality
  • Daily message archive promoted from stretch to core scope (per @dan)
  • Thread handling for RAILS needs different approach than generic bots (threads are part of the same project conversation)

Blockers

  • Contextone bug blocking hosted web dashboard URLs (waiting on @piotr)
  • File handling only supports images — non-image files dropped on the floor

What's next

  • @tristan building thread handling
  • Web dashboard blocked on contextone fix
  • @dan's nice-to-haves: daily slack message archive + daily cron digest
DateSummary
2026-04-15 Backfill skill shipped + GG backfilled, dashboard UI improvements, multi-source sync gap identified.
2026-04-14 WIP stage doc process adopted, Notion vs git debate with @kris, dashboard feature wishlist captured.
2026-04-13 Doc format discussed (staying git md), product questions parking for Expedite, PR #3 merged.
2026-04-12 Daily digests replaced context.md, stage defs added, Execute split into Build+Expedite, all tests fixed.
2026-04-07 SOUL.md emptied, dashboard unblocked, CLAUDE.md hardened, daily digest structure proposed and PR'd.
2026-04-06 Project created, shaped, and moved to Build in one day. Dashboard blocked on contextone bug.