Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
165 changes: 165 additions & 0 deletions .bos/sync-snapshot.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
{
"timestamp": "2026-10-29T08:27:53.915Z",
"files": {
".env.example": "1cc4e7e699b4c2b6",
".gitignore": "fc2a48f144174f1b",
"biome.json": "42eb28ab6de9b2d8",
"package.json": "0dc4cb05afd8f672",
".github/workflows/ci.yml": "581816dd542d83e8",
".github/workflows/deploy.yml": "e29ad815b9e155c3",
".github/workflows/staging.yml": "a7abb67acc4c9fa9",
"ui/package.json": "e06e1fe68d4fd498",
"ui/postcss.config.mjs": "2e8e873280319959",
"ui/tsconfig.json": "6ee6f7d245baee21",
"api/package.json": "72df7063cbb3c5ea",
"api/plugin.dev.ts": "ce4813efdb2bb94d",
"api/tsconfig.json": "55f76a4f6877cf53",
"api/drizzle.config.ts": "e6021f35b5691c2f",
"api/src/global.d.ts": "6375a54827bfd7cf",
"api/tests/types.d.ts": "6bcecd32da4ef4a7",
"skills-lock.json": "0e08d2ce05877269",
"docs/agents/triage-labels.md": "4f53c9b40ce2651e",
"docs/agents/testing.md": "d44d3e87196962ae",
"docs/agents/runtime-map.md": "5af51a0856be21ea",
"docs/agents/issue-tracker.md": "a56eda57327656d5",
"docs/agents/how-it-fits.md": "cf9f9512c165a5cf",
"docs/agents/effect-patterns.md": "6b702931629dc0fc",
"docs/agents/domain.md": "56fa9506a609cf9b",
"docs/agents/coding-standards.md": "8fb3f561ad967dda",
"docs/agents/change-placement.md": "c25987ba90c99667",
".agents/skills/writing-shape/SKILL.md": "f5e6c57bdd85178a",
".agents/skills/writing-for-agents/SKILL.md": "551adca942227b44",
".agents/skills/writing-for-agents/SKILL-MECHANICS.md": "c768e6307c7c1072",
".agents/skills/writing-fragments/SKILL.md": "298b0edd23df2291",
".agents/skills/wizard/template.sh": "33cbe9dfb1d0e918",
".agents/skills/wizard/SKILL.md": "bdf31d48211ea559",
".agents/skills/writing-beats/SKILL.md": "a96abafa2372eede",
".agents/skills/wait-what/SKILL.md": "d961bb37defd975c",
".agents/skills/to-tickets/SKILL.md": "5c9fba69845c2519",
".agents/skills/triage/SKILL.md": "917b0baf74be583e",
".agents/skills/triage/OUT-OF-SCOPE.md": "1fbf9b432130c638",
".agents/skills/triage/AGENT-BRIEF.md": "7f5f87fed3033df1",
".agents/skills/wayfinder/SKILL.md": "fee6e1d0c50f0e73",
".agents/skills/to-spec/SKILL.md": "43ad9cf318e5e7d3",
".agents/skills/teach/SKILL.md": "a32df9dcdfc0c4fd",
".agents/skills/teach/RESOURCES-FORMAT.md": "e9cacf34026e11a8",
".agents/skills/teach/MISSION-FORMAT.md": "8cacbb3c0644d3ae",
".agents/skills/teach/LEARNING-RECORD-FORMAT.md": "701fa34b6748aa89",
".agents/skills/teach/GLOSSARY-FORMAT.md": "9b99859ec2843766",
".agents/skills/to-questionnaire/SKILL.md": "b5eb929842ee0e93",
".agents/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs": "3c4973bec69f73b2",
".agents/skills/setup-ts-deep-modules/SKILL.md": "29acca66ac99d453",
".agents/skills/setup-pre-commit/SKILL.md": "c9819d7f1e3b1980",
".agents/skills/tdd/tests.md": "859f9e592c188fda",
".agents/skills/tdd/mocking.md": "3ceb807fdf4a47d6",
".agents/skills/tdd/SKILL.md": "93ea419b76e9caaf",
".agents/skills/setup-matt-pocock-skills/triage-labels.md": "4f53c9b40ce2651e",
".agents/skills/setup-matt-pocock-skills/issue-tracker-local.md": "7dcda20a2eb4bdc8",
".agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md": "ea175f73d193b3f5",
".agents/skills/setup-matt-pocock-skills/issue-tracker-github.md": "afd6852a80185217",
".agents/skills/setup-matt-pocock-skills/domain.md": "593a7042218689f1",
".agents/skills/setup-matt-pocock-skills/SKILL.md": "9a0c21694be19fa3",
".agents/skills/scaffold-exercises/SKILL.md": "75f5c9d771606fb9",
".agents/skills/review-animations/STANDARDS.md": "e7d3605034acda54",
".agents/skills/review-animations/SKILL.md": "6ff590d29e436766",
".agents/skills/research/SKILL.md": "985569f15739c713",
".agents/skills/retro/SKILL.md": "33fbc28568e3146f",
".agents/skills/pick-ui-library/SKILL.md": "675fdce308683256",
".agents/skills/pr/SKILL.md": "ab63f1cf78647389",
".agents/skills/pr/CREDITS.md": "a7a087127665d729",
".agents/skills/prototype/UI.md": "723211e878acbc7b",
".agents/skills/prototype/SKILL.md": "714de632d116bb73",
".agents/skills/prototype/LOGIC.md": "f61c7d249e786a79",
".agents/skills/migrate-to-shoehorn/SKILL.md": "de4da4c11d924fac",
".agents/skills/loop-me/SKILL.md": "e44d1cc3e760fb86",
".agents/skills/improve-codebase-architecture/SKILL.md": "552240a5ab5cec6b",
".agents/skills/improve-codebase-architecture/HTML-REPORT.md": "581e8bb5a521e46b",
".agents/skills/improve-animations/SKILL.md": "7396244746443347",
".agents/skills/improve-animations/PLAN-TEMPLATE.md": "0a08ac8e23fd2082",
".agents/skills/improve-animations/AUDIT.md": "551c8473e20e5f47",
".agents/skills/improve/SKILL.md": "a9f6689762d307db",
".agents/skills/implement-spec/SKILL.md": "7a22dd2e60b8fcec",
".agents/skills/mobile-native/SKILL.md": "888b7651d66d66db",
".agents/skills/implement/SKILL.md": "6d3fd9e83b8f36e5",
".agents/skills/grilling/SKILL.md": "10ff989e7498b23b",
".agents/skills/handoff/SKILL.md": "7c62de979fdc7ac3",
".agents/skills/grill-with-docs/SKILL.md": "7de372c13488f1ee",
".agents/skills/grill-me/SKILL.md": "caaf8b8de1684f96",
".agents/skills/find-animation-opportunities/SKILL.md": "d52a377819b84a71",
".agents/skills/git-guardrails-claude-code/SKILL.md": "69b291d655626a01",
".agents/skills/everything-dev-app/SKILL.md": "cbb443391366c61b",
".agents/skills/emil-design-eng/SKILL.md": "ffbe68e6007fb42c",
".agents/skills/domain-modeling/SKILL.md": "7b925d7b1e341a2e",
".agents/skills/domain-modeling/GLOSSARY-FORMAT.md": "21dcc40cdec8e151",
".agents/skills/domain-modeling/ADR-FORMAT.md": "944c92aa790e8fbd",
".agents/skills/fastkv-registry/SKILL.md": "5ccaf2bc324a226d",
".agents/skills/diagnosing-bugs/SKILL.md": "9168404abda0967a",
".agents/skills/codebase-design/SKILL.md": "2c20617f87ec8af6",
".agents/skills/codebase-design/DESIGN-IT-TWICE.md": "52b52e75655a27ae",
".agents/skills/codebase-design/DEEPENING.md": "f3dd099ce99289bd",
".agents/skills/code-review/SKILL.md": "47f4e52c21694def",
".agents/skills/break-ui/SKILL.md": "e7eec1d70ac56a04",
".agents/skills/break-ui/CATALOG.md": "7358efcc6bb48e35",
".agents/skills/ask-matt/SKILL.md": "32b3c71d6dbb5a7c",
".agents/skills/ask-matt/PHASE-BOUNDARIES.md": "a8aa20158609ef39",
".agents/skills/apple-design/SKILL.md": "77bb63b7043bb93a",
".agents/skills/ask-sonner/SKILL.md": "39f3ee185b3aa2cf",
".agents/skills/ask-sonner/API.md": "4bb06f482c575752",
".agents/skills/claude-handoff/SKILL.md": "6738e8b7c7899ea0",
".agents/skills/animation-vocabulary/SKILL.md": "40d2b27adfdfeb05",
".agents/skills/animation-performance/SKILL.md": "ceb9dd3fe9126158",
".agents/skills/animate/SKILL.md": "b8ede161270458e6",
".agents/skills/animate/RECIPES.md": "21ff63d84391db8d",
".agents/skills/writing-for-agents/agents/openai.yaml": "eacb24b2a618cfb8",
".agents/skills/writing-shape/agents/openai.yaml": "56de45430e23104f",
".agents/skills/writing-fragments/agents/openai.yaml": "81167f25ee8ea1bb",
".agents/skills/wizard/agents/openai.yaml": "98f44d682d58e262",
".agents/skills/writing-beats/agents/openai.yaml": "ddaef01da61d8e3c",
".agents/skills/wait-what/agents/openai.yaml": "b41faadf741d51e4",
".agents/skills/to-tickets/agents/openai.yaml": "21bc6215fffcd761",
".agents/skills/triage/agents/openai.yaml": "2e683717720cf456",
".agents/skills/wayfinder/agents/openai.yaml": "88bc81a11a6d52ac",
".agents/skills/to-spec/agents/openai.yaml": "1c5b4d1e3d8e5228",
".agents/skills/teach/agents/openai.yaml": "5856f3ae8aec742f",
".agents/skills/to-questionnaire/agents/openai.yaml": "9e8a06c38c8842ee",
".agents/skills/setup-ts-deep-modules/agents/openai.yaml": "159f680217d50747",
".agents/skills/setup-pre-commit/agents/openai.yaml": "acf41db398c5c43a",
".agents/skills/tdd/agents/openai.yaml": "ea6f01cf1b8c06a4",
".agents/skills/setup-matt-pocock-skills/agents/openai.yaml": "9527de0110541c45",
".agents/skills/scaffold-exercises/agents/openai.yaml": "525b33913340bea7",
".agents/skills/research/agents/openai.yaml": "9b4c470d63221c1f",
".agents/skills/retro/agents/openai.yaml": "cb6fb9d7e6b4be59",
".agents/skills/pr/agents/openai.yaml": "2295b586624db4ef",
".agents/skills/prototype/agents/openai.yaml": "5af65e43ab41a350",
".agents/skills/migrate-to-shoehorn/agents/openai.yaml": "395c2db852e66a19",
".agents/skills/loop-me/agents/openai.yaml": "b66fa10079957051",
".agents/skills/improve-codebase-architecture/agents/openai.yaml": "c8cb20f68ebf0edb",
".agents/skills/improve/references/plan-template.md": "5782493c47031564",
".agents/skills/improve/references/closing-the-loop.md": "ce8c52916ddf659b",
".agents/skills/improve/references/audit-playbook.md": "587c1b927070f3c2",
".agents/skills/implement-spec/agents/openai.yaml": "fd41efb42c60c963",
".agents/skills/implement/agents/openai.yaml": "8970a8596ade0c28",
".agents/skills/grilling/agents/openai.yaml": "1411d7df7d99b7e6",
".agents/skills/handoff/agents/openai.yaml": "5c479fd562c69185",
".agents/skills/grill-with-docs/agents/openai.yaml": "94cd0ab161fb468a",
".agents/skills/grill-me/agents/openai.yaml": "c061e39c3e0f9d86",
".agents/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh": "234922b83c0a1737",
".agents/skills/git-guardrails-claude-code/agents/openai.yaml": "d53cd783fc0ac208",
".agents/skills/domain-modeling/agents/openai.yaml": "f6bf2aa996c6e6f5",
".agents/skills/diagnosing-bugs/scripts/hitl-loop.template.sh": "35103539fc36873e",
".agents/skills/codebase-design/agents/openai.yaml": "edebc9e4fcfe1021",
".agents/skills/diagnosing-bugs/agents/openai.yaml": "3e430dbe4334a875",
".agents/skills/code-review/agents/openai.yaml": "8229ca854e11dc8e",
".agents/skills/ask-matt/agents/openai.yaml": "bdffbc5a0a99ed1b",
".agents/skills/claude-handoff/agents/openai.yaml": "2308a67297886463",
"plugins/projects/src/global.d.ts": "6375a54827bfd7cf",
"plugins/builders/src/global.d.ts": "6375a54827bfd7cf",
"plugins/projects/tests/types.d.ts": "e5e6ac86cef12452",
"plugins/builders/tests/types.d.ts": "e5e6ac86cef12452",
"plugins/projects/drizzle.config.ts": "e6021f35b5691c2f",
"plugins/builders/drizzle.config.ts": "e6021f35b5691c2f",
"plugins/projects/tsconfig.json": "55f76a4f6877cf53",
"plugins/builders/tsconfig.json": "55f76a4f6877cf53",
"AGENTS.md": "31a5b680bebfbc3c"
}
}
2 changes: 1 addition & 1 deletion .changeset/work-orders.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
"ui": minor
---

Agencies run work orders end to end under Admin → Work orders, replacing the private work-order tracking for platform admins. A work order names a builder, a Project, a period, GitHub repositories and a budget; it is offered for signature in MultiAgency, through Documenso or through Google Docs and Drive, and each party only sees its own signing link. Once active, the builder files compensation requests backed by GitHub evidence; the Agency approves them (or approves trusted builders automatically after a veto window) and pays them through a DAO proposal or automatically in NEAR through a payout agent on NEAR Intents. The payout agent's owner signs every rule and permission change with their wallet; MultiAgency verifies those signatures before relaying them, and reminds managers before the permission expires. Withdrawn, changed or declined offers cancel their Documenso envelope. Requires the work-order and payout secrets listed in `bos.config.json`; `PAYOUTS_OWNER_PRIVATE_KEY` is no longer used.
Agencies run work orders end to end under Admin → Work orders, replacing the private work-order tracking for platform admins. A work order names a builder, a Project, a period, GitHub repositories and a budget; it is offered for signature in MultiAgency, through Documenso or through Google Docs and Drive, and each party only sees its own signing link. Once active, the builder files compensation requests backed by GitHub evidence; the Agency approves them (or approves trusted builders automatically after a veto window) and pays them through a DAO proposal or automatically in NEAR through a payout agent on NEAR Intents. The payout agent's owner signs every rule and permission change with their wallet; MultiAgency verifies those signatures before relaying them, and reminds managers before the permission expires. Withdrawn, changed or declined offers cancel their Documenso envelope. Requires the work-order and payout secrets listed in `bos.app.ts`; `PAYOUTS_OWNER_PRIVATE_KEY` is no longer used.
32 changes: 11 additions & 21 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
# FRAMEWORK-OWNED — reconciled from the parent template by `bos upgrade`.
# Local edits are allowed: on the next upgrade the template version wins and your
# copy is backed up under `.bos/sync-backup/`. To make a change permanent, file an
# issue: https://github.com/NEARBuilders/everything-dev/issues

# Generated from configured bos secrets
# Update values as needed for your local environment

# app.host
CORS_ORIGIN=http://localhost:3000
TENANT_WHITELIST=
ALLOW_OVERRIDE=
ALLOW_UNTRUSTED_SSR=
CSP_STRICT=

# app.api
API_DATABASE_URL=postgres://everythingdev:everythingdev@localhost:5432/api_db
AUTH_DATABASE_URL=postgres://everythingdev:everythingdev@localhost:5433/auth_db
# Leave empty to run dev on ephemeral pglite; set a postgres:// URL to opt into compose Postgres.
API_DATABASE_URL=
BETTER_AUTH_SECRET=
# Leave empty to run dev on ephemeral pglite; set a postgres:// URL to opt into compose Postgres.
AUTH_DATABASE_URL=
APPLICATIONS_WEBHOOK_URL=
CONTACT_FORM_WEBHOOK_URL=
CONTACT_FORM_WEBHOOK_SECRET=
Expand All @@ -22,9 +26,6 @@ GITHUB_TOKEN=
WORK_ORDERS_RUN_SECRET=
ANTHROPIC_API_KEY=
GOOGLE_SERVICE_ACCOUNT_JSON=
# Optional: "Connect Google Drive" per agency (OAuth, drive.file scope). Redirect URI to register:
# <APP_ORIGIN>/api/work-orders/google/callback. Tokens are encrypted with GOOGLE_TOKENS_SECRET_KEY,
# or PAYOUTS_SECRET_KEY when it isn't set.
GOOGLE_OAUTH_CLIENT_ID=
GOOGLE_OAUTH_CLIENT_SECRET=
GOOGLE_PICKER_API_KEY=
Expand All @@ -33,29 +34,18 @@ GOOGLE_STARTER_TEMPLATE_ID=
GOOGLE_TOKENS_SECRET_KEY=
NEAR_INTENTS_AGENT_API_KEY=
NEAR_INTENTS_AGENT_API_URL=
# Optional: Documenso e-signature. When set, "Offer to builder" sends the work order to Documenso,
# which emails the builder, then the representative, a signing request.
DOCUMENSO_API_KEY=
DOCUMENSO_API_URL=https://app.documenso.com
DOCUMENSO_API_URL=
PAYOUTS_SECRET_KEY=

# app.auth
NEAR_SUB_ACCOUNT_PARENT_KEY_MAINNET=
NEAR_SUB_ACCOUNT_PARENT_KEY_TESTNET=
BETTER_AUTH_SECRET=
GITHUB_CLIENT_SECRET=
GOOGLE_CLIENT_SECRET=
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_PHONE_NUMBER=
NEAR_RELAYER_PRIVATE_KEY_MAINNET=
NEAR_RELAYER_PRIVATE_KEY_TESTNET=

# plugins.projects
PROJECTS_DATABASE_URL=postgres://everythingdev:everythingdev@localhost:5435/projects_db

# plugins.builders
BUILDERS_DATABASE_URL=postgres://everythingdev:everythingdev@localhost:5434/builders_db
REGISTRY_TOKEN_TESTNET=
REGISTRY_TOKEN_MAINNET=

14 changes: 14 additions & 0 deletions .env.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated test environment — loaded by test suites instead of .env
# Test databases run on dedicated *-test docker-compose services

# app.api
API_DATABASE_URL=postgres://everythingdev:everythingdev@localhost:5434/api_test_db
BETTER_AUTH_SECRET=regression-test-secret-do-not-use-in-production
AUTH_DATABASE_URL=postgres://everythingdev:everythingdev@localhost:5435/auth_test_db

# plugins.projects
PROJECTS_DATABASE_URL=postgres://everythingdev:everythingdev@localhost:5434/api_test_db

# plugins.builders
BUILDERS_DATABASE_URL=postgres://everythingdev:everythingdev@localhost:5434/api_test_db

1 change: 0 additions & 1 deletion .gitattributes

This file was deleted.

30 changes: 30 additions & 0 deletions .github/workflows/ci-child.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Child CI Jobs

# CHILD-OWNED — bos upgrade never rewrites this file (#538). This repo's extra
# CI jobs live here. `ci.yml` (framework-owned) calls this workflow in parallel
# with the pinned reusable `ci` call and includes its result in the merge gate.

on:
workflow_call:

permissions:
contents: read

jobs:
workflow-guard:
name: Workflow guard
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0 (Node 24)

- name: Setup Node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: "24"

- name: Test the guard
run: node --test scripts/check-workflows.test.ts

- name: Check workflows (bos upgrade rewrites ci.yml and staging.yml)
run: node scripts/check-workflows.ts
Loading
Loading