This is a StartOS service-package repository — it builds a .s9pk for StartOS.
Develop it inside a StartOS packaging workspace created by start-cli s9pk init-workspace,
which provides the packaging guide and agent context one level up. If you're reading this in a
bare clone with no workspace, the full guide is at https://docs.start9.com/packaging.
Start every task at the recipe index — ../start-technologies/projects/start-sdk/docs/src/recipes.md
(or https://docs.start9.com/packaging/recipes.html). It maps an intent ("prompt the user to create
admin credentials", "expose a web UI") to the constructs, the reference pages, and a named production
package to copy. Find the recipe before you read this package's neighbours: a package you reach by
grepping may be non-conformant, and the recipe outranks it.
Freshly scaffolded? Work the New Package Checklist (or https://docs.start9.com/packaging/new-package-checklist.html) from top to bottom. It is a guide page, not a file in this repo — read it, don't copy it in.
Keep README.md (technical reference for an AI support or administering agent) and
instructions.md (end-user docs) in sync with your changes. This file restates neither:
whoever changes the package has both, so it carries only what they don't — repo mechanics,
a change that looks right and is not, where the next thing gets added, a naming trap, a
build or test invocation particular to this repo.
Fix a defect you spot rather than reporting it — you have the package open and the
context to be sure. File a GitHub issue on this repo only when the call isn't yours to
make: you can't pin the cause down, two defensible fixes exist, or it's too large to ride on
the work in hand. An open issue is a report, not a queue — implement one when you're asked
to or when it's labelled Approved, then close it with Closes #<n>.
Don't record work in the repo instead: no TODO.md, no NOTES.md, no PLAN.md. What you
verified, tried, and decided belongs in the commit message and the PR body.
- Keep
guardUpstreamUpgradeahead ofversionGraphinsetupInit, because a volume StartOS could not snapshot keeps whatever data version the graph advanced to. - When renaming an action that has a live task, call
sdk.action.clearTask(effects, '<old key>')in the same release: the old replay key no longer resolves, so nothing else ever removes the task. - Give a new queued
occtask matching entries inACTION_IDS,OCC_ARGSandTASK_NOTICE, plus a conditional health check, or it is never run or reported. - Edit
startos/fileModels/php.pegjsand runnpm run regen-parser; never editphp-parser.jsby hand. The build does not read the grammar, so a skipped regeneration still builds and ships the old parser. - Add an external-storage source as an entry in
startos/externalStorage.ts, a typedmountDependencyinmain.tsand a dependency instartos/dependencies.ts: the action and the reconcile pick up everything else from that registry. - Re-read
/entrypoint.shwhen bumping the image: install and upgrade progress phases key off its log lines, and a reworded line fails nothing.