Repository navigation
docs(D-DTM-1): distributed thought-delta reasoning interchange capstone and PR map #1474
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Board file gates | |
| on: | |
| pull_request: | |
| paths: | |
| # The protected files themselves. A PR that does not touch the board | |
| # cannot shrink it, so there is nothing to check. | |
| - .claude/board/LATEST_STATE.md | |
| - .claude/board/EPIPHANIES.md | |
| - .claude/board/PR_ARC_INVENTORY.md | |
| - .claude/board/STATUS_BOARD.md | |
| - .claude/board/ISSUES.md | |
| - .claude/board/TECH_DEBT.md | |
| - .claude/board/AGENT_LOG.md | |
| - .claude/board/INTEGRATION_PLANS.md | |
| # Broader than the eight above ON PURPOSE: the protected list lives in | |
| # the script, and a future entry added there must be gated from the | |
| # commit that adds it -- not from the next commit that happens to touch | |
| # a file already on the list. | |
| - .claude/board/** | |
| # The gate's own two files, so a change to either is checked by itself. | |
| - .claude/tools/append_only_gate.py | |
| - .github/workflows/append-only-gate.yml | |
| # The EPIPHANIES projection's tool, so its staleness check runs whenever | |
| # the renderer changes -- not only when the board data does. | |
| - .claude/tools/compact_epiphanies.py | |
| # The fruits generator, for the same reason: FRUITS.md is computed from | |
| # the ledgers, so a change to the renderer must re-check it. | |
| - .claude/tools/fruits_index.py | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| jobs: | |
| no-shrink: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| # REQUIRED, not a tuning knob. The gate compares each protected file | |
| # against the MERGE-BASE of this branch and the target -- the version | |
| # the branch actually inherited, not wherever the target has moved | |
| # since. A shallow checkout has no merge-base to compute, and the | |
| # gate fails closed rather than passing on a comparison it could not | |
| # make. | |
| fetch-depth: 0 | |
| - name: Self-test the gate | |
| # Runs first, and deliberately. If the gate cannot prove it both FIRES | |
| # on a shortened file and STAYS SILENT on a grown one, its verdict on | |
| # the real diff is worthless -- so the self-test gates the gate. | |
| run: python3 .claude/tools/append_only_gate.py --self-test | |
| - name: Check protected board files did not shrink | |
| run: | | |
| python3 .claude/tools/append_only_gate.py \ | |
| "origin/${{ github.event.pull_request.base.ref }}" | |
| - name: Self-test the EPIPHANIES compactor | |
| # Same reasoning as the gate's own self-test above: the projection's | |
| # provenance rule (every row resolves to a real archive heading) and its | |
| # closed topic vocabulary are only worth trusting if they can be shown | |
| # to refuse a bad row. | |
| run: python3 .claude/tools/compact_epiphanies.py --self-test | |
| - name: Check the EPIPHANIES projection is current | |
| # EPIPHANIES.md is GENERATED from the frozen archive plus the committed | |
| # consolidation rows, so it is not on the append-only list -- a | |
| # projection legitimately shrinks when a row is closed out. What must | |
| # hold instead is that it matches its inputs: a hand-edit, or a rows | |
| # change without a regenerate, fails here. | |
| run: python3 .claude/tools/compact_epiphanies.py --check | |
| - name: Self-test the fruits generator | |
| # The generator must show it admits only tagged rows (can fire), never | |
| # guesses an untagged row in (can stay silent), and refuses an unknown | |
| # tier, before its verdict on the real ledgers is worth anything. | |
| run: python3 .claude/tools/fruits_index.py --self-test | |
| - name: Check FRUITS.md is current | |
| # FRUITS.md is GENERATED from the `**Fruit:**` lines in TORQUE, IDEAS, | |
| # TECH_DEBT and ISSUES. A hand-kept list drifts from its ledgers, and | |
| # the gap is where a ball gets dropped. | |
| run: python3 .claude/tools/fruits_index.py --check |