Agent Quickstart#
Zero-context entry point for routine dakota maintenance — add package, remove package, update refs.
Historical path note: elements/bluefin/* is Dakota's package tree. The name
is legacy. Do not use it as a cue to reach for dnf, RPM/COPR, or Containerfile
overlay workflows.
5 Always Rules#
- Always run
just --listfirst — the Justfile is the ground truth for available recipes - Always run
just validate,just lint, andjust boot-testbefore opening a PR — graph check, image lint, and automated boot smoke test - Always add new elements to
deps.bst(binary) orgnome-shell-extensions.bst(extensions) - Always grep for all references before removing —
grep -r <name> elements/ .github/workflows/ files/ - Always use
just bstnot barebst— BST must run inside the pinned container
6 Never Rules#
- Never edit
elements/freedesktop-sdk.bstorelements/gnome-build-meta.bstwithout human review - Never open a PR to
projectbluefin/dakotawithout runningjust validatefirst - Never add Renovate entries for elements already in the
track-tarballsCI job — causes racing PRs - Never call
bstdirectly — alwaysjust bst ... - Never skip
just validateeven ifjust bst build"looks right" - Never solve package/image-content changes in
Containerfile— those belong in.bstelements andelements/bluefin/deps.bst
Task Routing#
| Task | Command | Skill |
|---|---|---|
| Add binary package | Create elements/bluefin/<name>.bst manually | add-package.md |
| Add Rust package | Create element + run generate_cargo_sources.py | add-package.md + packaging-rust.md |
| Add GNOME extension | Create elements/bluefin/shell-extensions/<name>.bst | packaging-gnome-extensions.md |
| Remove package | grep -r <name> elements/ .github/workflows/ then delete | remove-package.md |
| Update tarball version | Edit version var, then just bst source track bluefin/<name>.bst | update-refs.md |
| Update git ref | just bst source track bluefin/<name>.bst | update-refs.md |
| Build failure | just bst shell --build bluefin/<name>.bst | debugging.md |
| BST YAML reference | — | buildstream.md |
| CI failure | — | ci.md |
Tracking Groups#
| Group | When to use |
|---|---|
auto-merge | App packages, shell extensions — low-risk, squash-merged automatically |
manual-merge | Junctions, Rust elements — requires human review |
Fix an Issue — End-to-End#
# 1. Claim the issue
gh issue comment 635 --repo projectbluefin/dakota --body "/claim"
# 2. Branch from upstream/main
git checkout upstream/main -b fix/short-description
# 3. Make changes, validate
just validate && just lint
# 4. Commit with correct trailer
git commit -m "fix(bluefin): short description
Closes #635
Assisted-by: Copilot <223556219+Copilot@users.noreply.github.com>"
# 5. Push to upstream (never castrojo fork)
git push upstream fix/short-description
# 6. Open PR with checklist checkbox checked
gh pr create --repo projectbluefin/dakota ...
If the issue is still status/triage (not yet status/approved), ask the user before claiming — agents don't self-approve issues.
Commit Conventions#
feat(bluefin): add <name>
chore(deps): update <name>
fix(bluefin): <description>
chore: remove <name>
Trailer: Always Assisted-by: or Signed-off-by: — never Co-authored-by:. This is a hard rule from docs/pr-checklist.md.
Key Paths#
elements/bluefin/ All Bluefin-specific elements
elements/bluefin/deps.bst Central dependency manifest
elements/bluefin/shell-extensions/ GNOME Shell extensions
elements/bluefin/gnome-shell-extensions.bst Extension stack
include/aliases.yml URL aliases
.github/workflows/track-bst-sources.yml Tracking matrix
.github/renovate.json5 Renovate config
Throughput Rule#
If working through a backlog of issues, do not stop after the first fix. Work from the issue backlog in this order:
- Issues labeled
status/queued - Issues labeled
kind:bug - Issues explicitly named by the user
Lessons Learned#
Add entries here when you discover a new pattern or fix a recurring mistake.
Format:### <pattern name> (YYYY-MM-DD)
Restarting the publish factory after a pause (2026-06-05)#
When publishing has been intentionally paused (e.g., post-repo-refactor), the
factory restart sequence is:
- Fix any
startup_failureinpublish.yml— check for invalidpermissions:scopes
(e.g.,artifact-metadata: writeis not a valid GITHUB_TOKEN scope) and
job-levelpermissions:on reusable workflow call jobs. - Dispatch
build.yml --ref mainto populate the remote CAS. - Wait ~60–90 minutes for the build to complete.
publish.ymlauto-triggers viaworkflow_run. If not, dispatch manually.- After
:testinglands, dispatchweekly-testing-promotion.ymland get
2 human approvals at https://github.com/projectbluefin/dakota/deployments
to promote:testing→:latest+:stable.
Full details: docs/ci.md → "Restarting the factory".