Tier the north star and declare the tier-0 operator surface (AC-NS-0, NS-10, workstreams G/I/J/K/L) #1347
Closed
opened 2026-08-21 00:00:54 +00:00 by fred
·
1 comment
No Branch/Tag Specified
next
archive/ms24-fork
fix/ci-queue-wait-no-ci-merge-path
fix/credentials-gitea-seat-slots
feat/onboarding-scripts-framework
pr-1367
fix/1357-issue-view-comments
fix/1356-tea-login-fail-closed
fix/1362-harness-aware-delivery-confirm
fix/gitea-guessed-login-credential
docs/w4-document-contract
fix/d29-lease-revoke-noop
peggy/agent-send-unverified-label
fix/pr-merge-fork-ci-status
docs/ri-050-release-evidence
riv001-clean
docs/1216-trunk-parameterization
fix/1257-adopt-draft-transition
fix/1256-fleet-pane-path-node
fix/1017-enumeration-guard-population
fix/1182-fail-closed-launch
fix/1327-setuppath-idempotency
merge/main-into-next
ci/push-ci-comment-model
ci/pin-ci-base-image
fix/ci-queue-wait-no-status
fred/code-review-pinned-tool-rules
fred/guides-seat-identity-fleet-comms
fred/credential-fail-closed-seat-slots
fix/fleet-greenfield-blockers
feat/ri-050-qr-evaluator
docs/ri-050-forge-docs-fastfollow
fix/ri-050-registry-secrets
test/ri-050-publish-gate-negative
fix/ri-050-verify-pglite-path
docs/ri-050-qr-probe-inventory
feat/ri-050-web-stale-safety
docs/ri-050-mission-bootstrap
fix/ri-050-forge-fail-closed
feat/ri-050-publish-gate
fleet/continuation-record-2026-08-17
feat/ri-050-prd-authority
fix/ri-050-macp-fail-closed
fix/1280-identity-first-resolution
feat/w-f4-store
fix/1264-fleet-unattended-first-start
fix/1269-ci-chain-unblock
fix/1256-fleet-runtime-preflight
fix/1257-e7-draft-transition
fix/1240-fleet-transport-check
fix/1017-wire-start-agent-session
e2e-compose
fix/1241-launch-failure-visible
fix/1237-fleet-v2-dispatch
fix/1236-installer-dir-modes
fix/installer-path-and-node
feat/wf-fleet-mvp
fix/installer-provisions-node
fix/lease-test-env-isolation
release/0.0.50-integration
feat/wf5-main-merge
feat/wf5-securestorage
feat/1216-trunk-resolver
docs/1214-branch-process
docs/ia-merge-current
fix/869-lease-probe-timeout
main
feat/workspace-hygiene-tool-enforcement
feat/1080-pr-edit
fix/1179-required-security-di
feat/p3-slice0-task5-chat-runtime-router-shaggy
feat/p3-slice0-task5-chat-runtime-router
feat/wf1-composition
feat/p3-slice0-task4-web-catalog-selection
feat/lease-promotion-and-harness-isolation
ci/provision-pi-runtime
feat/p3-slice0-task3-catalog-selection
feat/p3-slice0-task2-harness-registry
adopt/965-mos-ste-writing-standard
fix/991-comment-url-scheme-normalise
feat/wf2-bundle-migration
feat/wf4-plugin-acquisition
feat/wf5-refresh-safety
fix/1145-coord-di-compiled-boot
feat/p3-slice0-task1-harness-contracts
docs/webui-phase-p-structure
feat/1150-pi-goal-extension
feat/webui-p3-chat
fix/1146-ci-queue-purpose
fix/1138-conditional-federation
feat/webui-p2-data-auth
fix/gateway-runner-image
feat/webui-p1-vite-skeleton
fix/break-c-hooks-and-web-image
docs/webui-fleet-claude-bridge-plan
fix/wizard-gateway-failure
fix/next-node-gate
fix/mosaic-init-rce
greenfield/fomo-lin
fix/1099-pipefail-wake
fix/1099-pipefail-tests
fix/1099-pipefail-sweep
fix/framework-shell-portability
fix/1043-pane-git-identity
fix/1081-issue-close-silent-comment-failure
fix/1090-enrollment-wallclock-tolerance
feat/1082-tea-stale-token-diagnostic
fix/detect-platform-silent-128-outside-repo
feat/1050-install-state-machine-red-fixture
fix/pr-merge-message-field
feat/1051-mosaic-brain-installer
feat/1045-mosaic-cred
remediation/state
fix/1056-upgrade-rollback-control-race
fix/1019-ci-queue-timeout-harness
feat/rm-02-gate-registry
fix/rm-01-reproducible-checkout
remediation/mission-setup
fix/hygiene-inert-format-gate
fix/1019-queue-guard-stdin
feat/mos-ste-writing-standard
fix/1017-enumeration-guard
fix/1007-suite-hermeticity
feat/push-guard-null-case-verification
feat/wake-preimage-provenance
mos-comms-live
docs/heartbeat-framework-layering-ms-lead
feat/869-c4-version-coupling
feat/869-c2-install-ordering-guard
feat/869-c5-doctor-activation-check
feat/per-agent-gitea-identity
fix/875-belongs-case-insensitive-slug
fix/ci-queue-wait-404-branch-absent
feat/869-c1-activation-probe
feat/869-c3-broker-supervisor
fix/865-tea-cli-comment-invocation
feat/glpi-skills
fix/860-deflake-mutator-lease-gate
fix/850-detect-platform-port-normalization
fix/856-worktree-deps-preflight
fix/835-pr-review-approve-reject-comment-flag
fix/848-truthful-evidence
fix/812-pr-review-comment
fix/849-recovery-runtime-fixture-race
docs/758-ledger-m5-001-sync
feat/834-tc-server-side-doc
feat/833-constrained-recovery-command
feat/827-gate0-probe
governance/gate0-probe3-amendment
fix/795-codex-pr-diff
fix/795-ci-base-jq
fix/795-ci-base-git
feat/791-pr3-fleet-regen
feat/791-pr2-snapshot-restore
fix/807-glpi-206
fix/808-agent-send-false-sender
feat/791-upgrade-config-protection
feat/790-mosaic-yolo-claudex-pr2
feat/790-mosaic-yolo-claudex
feat/758-v1-v2-migrator
fix/766-exact-fleet-comms
test/758-reconciler-lifecycle-gates
docs/771-kbn101-db-role-split
test/758-example-profile-dispositions
feat/758-shared-role-resolution
feat/mos-logical-identity-fencing
feat/769-kbn100-unified-schema
docs/753-kbn010-threat-gate
feat/758-roster-v2-compiler
feat/756-official-discord-plugin
docs/758-fleet-config-management
fix/mos-option2-qualification-format
docs/issue-758-m0
docs/mos-option2-qualification
mos-comms
feat/tess-interaction-agent
fix/tess-docs-format
draft/mosaic-platform-prd
fix/installer-provider-gate-and-local-gateway-redis
release/mosaic-cli-0.0.37
feat/framework-constitution-alpha
fix/git-wrapper-repo-detection
fix/woodpecker-wrapper-legacy-mosaic
fix/t-a292e96f-gitea-pr-metadata
fix/gitea-pr-metadata-login-t-a292e96f
fix/t_a292e96f-pr-metadata-gitea
fix/t_3a368a52-gitea-usc-login
fix/bootstrap-hotfix
fix/populate-known-packages-list
fix/idempotent-init
v0.0.39-alpha
mosaic-v0.0.31
fed-v0.2.0-m2
fed-v0.1.0-m1
mosaic-v0.0.29
mosaic-v0.0.28
mosaic-v0.0.27
mosaic-v0.0.26
mosaic-v0.0.25
mosaic-v0.0.24
v0.2.0
v0.1.0
v0.0.8
v0.0.7
v0.0.6
v0.0.5
v0.0.4
archive/ms24-fork-20260823
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
code-be-01 (Mosaic fleet seat code-be-01)
code-infra-01 (Mosaic fleet seat code-infra-01)
fargo
fred
gate-merge-01 (Mosaic fleet seat gate-merge-01)
happy
jason.woltje (Jason Woltje)
merge-gate
ops-01 (Mosaic fleet seat ops-01)
ops-02 (Mosaic fleet seat ops-02)
ops-03 (Mosaic fleet seat ops-03)
ops-ci-01 (Mosaic fleet seat ops-ci-01)
ops-deploy-01 (Mosaic fleet seat ops-deploy-01)
pepper
rev-code-01
rev-code-02
rev-security-01
rev-security-02
rev-security-03 (Mosaic fleet seat rev-security-03)
sanity
scooby (Scooby)
scrappy
shaggy
tiny
velma
veronica (Mosaic fleet seat veronica)
vision
woodpecker
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mosaicstack/stack#1347
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
The north star describes what the fleet is for, but it cannot say which promise a given goal delivers, and it has no exit test that can fail. That has two consequences:
phaseis doing double duty. It encodes build order, and people read it as priority. Those are different questions and they diverge.Alongside this, several live documents state statuses that the repo contradicts, and one advertises a blocker that does not exist. Stale docs do not merely fail to help an agent, they actively misroute one.
What this issue covers
Tiering the north star and declaring the tier-0 operator surface, plus the doc-neutralisation that goes with it.
AC-NS-0— a tier-0 exit test that can fail: "The operator launches an agent on any configured harness with one command, observes its state and sends it work without attaching to a terminal multiplexer."tier: 0|1|2on every goal and criterion, orthogonal tophase(phase= build order,tier= which promise it delivers).NS-10— an adoption is not complete until the mechanism it replaces is removed.Gdeclared (goalG1referenced a workstream that did not exist).I(operator surface),J(web control plane),K(clients),L(auth profiles).docs/fleet/north-star.mdrenamedFLEET-DOCTRINE.mdwith a precedence header; 19 inbound references rewritten, 14 of them framework role contracts.docs/TASKS.md,docs/federation/TASKS.md,docs/fleet/TASKS.mdmarked superseded.docs/native-kanban-sot/TASKS.mdcorrected instead — it advertised a false blocker, and superseding it would have hidden rather than fixed that.packages/mosaic/src/commands/fleet.tsgainstierin types, validation and render, so the projection cannot silently drop it.Why the generator change is required, not incidental
NORTH_STAR.mdis a projection ofNORTH_STAR.yaml. Adding a field to the source without teaching the generator produces a document that is silently missing the field while the drift check still passes. The field has to exist in types, validation and render for the tier to survive the round trip.Acceptance
tierpresent on every goal and criterion, and validated — a missing or invalid tier fails.NORTH_STAR.mdregenerates from the YAML with the drift check green.north-star.mdfilename survives.Out of scope
The tier-0 implementation work (
I1–I9) that this document declares. Tiering the north star is what makes those items nameable; building them is separate and follows.Also out of scope: the
docs/fleet/NORTH_STAR.yaml→docs/NORTH_STAR.yamlflatten. That is a different change with its own coupling — a hardcoded path inresolveNorthStarPaths()and a test pin atfleet-north-star.spec.ts:197-198— and it gets its own PR.Closing as already delivered. This issue should not have been filed — my error, and the reason is worth recording because it will repeat.
The work described here landed tonight in PR #1337, squash-merged to
nextasaf43a7a6at 23:05:35Z. Same branch, same head:Verification that it is genuinely in
next, not just claimedOf the 27 files the branch touched, zero still differ from current
origin/next:Independent controls, since an empty diff is exactly the result a broken command also produces:
origin/nexttier:occurrences inNORTH_STAR.yamlAC-NS-0occurrencesdocs/fleet/FLEET-DOCTRINE.mdexistsHow I filed a duplicate
I searched for an existing PR with
pulls?state=all&limit=50and got no match, so I concluded none existed. The Gitea API caps that page at 50 regardless of thelimitvalue. #1337 was outside the first page.The same cap bit me minutes later on the branch list —
limit=200returned 50, and the true total was 181 across 4 pages. I caught it there and paginated. I did not go back and re-run the PR search that had already given me a negative on the same flawed assumption. Catching a measurement error in one place and not sweeping for the same error in the others I had already made is the actual mistake here.I also trusted a stale local
refs/remotes/origin/docs/north-star-tiersref as evidence the branch was on the remote. It was not — the branch had been deleted after the merge, which is normal. A local remote-tracking ref is not evidence of a remote branch;git ls-remotewith a control is.Cleanup done
I re-pushed the merged branch before realising, and have deleted it again (
- [deleted] docs/north-star-tiers, verified absent with a passing control). No PR was opened. Nothing else was touched.The tier-0 implementation items (
I1–I9) that this document declares remain open work; they were never in this issue's scope.