Skip to content
Open
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
17 changes: 8 additions & 9 deletions .continuum/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ versioning:
strategy: semver
tag_format: 'v{version}'
release_branch_format: 'release/v{version}'
release_milestone_format: 'Release: v{version}'
release_lane_label_format: 'v{version}'
goalpost_milestone_format: 'Goalpost: {name}'
release_milestone_format: 'v{version}'

version_sources:
- path: crates/wesley-core/Cargo.toml
Expand Down Expand Up @@ -90,7 +88,7 @@ docs:

validation:
docs_check: cargo xtask docs-check
prep: cargo xtask release-prep-guard --version {version}
post_merge_pre_tag_tracker_clear: cargo xtask release-prep-guard --version {version}
preflight: cargo xtask preflight
rust_advisory_audit: cargo audit
release_check: cargo xtask release-check
Expand Down Expand Up @@ -119,11 +117,12 @@ publish:

issue_model:
live_tracker: github
implementation_bucket: 'Goalpost: ... milestone'
release_gate_bucket: 'Release: v{version} milestone for gate and closeout issues'
release_scheduling_axis: 'v{version} label for pre-tag blockers and scheduled work'
triage_axis: 'triage:* label'
required_state_label: 'exactly one of triage:* or v{version}'
scheduling_authority: 'plain v{version} milestone'
scheduled_state: 'exactly one milestone named v{version}; no extra milestone or triage:*, retired lane:*, or concrete version label'
unscheduled_state: 'exactly one triage:* label; no milestone, retired lane:*, or concrete version label'
classification_axis: 'type, legend:*, group:*, work:*, and pkg:* labels'
project_fields: 'priority and workflow status'
release_gate: 'final pre-tag issue in the target version milestone'

release_evidence:
internal_packet: docs/method/releases/v{version}/release.md
Expand Down
10 changes: 5 additions & 5 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ body:
- type: markdown
attributes:
value: |
GitHub Issues are Wesley's live Method tracker. Labels are canonical
tracker metadata; request classification here and maintainers or agents
will apply the final scheduling, legend, and work labels.
GitHub Issues are Wesley's live Method tracker. A `triage:*` label marks
unscheduled intake; a plain `vX.Y.Z` milestone schedules work. Other
labels classify the issue.

- type: textarea
id: requested_classification
attributes:
label: Requested classification
description: Optional triage request. This does not set canonical labels.
description: Optional triage request. This does not change canonical GitHub metadata.
placeholder: |
Suggested scheduling state:
Suggested release milestone or triage state:
Suggested legend:
Suggested work type:

Expand Down
7 changes: 4 additions & 3 deletions .github/ISSUE_TEMPLATE/chore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,16 @@ body:
attributes:
value: |
Chores still need a hill. GitHub Issues are Wesley's live Method
tracker; labels are canonical scheduling, legend, and work metadata.
tracker. A `triage:*` label marks unscheduled intake; a plain `vX.Y.Z`
milestone schedules work. Other labels classify the issue.

- type: textarea
id: requested_classification
attributes:
label: Requested classification
description: Optional triage request. This does not set canonical labels.
description: Optional triage request. This does not change canonical GitHub metadata.
placeholder: |
Suggested scheduling state:
Suggested release milestone or triage state:
Suggested legend:
Suggested work type:

Expand Down
9 changes: 5 additions & 4 deletions .github/ISSUE_TEMPLATE/feature.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,17 @@ body:
attributes:
value: |
Frame feature work around sponsor actors, hills, and playbacks.
GitHub Issues are Wesley's live Method tracker; labels are canonical
lane, legend, and work metadata.
GitHub Issues are Wesley's live Method tracker. A `triage:*` label marks
unscheduled intake; a plain `vX.Y.Z` milestone schedules work. Other
labels classify the issue.

- type: textarea
id: requested_classification
attributes:
label: Requested classification
description: Optional triage request. This does not set canonical labels.
description: Optional triage request. This does not change canonical GitHub metadata.
placeholder: |
Suggested scheduling state:
Suggested release milestone or triage state:
Suggested legend:
Suggested work type:

Expand Down
7 changes: 4 additions & 3 deletions .github/ISSUE_TEMPLATE/rfc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@ body:
value: |
RFCs are for direction-setting changes. Frame them around the product
hill, not just the mechanism. GitHub Issues are Wesley's live Method
tracker; labels are canonical scheduling, legend, and work metadata.
tracker. A `triage:*` label marks unscheduled intake; a plain `vX.Y.Z`
milestone schedules work. Other labels classify the issue.

- type: textarea
id: requested_classification
attributes:
label: Requested classification
description: Optional triage request. This does not set canonical labels.
description: Optional triage request. This does not change canonical GitHub metadata.
placeholder: |
Suggested scheduling state:
Suggested release milestone or triage state:
Suggested legend:
Suggested work type:

Expand Down
8 changes: 4 additions & 4 deletions .github/actions/install-bats/action.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
name: 'Install Bats and JQ'
description: 'Installs bats and jq on Ubuntu runners'
name: 'Install Bats, JQ, and ripgrep'
description: 'Installs bats, jq, and ripgrep on Ubuntu runners'
runs:
using: 'composite'
steps:
- name: apt-get update
shell: bash
run: sudo apt-get update
- name: install bats and jq
- name: install bats, jq, and ripgrep
shell: bash
run: sudo apt-get install -y bats jq
run: sudo apt-get install -y bats jq ripgrep
Comment thread
flyingrobots marked this conversation as resolved.
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Closes #
## Tracker Hygiene

- [ ] Linked issue had `work-in-progress` while active.
- [ ] Linked issue lane/status/legend labels are current.
- [ ] Linked issue has exactly one milestone, named plain `vX.Y.Z`, and no `triage:*`, retired `lane:*`, or concrete-version scheduling label.
- [ ] Follow-up work is captured as GitHub Issues, not hidden in chat or local-only backlog files.

## Risk
Expand Down
23 changes: 1 addition & 22 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,29 +42,7 @@ jobs:
--schema test/fixtures/examples/ecommerce.graphql \
--json > "$RUNNER_TEMP/ecommerce-l1.json"

- name: Detect changes for repo Bats tests (no servers)
id: changelog
env:
EVENT: ${{ github.event_name }}
BASE_REF: ${{ github.event.pull_request.base.sha }}
BEFORE: ${{ github.event.before }}
SHA: ${{ github.sha }}
run: |
set -euo pipefail
RANGE="${BEFORE}..${SHA}"
if [ "$EVENT" = "pull_request" ] && [ -n "${BASE_REF}" ]; then
RANGE="${BASE_REF}..${SHA}"
fi
echo "Diff range: $RANGE"
CHANGED=$(git diff --name-only "$RANGE" || true)
echo "$CHANGED" | sed 's/^/ - /'
NEED=false
# Trigger only on unit/serverless repository checks.
echo "$CHANGED" | grep -E -q '^(scripts/serve-static\.mjs|test/serve-static-(unit|relative-unit)\.bats|scripts/generate-ir-fixtures\.mjs|test/docs-planning-boundary\.bats|test/domain-empty-boundary\.bats|test/ir-fixtures\.bats|test/ci-)' && NEED=true || true
echo "RUN_BATS=$NEED" >> $GITHUB_ENV

- name: Repo Bats tests (unit/docs/ci checks only)
if: ${{ env.RUN_BATS == 'true' }}
env:
BATS_LIB_PATH: test/vendor
TERM: xterm
Expand All @@ -79,6 +57,7 @@ jobs:
test/ir-fixtures.bats
test/ci-package-manager-policy.bats
test/ci-workflows.bats
test/release-governance.bats
)
for f in "${files[@]}"; do
echo "Running Bats: $f"
Expand Down
20 changes: 0 additions & 20 deletions .github/workflows/install-bats.yml

This file was deleted.

27 changes: 0 additions & 27 deletions .github/workflows/release-crates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,33 +74,6 @@ jobs:
GH_TOKEN: ${{ github.token }}
run: cargo xtask release-guard --tag "$GITHUB_REF_NAME"

- name: Check for open version issues
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
version="${GITHUB_REF_NAME#v}"
issue_query() {
gh issue list "$@" \
--state open \
--json number,title,url \
--jq '.[] | "#\(.number) \(.title) \(.url)"'
}
matches="$(
{
issue_query --search "\"${GITHUB_REF_NAME}\" OR \"${version}\" repo:${GITHUB_REPOSITORY}"
issue_query --milestone "${GITHUB_REF_NAME}" 2>/dev/null || true
issue_query --milestone "${version}" 2>/dev/null || true
issue_query --label "${GITHUB_REF_NAME}" 2>/dev/null || true
issue_query --label "${version}" 2>/dev/null || true
} | sort -u
)"
if [ -n "$matches" ]; then
echo "Open GitHub issues are associated with ${GITHUB_REF_NAME}:"
echo "$matches"
exit 1
fi

- name: Docs check
run: cargo xtask docs-check

Expand Down
17 changes: 11 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,11 @@ Do not audit the repository by recursively walking the filesystem. Follow the au

- **`docs/BEARING.md`**: Current execution gravity and active tensions.
- **`docs/design/README.md`**: Active design packets and structural doctrine.
- **GitHub Issues**: The active source of truth for pending work. Use
`triage:*` labels for unscheduled intake and `vX.Y.Z` labels for work
scheduled into a named future release. See
- **GitHub Issues**: The active source of truth for pending work. Unscheduled
intake has exactly one `triage:*` label and no milestone, retired `lane:*`,
or concrete-version scheduling label. Work scheduled into a named release
has exactly one milestone, named plain `vX.Y.Z`, and no `triage:*`, retired
`lane:*`, or concrete-version scheduling label. See
**`docs/topics/contributing/triage.md`**.

### 4. The Proof
Expand All @@ -50,7 +52,7 @@ When starting a new session or recovering from context loss:

1. **Read `docs/BEARING.md`** to find the current execution gravity.
2. **Read `docs/METHOD.md`** to understand the work doctrine.
3. **Check scheduled release lanes and triage queues** using
3. **Check version-milestone schedules and triage queues** using
`docs/topics/contributing/triage.md`.
4. **Check `git log -n 5` and `git status`** to verify the current branch state.

Expand All @@ -59,8 +61,11 @@ When starting a new session or recovering from context loss:
After altering files:

1. **Verify Truth**: Ensure documentation is updated if behavior or structure changed.
2. **Log Debt**: Add follow-on work as GitHub Issues with either a `triage:*`
intake label or a concrete `vX.Y.Z` release label.
2. **Log Debt**: Add follow-on work as either unscheduled intake (exactly one
`triage:*` label and no milestone, retired `lane:*`, or concrete-version
scheduling label) or scheduled work (exactly one milestone, named plain
`vX.Y.Z`, and no triage, retired `lane:*`, or concrete-version scheduling
label).
3. **Commit**: Use focused, conventional commit messages. Propose a draft before executing.
4. **Validate**: Run `pnpm run preflight`.

Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,19 @@ The format is based on Keep a Changelog, and this project adheres to Semantic Ve

## [Unreleased]

### Changed

- Replaced slogan goalpost milestones and duplicate version scheduling labels
with one plain `vX.Y.Z` milestone per planned release. Release guards now
require that exact open milestone and block on its open issues; the release
gate closes before the immutable tag is created. Priority and workflow status
remain Project fields rather than classification labels. GitHub
owner/repository path comparisons treat letter casing as non-semantic while
preserving the origin-derived path.
- Consolidated repository Bats dependency installation on the checked-in
composite action, including Bats, jq, and ripgrep, and retired the duplicate
workflow that could not provision tools into its caller job.

## [0.3.0-alpha.1] - 2026-07-15

### Added
Expand Down
49 changes: 30 additions & 19 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ For broader orientation, read these surfaces in order:
- [docs/design/README.md](docs/design/README.md) for active design packets and boundary doctrine
- [docs/METHOD.md](docs/METHOD.md) for the workflow contract
- [docs/topics/README.md](docs/topics/README.md) for contributor and operator task topics
- [docs/topics/contributing/triage.md](docs/topics/contributing/triage.md) for issue triage and release-lane scheduling
- [docs/topics/contributing/triage.md](docs/topics/contributing/triage.md) for issue triage and version-milestone scheduling
- [docs/governance/labels.md](docs/governance/labels.md) for issue and PR label semantics
- [AGENTS.md](AGENTS.md) for repository-specific automation rules

Expand Down Expand Up @@ -53,10 +53,19 @@ such as `wesley-postgres`.
GitHub owns live work state:

- GitHub Issues hold slices and raw intake.
- GitHub Milestones hold goalposts and release gates.
- GitHub Projects provide roadmap board views.
- GitHub labels carry triage state, release scheduling, legend, work-shape,
and ownership metadata.
- GitHub Milestones are the sole scheduling authority for named releases.
Every scheduled issue belongs to exactly one plain `vX.Y.Z` milestone.
- GitHub Projects and release outcomes provide narrative groupings and views
over scheduled work; they are not scheduling authorities.
- GitHub labels classify intake, legend, work shape, ownership, and optional
status. Labels never schedule work into a named release.

An unscheduled issue has exactly one `triage:*` label and no milestone. A
scheduled issue has exactly one plain `vX.Y.Z` milestone and no `triage:*`
or concrete-version scheduling label.

These scheduling invariants govern current open work only. Closed issues, closed
milestones, and historical labels remain preserved evidence.

Repository files are the evidence ledger. Design packets, witnesses, retros,
release notes, and signpost docs record stable truth and proof after work is
Expand All @@ -72,9 +81,10 @@ backlog files:
- [Near-term roadmap issue](https://github.com/flyingrobots/wesley/issues/646)
- [Wesley Roadmap Project](https://github.com/users/flyingrobots/projects/18)

Starter issues must have one scheduling-state label such as `v0.3.0`, one
`Goalpost: ...` milestone, one primary file or tiny file set, and one local
validation command. If an issue still has a `triage:*` label, it is not a
Starter issues must belong to exactly one plain future-release milestone such
as `v0.3.0`, have no `triage:*` or concrete-version scheduling label, name
one primary file or tiny file set, and provide one local validation command.
If an issue still has a `triage:*` label, it is unscheduled and is not a
starter task until a maintainer schedules, splits, moves, or closes it.

Every PR must name at least one GitHub Issue in its body. Use a closing keyword
Expand Down Expand Up @@ -137,18 +147,19 @@ See `docs/method/legends/` for the standing questions each legend owns.

## Default Loop

1. Pull a GitHub Issue with the right goalpost milestone and either a
`triage:*` intake label or concrete `vX.Y.Z` release label.
1. Select a GitHub Issue. Before implementation, confirm it is scheduled in
exactly one plain `vX.Y.Z` milestone and carries no `triage:*` or
concrete-version scheduling label. If it is still unscheduled, schedule,
split, move, or close it first.
2. Add `work-in-progress` while the slice is active.
3. If the issue is still under `triage:*`, schedule it into a named release,
split it, move it, or close it before implementation.
4. Write or update the design packet when the work needs durable design context.
5. Write failing tests from the playback questions or issue acceptance criteria.
6. Implement.
7. Produce a reproducible witness.
8. File follow-up work as GitHub Issues with the right goalpost and either a
`triage:*` intake label or concrete release lane.
9. Update ship surfaces such as `docs/BEARING.md`, `CHANGELOG.md`, and release
3. Write or update the design packet when the work needs durable design context.
4. Write failing tests from the playback questions or issue acceptance criteria.
5. Implement.
6. Produce a reproducible witness.
7. File follow-up work in exactly one canonical state: unscheduled with one
`triage:*` label and no milestone, or scheduled in one plain version
milestone with no triage or concrete-version scheduling label.
8. Update ship surfaces such as `docs/BEARING.md`, `CHANGELOG.md`, and release
notes only from merged `main` state.

Review state rides on branches and PRs. GitHub Issues, Milestones, Projects, and
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading