Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
44b2eef
fix(gastown): harden the polecat work protocol against races, duplica…
sjarmak Jul 9, 2026
9b4df3e
fix: route shipped beads commands through gc
Jul 13, 2026
1520143
docs: keep gc bd examples readable
Jul 13, 2026
c8968f6
Merge pull request #199 from gastownhall/fix/all-shipped-gc-bd-main
julianknutsen Jul 13, 2026
58ce6a2
fix: harden gc bd migration guard
Jul 13, 2026
04fc38f
Merge pull request #201 from gastownhall/fix/gc-bd-review-corrections
julianknutsen Jul 13, 2026
4c2e982
refactor(gascity): deduplicate role worker prompts
sarendipitee Jul 10, 2026
d5168f9
fix(gascity): preserve compact worker claim behavior
julianknutsen Jul 15, 2026
56d07c5
Merge pull request #204 from sarendipitee/feat/compact-role-claim-pro…
julianknutsen Jul 15, 2026
287e0de
docs(slack-full): design Slack company rooms with durable admission
Jul 17, 2026
040918f
feat(slack-full): company rooms Phase 1 — durable admission, director…
Jul 17, 2026
d2f02fb
docs(slack-full): pin the Phase 2 delegation contract + golden fixtures
Jul 17, 2026
21e8e03
feat(slack-full): company rooms Phase 2 — identities, delegation, res…
Jul 17, 2026
9b5a18d
docs(slack-full): pin the Phase 3 synthesis/replay/redrive/acks contract
Jul 17, 2026
287ae24
feat(slack-full): company rooms Phase 3 — synthesis, ordered replay, …
Jul 17, 2026
0a2d4bf
feat(slack-full): company-rooms agent contract in the slack-v0 fragment
Jul 17, 2026
ba6f198
feat(slack-full): city-qualified company bindings for the multi-city org
Jul 18, 2026
f4d135d
fix(slack-full): accept gc's dot/dunder session-name aliasing in comp…
Jul 18, 2026
6854b30
fix(slack-full): scope the session-reuse bind guard to (session, city)
Jul 18, 2026
252dd73
docs(slack): Phase 4 per-agent DM spec (v2, post-review)
Jul 18, 2026
5c0a9fd
feat(slack): Phase 4 — per-agent DMs
Jul 18, 2026
5bcd0c0
fix(slack): post DM replies flat unless the human threaded first
Jul 18, 2026
7ef67da
docs(slack): Phase 5 ledger readiness assessment; correct state mapping
Jul 19, 2026
5291697
docs(slack): Phase 4b group-DM (mpim) spec v2, post-review
Jul 19, 2026
bfc0e7f
feat(slack): receipt body-store split (Phase 5 readiness increment)
Jul 19, 2026
b2d1b92
feat(slack): Phase 4b — group DMs (mpim), mention-only
Jul 19, 2026
936a47e
test(slack): replace synthetic mpim wire fixture with live capture
Jul 19, 2026
8f2122e
feat(slack): self-healing delivery for dead/cold session targets (P0)
Jul 19, 2026
0ee4dd3
test(slack): pin mpim wire test to the live capture's real identities
Jul 19, 2026
411e6e0
fix(slack): wake sleeping sessions before delivery (silent-queue fix)
Jul 20, 2026
35ac3a9
feat(slack): snippet hydration + delivered-asleep boot escalation
Jul 21, 2026
f9cbeb5
feat(slack): live-membership mention-eligibility overlay
Jul 21, 2026
307143c
fix(slack): stop orphaning stale exact sessions
Jul 22, 2026
0a7f2d8
feat(slack): keep agents ambient in active threads
Jul 22, 2026
4ecd953
feat(slack): gate ambient replies by relevance
Jul 22, 2026
e6a3d14
feat(slack): enforce fleet response contract per turn
Jul 22, 2026
22a878e
fix(slack): bind replies to immutable turns
Jul 22, 2026
12c0e6c
ci: route pack inference through manifold
Jul 19, 2026
f4381e5
fix: locate RC implementation worktrees in inference gate
Jul 20, 2026
f97094c
fix: validate RC build output in rig root
Jul 20, 2026
7a268ed
fix: require Kimi model proof in inference gates
Jul 21, 2026
099a682
test(nightly): bound supported-pack RC inference gates
Jul 22, 2026
b41362c
test(nightly): keep beads binary override routing-safe
Jul 22, 2026
f2e18f9
test(nightly): keep manual smoke subsets precise
Jul 22, 2026
a1dc30d
test(nightly): accept released Beads archive metadata
Jul 22, 2026
bfe027e
fix(ci): exclude volatile event queues from diagnostics
Jul 22, 2026
7156033
test(nightly): keep smoke acknowledgment on one line
Jul 22, 2026
8ce3a2b
fix(nightly): include bead comments in smoke proof
Jul 22, 2026
7be3d10
Merge pull request #224 from gastownhall/test/bounded-supported-pack-…
julianknutsen Jul 22, 2026
b7c2294
fix(slack): await terminal session message result
Jul 22, 2026
40198a4
fix(slack): wake canonical named sessions safely
Jul 22, 2026
636fdfa
fix(registry): fail closed on unverifiable registry.toml sources (#229)
julianknutsen Jul 24, 2026
f69ec02
feat(registry): publish bmad, compound-engineering, gstack and superp…
julianknutsen Jul 24, 2026
1ce71a0
test(slack): de-rot synthesis-gate fixtures against the pruner clock
Jul 25, 2026
ffcb029
Merge pull request #233 from gastownhall/worktree-slack
julianknutsen Jul 25, 2026
6ceab57
feat(registry): publish runtime-cloudflare 0.1.0 (#236)
julianknutsen Jul 25, 2026
ed8c070
feat(gastown): detect witnesses whose patrol loop silently died (#237)
julianknutsen Jul 25, 2026
6373985
feat(profiler): adopt #158 as a first-party pack (#238)
julianknutsen Jul 25, 2026
6248292
feat(pr-review): add the incoming-PR adoption pack; fix two silent st…
sjarmak Aug 1, 2026
0b95742
feat(gascity): declare claimed source work on Observer runs (#259)
julianknutsen Aug 1, 2026
f382603
feat(oversight-rig): add portable executive status skill (#284)
sjarmak Aug 8, 2026
734a7be
fix(gascity/do-work): base worktree off fresh remote default branch, …
jeffora Aug 11, 2026
56016d5
fix(checks): route molecule-member reads through gc ready, not a grap…
julianknutsen Aug 13, 2026
5d2a9d0
reconcile: land the live worktree's real fixes, drop the protocol reg…
julianknutsen Aug 14, 2026
9af76e8
fix(gastown): call bd with flags that exist, and pin the lint finding…
sjarmak Aug 17, 2026
fffa8fd
fix(packs): resolve the default branch from the local ref, not the ne…
sjarmak Aug 17, 2026
623baf9
fix(gastown): stop the deacon paging CRITICAL for a city with no Dolt…
AJBcoding Aug 17, 2026
18beb17
docs(gascity): clarify formula entrypoints by SDLC phase (#326)
csells Aug 17, 2026
992b1a3
fix(tmux): don't force copy-mode over alternate-screen apps ([0/0] sc…
outdoorsea Aug 17, 2026
a21effc
fix(gastown): bound and single-flight status-line.sh store queries (#…
atbrace Aug 17, 2026
9ab8a75
feat(gascity): resolve derived-pack build schemas via GC_BUILD_SCHEMA…
deltaag Aug 17, 2026
2d3e8c7
fix(gastown): dispatch witness heartbeat through pack command (#243)
jm2 Aug 17, 2026
4d0211e
fix(gastown): make prime prompts city-generic (#265)
ckumar1 Aug 17, 2026
9bf51d3
test(gastown-lint): key the lint waiver on path and message, not line…
sjarmak Aug 17, 2026
28e2e84
Test the five maintained packs against a running gc (#335)
sjarmak Aug 18, 2026
aab8030
pr-pipeline: refuse an oversized PR review before spending, non-retry…
sjarmak Aug 23, 2026
9f98ea4
fix(claim): verify the claim against the session's own identity SET, …
julianknutsen Aug 27, 2026
7f597fc
fix(gastown): patrol pour+assign must set --status=in_progress or wis…
Aug 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
46 changes: 44 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,52 @@ jobs:
run: python3 -m pip install PyYAML pytest jsonschema

- name: Validate registry
run: python3 validate_registry.py
# --require-git: without git, no commit or content-hash verification runs at
# all, so a missing worktree must fail rather than silently downgrade this to
# a format-only check. (checkout above uses fetch-depth: 0, as it must.)
run: python3 validate_registry.py --require-git

- name: Run Python pack tests
run: python3 -m pytest tests contributing/tests gascity/tests discord/tests github/tests slack-full/tests slack-channel/tests pr-pipeline/tests -q
run: python3 -m pytest tests contributing/tests gascity/tests discord/tests github/tests oversight-rig/tests slack-full/tests slack-channel/tests pr-pipeline/tests profiler/tests -q

- name: Lint and exercise shared role prompt composition
run: |
go install github.com/gastownhall/gascity/cmd/gc@latest
GC_BIN="$(go env GOPATH)/bin/gc"
# oversight-rig is deliberately absent. Under the gc this step
# installs it reports four bd-unknown-flag findings for `gc bd list
# --rig`, which is valid: `gc bd` strips --rig in extractBdScopeFlags
# before forwarding, and the scanner validated against bare bd's
# manifest alone. Same upstream defect as the `pre-5220` section of
# tests/gastown_lint_upstream_defects.txt, fixed by gascity 7724983de
# and not in v1.4.1. Add oversight-rig here in the same change that
# deletes that section. A dev gc already reports zero for it, so
# pinning them would waive findings most contributors never see.
# Refute: gc lint oversight-rig (0 findings on main, 4 on v1.4.1)
for pack in gascity gascity/roles bmad compound-engineering gstack superpowers profiler \
pr-pipeline slack-channel slack-full slack-mini; do
"$GC_BIN" lint "$pack"
done
GC_TEST_BIN="$GC_BIN" python3 -m pytest tests/test_gc_role_prompt_integration.py -q

# Installed, not parsed. `gc lint` above reads each pack on its own and
# the per-pack suites read their own TOML; neither can say what gc does
# when a city loads the pack, which is where a user meets it. pr-pipeline
# linted clean for months while putting a deprecation warning into every
# importing city's `gc doctor`.
- name: Stand each maintained pack up against gc
run: |
GC_TEST_BIN="$(go env GOPATH)/bin/gc" \
python3 -m pytest tests/test_maintained_packs_live_gc.py -q

# gastown is not in the lint loop above because seven of its findings are
# defects in gc's linter rather than in the pack; see
# tests/gastown_lint_upstream_defects.txt. This pins the finding set
# instead, so a new one fails and a fixed one has to be un-waived.
- name: Check gastown lint findings against the pinned set
run: |
GC_TEST_BIN="$(go env GOPATH)/bin/gc" \
python3 -m pytest tests/test_gastown_lint_findings.py -q

- name: Run Gastown shell tests
run: |
Expand Down
30 changes: 17 additions & 13 deletions .github/workflows/gascity-pack-inference.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,19 @@ permissions:
contents: read

env:
DOLT_VERSION: "2.1.0"
BD_VERSION: "v1.0.4"
DOLT_VERSION: "2.1.7"
BD_VERSION: "v1.1.0"
CLAUDE_VERSION: "2.1.123"
ANTHROPIC_BASE_URL: https://ollama.com
ANTHROPIC_API_KEY: ${{ secrets.OLLAMA_API_KEY }}
ANTHROPIC_AUTH_TOKEN: ${{ secrets.OLLAMA_API_KEY }}
# Claude Code appends /v1/messages itself, so this base URL intentionally
# does not end in /v1.
ANTHROPIC_BASE_URL: https://works.gascity.com/manifold-api
ANTHROPIC_AUTH_TOKEN: ${{ secrets.MANIFOLD_AUTH_TOKEN }}
OLLAMA_API_KEY: ${{ secrets.OLLAMA_API_KEY }}
ANTHROPIC_DEFAULT_HAIKU_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_OLLAMA_HAIKU_MODEL }}
ANTHROPIC_DEFAULT_SONNET_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_OLLAMA_SONNET_MODEL }}
ANTHROPIC_DEFAULT_OPUS_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_OLLAMA_OPUS_MODEL }}
CLAUDE_CODE_SUBAGENT_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_OLLAMA_SUBAGENT_MODEL }}
ANTHROPIC_DEFAULT_HAIKU_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_MANIFOLD_HAIKU_MODEL }}
ANTHROPIC_DEFAULT_SONNET_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_MANIFOLD_SONNET_MODEL }}
ANTHROPIC_DEFAULT_OPUS_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_MANIFOLD_OPUS_MODEL }}
CLAUDE_CODE_SUBAGENT_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_MANIFOLD_SUBAGENT_MODEL }}
GC_INFERENCE_EXPECTED_MODEL: kimi-k2.7-code
CLAUDE_CODE_EFFORT_LEVEL: auto
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1"

Expand Down Expand Up @@ -96,7 +98,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff
with:
go-version: "1.25.10"
go-version: "1.26.5"

- name: Set up Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
Expand Down Expand Up @@ -126,20 +128,22 @@ jobs:
- name: Run inference runner unit tests
run: python3 -m pytest tests/test_gascity_pack_inference_gate.py -q

- name: Validate Ollama Claude configuration
- name: Validate Manifold Claude configuration
run: |
test -n "$OLLAMA_API_KEY" || { echo "Missing OLLAMA_API_KEY GitHub secret" >&2; exit 1; }
test -n "$ANTHROPIC_API_KEY" || { echo "ANTHROPIC_API_KEY resolved empty" >&2; exit 1; }
test -n "$ANTHROPIC_AUTH_TOKEN" || { echo "ANTHROPIC_AUTH_TOKEN resolved empty" >&2; exit 1; }
test -n "$ANTHROPIC_AUTH_TOKEN" || { echo "Missing MANIFOLD_AUTH_TOKEN GitHub secret" >&2; exit 1; }
test "$ANTHROPIC_BASE_URL" = "https://works.gascity.com/manifold-api" || { echo "ANTHROPIC_BASE_URL must be the Manifold base URL without /v1" >&2; exit 1; }
test -n "$ANTHROPIC_DEFAULT_HAIKU_MODEL" || { echo "ANTHROPIC_DEFAULT_HAIKU_MODEL resolved empty" >&2; exit 1; }
test -n "$ANTHROPIC_DEFAULT_SONNET_MODEL" || { echo "ANTHROPIC_DEFAULT_SONNET_MODEL resolved empty" >&2; exit 1; }
test -n "$ANTHROPIC_DEFAULT_OPUS_MODEL" || { echo "ANTHROPIC_DEFAULT_OPUS_MODEL resolved empty" >&2; exit 1; }
test -n "$CLAUDE_CODE_SUBAGENT_MODEL" || { echo "CLAUDE_CODE_SUBAGENT_MODEL resolved empty" >&2; exit 1; }
test "$GC_INFERENCE_EXPECTED_MODEL" = "kimi-k2.7-code" || { echo "GC_INFERENCE_EXPECTED_MODEL must pin kimi-k2.7-code" >&2; exit 1; }
printf 'ANTHROPIC_BASE_URL=%s\n' "$ANTHROPIC_BASE_URL"
printf 'ANTHROPIC_DEFAULT_HAIKU_MODEL=%s\n' "$ANTHROPIC_DEFAULT_HAIKU_MODEL"
printf 'ANTHROPIC_DEFAULT_SONNET_MODEL=%s\n' "$ANTHROPIC_DEFAULT_SONNET_MODEL"
printf 'ANTHROPIC_DEFAULT_OPUS_MODEL=%s\n' "$ANTHROPIC_DEFAULT_OPUS_MODEL"
printf 'CLAUDE_CODE_SUBAGENT_MODEL=%s\n' "$CLAUDE_CODE_SUBAGENT_MODEL"
printf 'GC_INFERENCE_EXPECTED_MODEL=%s\n' "$GC_INFERENCE_EXPECTED_MODEL"

- name: Run supported pack inference gates
env:
Expand Down
113 changes: 56 additions & 57 deletions .github/workflows/supported-pack-nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,8 @@ on:
type: choice
options:
- all
- review
- build
- build-basic
- gastown-orchestration
- smoke
default: all
pack:
description: "Supported pack or group to exercise for manual subset checks."
Expand All @@ -39,6 +37,7 @@ on:
options:
- all-supported
- methodology
- model-smoke
- gascity
- superpowers
- compound-engineering
Expand All @@ -51,14 +50,14 @@ permissions:
contents: read

env:
DOLT_VERSION: "2.1.0"
BD_VERSION: "v1.0.4"
DOLT_VERSION: "2.1.7"
BD_VERSION: "v1.1.0"
CLAUDE_VERSION: "2.1.123"

jobs:
static-contracts:
name: static pack flow contracts
runs-on: blacksmith-32vcpu-ubuntu-2404
runs-on: blacksmith-2vcpu-ubuntu-2404
timeout-minutes: 15
steps:
- name: Check out gascity-packs
Expand All @@ -85,62 +84,47 @@ jobs:
timeout-minutes: ${{ matrix.timeout_minutes }}
strategy:
fail-fast: false
max-parallel: 1
# The managed Ollama pool has two credentials. Keep one real full E2E
# canary while running the direct pack smokes in bounded pairs.
max-parallel: 2
matrix:
include:
- pack: gascity
gate: review
timeout_minutes: 45
# Full E2E canary: artifacts, implementation worktree, and pytest.
gate: build
timeout_minutes: 30
gate_timeout: 30m
- pack: gascity
gate: build-basic
timeout_minutes: 110
gate_timeout: 90m
- pack: superpowers
gate: review
timeout_minutes: 60
gate_timeout: 45m
- pack: superpowers
gate: build
timeout_minutes: 120
gate_timeout: 100m
- pack: compound-engineering
gate: review
timeout_minutes: 60
gate_timeout: 45m
gate: smoke
timeout_minutes: 25
gate_timeout: 25m
- pack: compound-engineering
gate: build
timeout_minutes: 120
gate_timeout: 100m
- pack: gstack
gate: review
timeout_minutes: 75
gate_timeout: 60m
gate: smoke
timeout_minutes: 25
gate_timeout: 25m
- pack: gstack
gate: build
timeout_minutes: 150
gate_timeout: 130m
gate: smoke
timeout_minutes: 25
gate_timeout: 25m
- pack: bmad
gate: review
timeout_minutes: 60
gate_timeout: 45m
- pack: bmad
gate: build
timeout_minutes: 120
gate_timeout: 100m
gate: smoke
timeout_minutes: 25
gate_timeout: 25m
- pack: gastown
gate: gastown-orchestration
timeout_minutes: 120
gate_timeout: 110m
gate: smoke
timeout_minutes: 25
gate_timeout: 25m
env:
ANTHROPIC_BASE_URL: https://ollama.com
ANTHROPIC_API_KEY: ${{ secrets.OLLAMA_API_KEY }}
ANTHROPIC_AUTH_TOKEN: ${{ secrets.OLLAMA_API_KEY }}
# Claude Code appends /v1/messages itself, so this base URL intentionally
# does not end in /v1.
ANTHROPIC_BASE_URL: https://works.gascity.com/manifold-api
ANTHROPIC_AUTH_TOKEN: ${{ secrets.MANIFOLD_AUTH_TOKEN }}
OLLAMA_API_KEY: ${{ secrets.OLLAMA_API_KEY }}
ANTHROPIC_DEFAULT_HAIKU_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_OLLAMA_HAIKU_MODEL }}
ANTHROPIC_DEFAULT_SONNET_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_OLLAMA_SONNET_MODEL }}
ANTHROPIC_DEFAULT_OPUS_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_OLLAMA_OPUS_MODEL }}
CLAUDE_CODE_SUBAGENT_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_OLLAMA_SUBAGENT_MODEL }}
ANTHROPIC_DEFAULT_HAIKU_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_MANIFOLD_HAIKU_MODEL }}
ANTHROPIC_DEFAULT_SONNET_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_MANIFOLD_SONNET_MODEL }}
ANTHROPIC_DEFAULT_OPUS_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_MANIFOLD_OPUS_MODEL }}
CLAUDE_CODE_SUBAGENT_MODEL: ${{ vars.GC_WORKER_INFERENCE_CLAUDE_MANIFOLD_SUBAGENT_MODEL }}
GC_INFERENCE_EXPECTED_MODEL: kimi-k2.7-code
CLAUDE_CODE_EFFORT_LEVEL: auto
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1"
PYTHONUNBUFFERED: "1"
Expand All @@ -163,7 +147,17 @@ jobs:
pack_match=true
;;
methodology)
if [ "$MATRIX_PACK" != "gastown" ]; then
case "$MATRIX_PACK" in
superpowers|compound-engineering|gstack|bmad)
pack_match=true
;;
*)
pack_match=false
;;
esac
;;
model-smoke)
if [ "$MATRIX_PACK" != "gascity" ]; then
pack_match=true
else
pack_match=false
Expand Down Expand Up @@ -222,7 +216,7 @@ jobs:
if: steps.subset.outputs.run_gate == 'true'
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff
with:
go-version: "1.25.10"
go-version: "1.26.5"

- name: Set up Node
if: steps.subset.outputs.run_gate == 'true'
Expand Down Expand Up @@ -254,21 +248,23 @@ jobs:
echo "$(go env GOPATH)/bin" >> "$GITHUB_PATH"
"$(go env GOPATH)/bin/gc" version

- name: Validate Ollama Claude configuration
- name: Validate Manifold Claude configuration
if: steps.subset.outputs.run_gate == 'true'
run: |
test -n "$OLLAMA_API_KEY" || { echo "Missing OLLAMA_API_KEY GitHub secret" >&2; exit 1; }
test -n "$ANTHROPIC_API_KEY" || { echo "ANTHROPIC_API_KEY resolved empty" >&2; exit 1; }
test -n "$ANTHROPIC_AUTH_TOKEN" || { echo "ANTHROPIC_AUTH_TOKEN resolved empty" >&2; exit 1; }
test -n "$ANTHROPIC_AUTH_TOKEN" || { echo "Missing MANIFOLD_AUTH_TOKEN GitHub secret" >&2; exit 1; }
test "$ANTHROPIC_BASE_URL" = "https://works.gascity.com/manifold-api" || { echo "ANTHROPIC_BASE_URL must be the Manifold base URL without /v1" >&2; exit 1; }
test -n "$ANTHROPIC_DEFAULT_HAIKU_MODEL" || { echo "ANTHROPIC_DEFAULT_HAIKU_MODEL resolved empty" >&2; exit 1; }
test -n "$ANTHROPIC_DEFAULT_SONNET_MODEL" || { echo "ANTHROPIC_DEFAULT_SONNET_MODEL resolved empty" >&2; exit 1; }
test -n "$ANTHROPIC_DEFAULT_OPUS_MODEL" || { echo "ANTHROPIC_DEFAULT_OPUS_MODEL resolved empty" >&2; exit 1; }
test -n "$CLAUDE_CODE_SUBAGENT_MODEL" || { echo "CLAUDE_CODE_SUBAGENT_MODEL resolved empty" >&2; exit 1; }
test "$GC_INFERENCE_EXPECTED_MODEL" = "kimi-k2.7-code" || { echo "GC_INFERENCE_EXPECTED_MODEL must pin kimi-k2.7-code" >&2; exit 1; }
printf 'ANTHROPIC_BASE_URL=%s\n' "$ANTHROPIC_BASE_URL"
printf 'ANTHROPIC_DEFAULT_HAIKU_MODEL=%s\n' "$ANTHROPIC_DEFAULT_HAIKU_MODEL"
printf 'ANTHROPIC_DEFAULT_SONNET_MODEL=%s\n' "$ANTHROPIC_DEFAULT_SONNET_MODEL"
printf 'ANTHROPIC_DEFAULT_OPUS_MODEL=%s\n' "$ANTHROPIC_DEFAULT_OPUS_MODEL"
printf 'CLAUDE_CODE_SUBAGENT_MODEL=%s\n' "$CLAUDE_CODE_SUBAGENT_MODEL"
printf 'GC_INFERENCE_EXPECTED_MODEL=%s\n' "$GC_INFERENCE_EXPECTED_MODEL"

- name: Run supported-pack nightly inference gate
if: steps.subset.outputs.run_gate == 'true'
Expand All @@ -287,6 +283,9 @@ jobs:
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: supported-pack-nightly-${{ matrix.pack }}-${{ matrix.gate }}
path: ${{ runner.temp }}/supported-pack-nightly/${{ matrix.pack }}
path: |
${{ runner.temp }}/supported-pack-nightly/${{ matrix.pack }}
!${{ runner.temp }}/supported-pack-nightly/${{ matrix.pack }}/gc-home/.dolt/eventsData/**
!${{ runner.temp }}/supported-pack-nightly/${{ matrix.pack }}/**/.beads/eventsData/**
if-no-files-found: ignore
include-hidden-files: true
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

# Beads / Dolt files (added by bd init)
# Beads / Dolt files (added by gc bd init)
.dolt/
*.db
.beads-credential-key
Expand All @@ -10,7 +10,7 @@
!.beads/config.yaml
!.beads/metadata.json

# bd export artifact auto-staged by pre-commit hook (export.git-add: true in
# gc bd export artifact auto-staged by pre-commit hook (export.git-add: true in
# /home/ds/gascity-packs/.beads/config.yaml). Keep it out of repo history —
# beads issues canonical store is the Dolt DB, not this file.
/issues.jsonl
Expand Down
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,13 @@ Browse the tree for the current set; each pack has its own README.
- [cass](./cass) adds a shared `cass-search` prompt fragment and Claude skill
overlay for searching past coding-agent sessions.

### Oversight packs

- [oversight-rig](./oversight-rig) adds one rig-scoped project lead per rig and
includes an optional `city-executive-status` skill for maintaining a
shareable, Obsidian-compatible portfolio brief. Its status schedules are
examples only and remain inactive until configured by the consuming city.

### Build methodology packs

Raw-framework subagents become Gas City fanouts. The vendored methodology text
Expand Down Expand Up @@ -250,6 +257,14 @@ GC=/path/to/gc make registry-validate

### Publishing a pack to the registry

> **`registry.toml` describes packs that live in this repository only.** Its
> `source` must be a `https://github.com/gastownhall/gascity-packs/tree/<ref>/<dir>`
> URL (or the bare repository URL for a root pack) — anything else is rejected,
> because the content hash can only be verified against this repository's own
> history. If your pack lives in **your** repo, you do not need a PR here: publish
> it directly to the Gas City registry under a scoped `<owner>/<pack>` name and you
> keep ownership of it.

`registry.toml` is the public catalog. Each `[[pack.release]]` carries a
content hash that `validate_registry.py` enforces against the pack tree at the
pinned `commit`. To register a new pack, commit it on your branch, then mint a
Expand Down
9 changes: 4 additions & 5 deletions bmad/REQUIREMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,9 @@ for every derived pack.
`bmad-review` runs write the adapter-consumable report to `{{report_path}}`
without posting comments, pushing branches, or finalizing external state.
- Prompt hygiene: all agent prompt templates under
`agents/*/prompt.template.md` include the shared `gc-role-worker` fragment,
which carries the Gas City claim protocol; every per-agent nested fragment
copy is identical to the pack-level
`bmad/template-fragments/gc-role-worker.template.md`. Agent prompts and
`agents/*/prompt.template.md` include the public `gc-role-worker` fragment
supplied by the `gc` import; BMAD does not override that shared claim
protocol. Agent prompts and
skill-adopting lane assets carry explicit "Do not invoke provider-native
subagents, slash commands, task tools, or the upstream BMAD runtime"
guards. The skill texts under `skills/` are methodology source material
Expand All @@ -125,7 +124,7 @@ grep -n -E '^extends' bmad/formulas/bmad-planning.formula.toml bmad/formulas/bma
grep -n -E '^id = |needs = ' bmad/formulas/bmad-build.formula.toml # implementation-readiness sits between decompose and both drains
grep -rn 'gc.run_target' bmad/formulas/*.toml # expect only bmad.* agents, gc.run-operator, or {implementation_target}
grep -rL 'gc-role-worker' bmad/agents/*/prompt.template.md # expect no output
for f in bmad/agents/*/template-fragments/gc-role-worker.template.md; do diff bmad/template-fragments/gc-role-worker.template.md "$f"; done # expect no output
gc lint bmad
grep -rn 'provider-native' bmad/agents bmad/assets | wc -l # expect >= 30
grep -rho 'gc\.build\.[a-z_.]*' bmad/assets bmad/formulas | sort -u
ls gascity/schemas/build
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Loading
Loading