Project Operations
Purpose
Use this page when the task is about operating the project as a whole rather than editing one small feature in isolation. This page is for:- leads and analysts who need to understand how the project is organized
- engineers who need to know which repo or runtime surface to change
- AI agents that need a practical operating model before they edit code, docs, or deployment assets
Project Surfaces
OneLink currently spans these operational surfaces:- application code repository:
onelink - documentation repository mounted as
onelink/docs - versioned project skill source under
onelink/.codex/skills - local Codex skill library under
$CODEX_HOME/skills - deployment assets under
deployment/,docker/, anddocker-compose*.yaml - API contract surfaces under
swagger/andonelink/docs/openapi/
Local Runtime Modes
Dev Lite
Default for most work:- Rails server
- Vite dev server
- no Sidekiq
pnpm dev:liteforeman start -f ./Procfile.dev-lite./bin/dev-lite-restart
- you are editing controller/model/service happy paths
- you are editing most dashboard/frontend work
- the task does not depend on async jobs or background processing
Full Dev
Use when jobs or async flows matter:pnpm devovermind start -f ./Procfile.dev
- Sidekiq
- the full async runtime expected by job-driven flows
Docker-Based Local Runtime
Use when you need a containerized local environment or to check compose-based behavior. Relevant files:docker-compose.yamldocker-compose.test.yamldocker-compose.production.yamldocker/dockerfiles/*
Primary Operational Files
These files control most project behavior:Procfile.dev-liteProcfile.devconfig/routes.rbconfig/features.ymlconfig/agents/tools.ymlconfig/initializers/*vite.config.mtstailwind.config.jsconfig/sidekiq.ymlconfig/puma.rbdocker-compose.yamldeployment/setup_20.04.shdeployment/nginx_chatwoot.conf
Git and Delivery Model
Main Application Repo
Use these rules:- base branch:
onelink-main - writable remote:
origin - upstream sync source:
upstream - push over SSH
Documentation Repo
Docs are a separate Git repository mounted as a submodule:- content lives in
onelink-docs - the app repo stores only the
docssubmodule pointer
- commit docs content in
onelink/docs - push the docs repo
- update the submodule pointer in the parent
onelinkrepo if needed
Skill Source
Skills now have two locations:- versioned project source in
onelink/.codex/skills - installed runtime copy in
$CODEX_HOME/skills
- edit and commit the versioned project copy in
onelink/.codex/skills - sync to the installed Codex copy with
./.codex/scripts/sync-skills.sh to-codex-home - if a local runtime skill changed first, sync it back with
./.codex/scripts/sync-skills.sh from-codex-home
Upstream Sync
Use dedicated sync branches when bringing upstream changes into the fork. Do not treatdevelop in this fork as the product base branch.
Use Upstream Sync for the exact process.
API and Documentation Pipeline
The API documentation pipeline has two connected layers:swagger/- source fragments and generated OpenAPI JSON in the main app repo
onelink/docs/openapi/- local OpenAPI files consumed by Mintlify
- change the API behavior
- update
swagger/ - run
bundle exec rake swagger:build - from
onelink/docs, run./scripts/sync-openapi-from-onelink.sh - commit docs-side OpenAPI changes in
onelink-docs
Deployment Surfaces
OneLink currently has multiple deployment-related surfaces:deployment/- VM/systemd/nginx install and upgrade assets
docker-compose*.yaml- local and production-like container setups
docs/self-hosted/- human-readable deployment and operational docs
- environment config:
config/environments/*.rb.envconfig/app.ymlconfig/storage.yml
Human and Agent Coordination
For coordinated work across people and AI agents:- classify the task first:
- backend
- frontend
- api
- integrations
- captain/ai
- docs
- deployment
- gitops/upstream
- load the matching docs pages before editing
- use the specialized skill for that surface when available
- keep repo boundaries clean:
- app code commit in
onelink - docs content commit in
onelink-docs - versioned skill changes commit in
onelink/.codex/skills
- app code commit in
If the task is mainly GitHub, branch, or upstream-sync work
- use the
onelink-gitopsskill - use
onelink-mainas the base branch - use
sync/...branches only for upstream intake
Quick Decision Rules
If the task changes runtime behavior
- edit app code in
onelink - add or update specs where appropriate
- update docs if product behavior or architecture meaning changed
If the task changes API contracts
- update controllers/builders/specs
- update
swagger/ - sync docs OpenAPI files
If the task changes only docs
- edit
onelink/docs - commit inside the docs repo first
If the task changes how the project is run or deployed
- edit deployment/runtime config
- update self-hosted docs and project operations docs if the operator workflow changed