Quickstart#
Overview#
This is the smallest safe default for routine Dakota work.
It is not the full reference manual. It is the path that prevents the most common factory mistakes.
When to Use#
Use when:
- adding, removing, or updating a package
- doing small maintenance with little repo context
- you want the standard branch → edit → validate → PR flow
When NOT to Use#
- CI failure needs workflow-specific debugging → CI skills
- complex packaging needs a language-specific skill →
packaging-*.md - you are still leaking bluefin habits →
not-bluefin.mdfirst
Core Process#
- Load
not-bluefin.mdif needed. - Branch from
upstream/testing. - Pick the focused skill for the change.
- Use
justrecipes, not ad-hoc host commands. - Run the lightest validation that proves the change.
- Commit with
Assisted-by:and update the relevant skill in the same PR.
Always Rules#
- Run the CI pre-flight before any merge, push, or workflow dispatch. (See Hard Rule #9 in
.github/copilot-instructions.md.) - Run
just --listfirst. - Use
just bst ..., not barebst. - Grep all references before removing a package or file.
- Add new package elements to the correct stack.
- Validate before opening the PR.
- Push to
upstream, never the fork.
Never Rules#
- Never solve package/image-content changes in
Containerfile. - Never open a Dakota PR without validation evidence.
- Never edit junctions casually; treat them as human-review territory.
- Never add duplicate automation when an existing recipe or workflow already owns it.
- Never skip the skill update if you discovered a reusable lesson.
Task Routing#
| Task | Load |
|---|---|
| Add package | add-package.md |
| Remove package | remove-package.md |
| Update source ref/version | update-refs.md |
| Debug element build | debugging.md |
| BST syntax/reference | buildstream.md |
| CI failure | ci.md |
Default Workflow#
# branch
git checkout upstream/testing -b fix/short-description
# inspect recipes
just --list
# make the change
# validate with the lightest checks that match the scope
just bst show oci/bluefin.bst
just lint
# commit
git commit -m "fix(bluefin): short description
Closes #NNN
Assisted-by: OpenAI GPT-5 via pi"
# push
git push upstream fix/short-description
Common Rationalizations#
| Rationalization | Reality |
|---|---|
| "I'll use bare bst just this once." | That's how environment drift sneaks in. |
| "This is small; I don't need validation." | Small changes still waste CI if the graph is broken. |
| "I learned something, but I'll document it later." | Later means never. The factory loop breaks immediately. |
| "The fork is fine for this push." | Not for Dakota's normal upstream PR flow. |
Red Flags#
- Starting from local
testinginstead ofupstream/testing - Using host-installed bst or random shell commands instead of
just - No evidence attached to the PR
- A skill-worthy lesson discovered but not written back
Verification#
- Branch started from
upstream/main - Correct focused skill was loaded for the task
- Validation matched the scope of the change
- Commit uses repo conventions including
Assisted-by: - Skill update is included when a new pattern was learned
Lessons Learned#
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 testingto populate the remote CAS. - Wait ~60–90 minutes for the build to complete.
publish.ymlauto-triggers viaworkflow_run. If not, dispatch manually.- Once
:testinglands,execute-release.ymlauto-triggers to promote:testing→:stable(no human approval needed).
Full details: release-promotion.md and ci-tooling.md.