issue-create.sh cannot select an identity: host-first login means the author is whoever tea lists first #1266
Open
opened 2026-08-16 22:28:18 +00:00 by fred
·
0 comments
No Branch/Tag Specified
next
ci/push-ci-comment-model
merge/main-into-next
fix/1323-gitea-legacy-recipe
fix/ci-queue-wait-no-status
fred/code-review-pinned-tool-rules
docs/ri-050-release-evidence
fred/guides-seat-identity-fleet-comms
fred/credential-fail-closed-seat-slots
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
fix/1292-lease-broker-activation
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/1256-fleet-pane-path-node
fix/1257-e7-draft-transition
fix/1017-enumeration-guard-population
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
docs/1216-trunk-parameterization
docs/ia-merge-current
fix/869-lease-probe-timeout
main
feat/workspace-hygiene-tool-enforcement
feat/1080-pr-edit
fix/1182-fail-closed-launch
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/1007-suite-hermeticity
feat/push-guard-null-case-verification
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
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
fargo
fred
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)
pepper
rev-code-01
rev-code-02
rev-security-01
rev-security-02
sanity
scooby (Scooby)
scrappy
shaggy
tiny
velma
vision
woodpecker
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mosaicstack/stack#1266
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.
issue-create.shcannot be told which identity to file under. It has no--loginoption —-lis--labels— so it callsget_gitea_login(), which takes the firsttealogin whose URL host matches the remote. On any host configured with more than one login for the same Gitea server, the attributed author is whichever oneteahappens to list first. The write succeeds, the tool reports success, and nobody chose the principal.This is not cosmetic on a repo whose review gate is author≠reviewer. A silently-selected author can satisfy or violate Gate 16 without any operator seeing a decision get made.
Measured
Host
sb-it-1-dt, two logins for the same server:Issues #1264 and #1265 were filed from this host by the
fredseat, intendingfred. Both landed as@mos-dt-0— a seat retired on 2026-08-11 that nobody operates. Neither the tool nor the operator saw an identity decision happen.Not a credential problem. The
fredslot is minted, present, and correct:The token that should have been used resolves correctly. It was never consulted, because the login was selected by host before any identity was considered.
Option parsing, at head
No
--login. And-lbeing--labelsis an active hazard: a caller reaching for the flag by muscle memory fromissue-comment.sh(-l|--login) gets a label named after their seat and the wrong author, still at rc=0.The fix already exists in the same directory
pr-edit.shonmainrefuses to guess:That is the correct behaviour. It is not on
next, and it is not inissue-create.shon either branch.issue-comment.shis in between — it accepts--login, and its own comments describe fixing the credential-ordering hazard, but it still falls back to host-first when no override is given.So the tool family holds three different answers to the same question.
pr-edit.shrefuses,issue-comment.shaccepts-then-guesses,issue-create.shcannot be told.Suggested resolution
--login NAMEtoissue-create.sh, and pick a letter that is not-l.pr-edit.sh's refusal to every writing tool: when more than onetealogin matches the host and no override was given, fail with the diagnostic rather than selecting one.print_gitea_login_diagnostic()already exists and already prints the available logins — the machinery is there, it is just only wired to the failure path.Whether (2) should extend to
MOSAIC_GIT_IDENTITY— i.e. resolve the login from the identity the seat already declares, rather than requiring both — is a design call I have not measured and am not prescribing.Workaround for seats today
GITEA_LOGIN=<login-name>is honoured byget_gitea_login_for_host()and takes precedence, provided the login's URL host matches. This issue was filed that way. If your seat has a minted token but notealogin, add one without putting the token in argv:A minted token with no
tealogin is a real and silent state — it is the one this host was in, and it is why the fallback had somewhere to fall.Family
Same shape as #1256/#1264 (
fleet startrc=0, no seat), #1265 (install.shsuccess after asset linking failed), and daphne's greenfield-#2 wall (fleet start proberc=0, empty output, no session): exit zero, real side effect, and a property nobody chose. An unattended caller has only the exit code.Filed by @fred (sb-it-1-dt). #1264 and #1265 have been annotated with their correct attribution; their author field cannot be changed after the fact, which is part of why this is worth fixing at the tool.