Portolan releases must be tied to local verification, GitHub check state, and
the current product-claim boundary. Do not publish broader product claims in
release notes than docs/product-claims.md allows.
Before publishing a tag or release artifact:
- Pick the release identifier after the installable atlas route is verified.
- Update README install copy, Russian README install copy, agent install docs, release notes, release examples, and canonical identity tests in one changeset.
- Confirm the canonical public identity:
go test -count=1 ./internal/app -run 'TestCanonicalPublicIdentity|TestInstallableAgentPackPublicRoute'
rg -n "github.com/(fcon-tech|fall-out-bug)/portolan|portolan-install|git clone" README.md docs go.mod internal -S- Read
docs/product-claims.mdand copy current limitations into the release notes. - Run the product gate:
scripts/portolan-product-acceptance.sh --require-agent-runtime- For release candidates that claim Bigtop corpus evidence, run the same product gate with a prepared Bigtop bundle:
scripts/portolan-product-acceptance.sh \
--require-agent-runtime \
--bigtop-bundle <bigtop-bundle-dir>- Run a fresh remote clone of the release branch/tag and repeat the product gate from that clone.
- Confirm the latest GitHub Actions run for the release commit or PR passed. If
checks failed, stop release publication until they are fixed or explicitly
dispositioned. If GitHub was not evaluated, record GitHub checks as
not_assessed. - Review the product boundary: confirm the release still preserves local-first and read-only operation, no daemon behavior, no credentials, no hidden runtime network behavior, and no target-repository mutation.
- Record any
not_assessed,blocked, orfailedvalidation surface in the release notes.
The current product artifact is the captain prompt plus target-local wrappers. The captain gives the agent only a Portolan URL/local path and the target root:
scripts/portolan-captain-prompt.sh \
--portolan <Portolan git URL or local checkout path> \
--target-root <target-root>The generated prompt makes the agent default the bundle to
<target-root>/.portolan/atlas, ask before fetching a URL, install target-local
wrappers, run doctor/status/query-eval/captain-handoff, and answer through
bounded bundle queries instead of raw bundle dumps.
This installs:
- Cursor Project Rule:
<target-root>/.cursor/rules/portolan-atlas.mdc - OpenCode managed block:
<target-root>/AGENTS.md - Target-local wrappers:
<target-root>/.portolan/bin/ - Default atlas location:
<target-root>/.portolan/atlas
Prebuilt binaries, Homebrew, Docker, npm, apt, and other package-manager routes are out of scope until a later slice adds platform smoke, checksums, and release closeout coverage for those artifacts. The legacy Go CLI remains available from a source checkout for explicit compatibility use, but it is not the primary release artifact.
Keep generated release artifacts outside the repository unless a future spec explicitly defines committed release metadata.
Use docs/releases/installable-atlas.md as the canonical local source for the
GitHub release body. Paste that content into GitHub Releases only after local
product acceptance, fresh-clone product acceptance, product-claim scan, and
GitHub check state are recorded.
Release notes must include these current limits from docs/product-claims.md
until newer validation evidence changes them:
- Cursor/OpenCode runtime support is limited to the verified headless CLI lanes;
arbitrary future UI modes and releases remain
not_assessed. - Complete inherited-estate coverage is not proven by repository count.
- Runtime-visible observations can be represented from supported local files,
but complete service topology remains
not_assessedwithout complete supported runtime evidence. - OSS output validation is narrow and named. Native OSS CLI, skill, or MCP
outputs may be used when installed and explicitly requested, but broad scanner
coverage, certification, and target-independent OSS value remain unproven or
not_assessed. The current named boundaries include local Semgrep output with local config, raw Graphify node-link import with source-backedEXTRACTEDverification, bounded Repomix file-inventory import, and bounded SCIP/Serena-style JSON symbol-index import. Graphify MCP/LLM/dashboard behavior, SCIP protobuf/real indexer output, real Serena export/MCP behavior, and Repomix source/redaction semantics remain unproven ornot_assessed. - Output quality depends on the local evidence supplied to Portolan. Missing, stale, or incomplete inputs must stay visible as gaps.
Use the install guidance in docs/agent/INSTALL.md to distinguish:
- Portolan source URL/local-path acquisition for Cursor/OpenCode/agent harnesses;
- target-local wrappers under
<target-root>/.portolan/bin; - legacy Go binary/bootstrap only when an operator explicitly asks for older context or map artifacts.
Use docs/agent/INSTALL-PROMPT.md or docs/agent/INSTALL-PROMPT.ru.md when
the release needs a copyable agent instruction for "install Portolan and run it
on this local target".