Skip to content

extdeps.os.id - #10285

Closed
briansrls wants to merge 3 commits into
mainfrom
session/keen-moth-880
Closed

briansrls wants to merge 3 commits into
mainfrom
session/keen-moth-880

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session keen-moth-880.
Pushing to session/keen-moth-880 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

Brian Searls and others added 3 commits September 3, 2026 12:39
…ero-consumer ruling request

The census's §5.A table still read `extdeps.os.id` as a NEW op at
`dag/extdeps/os/id.dag` -- the stale row a survey read as "still pending". The
op landed on #7194 at its post-#7231 home `dag/extdeps/tools/id.dag` (module
`extdeps.tools.id`, service `os.Id`, ops `Uid`/`Gid`/`Lookup`), hermetic witness
`test.claim.shell_dag_census_5a_typed_ops_witness` (`witness_os_id_uid_realizes_hermetically`,
`witness_os_id_gid_realizes_hermetically`, `witness_os_id_lookup_realizes_hermetically`).
The row now says so, cited by module and symbol rather than position, and the
consumer column states the true status: `host_effect_realize`'s ssh probes
already consume the typed argv rows `id_uid_argv`/`id_gid_argv` (absolute-path
variants), and `fleet_posix_accounts` `probe_command` is NOT-a-shell-site
(census §4 row) -- authored provenance, live proof `deploy_access_check_observed`.

The same PR files a ruling request, not a deletion: `id_lookup_argv` (the
`id <user>` verb) has zero production references -- measured denominator, grep
of `dag/` + `src/v2/test/` at `75873c2897`: the definition, the hermetic-witness
call, and service-name rows in the effect-plan tests, nothing more. Zero
references is not deadness in this repo (env-gated and emitted-path consumers
exist that grep does not see), and the row's named consumers are reclassified
(`fleet_posix_accounts` -- NOT-a-shell-site) or deferred
(`spark/managed_access_apply` create-script bodies -- dissolve-on marker, no
operator verdict). Retain-as-reserved or retire is the operator's call; the row
records the measured denominator and asks for it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…d §5.A row

RULING (2026-09-03): retire extdeps.tools.id.id_lookup_argv. No measured
production consumer; the semantic os.Id.Lookup already names the intended
request; a future consumer should consume IdLookup/IdInvocation and choose an
SSH realization, not resurrect a raw List<String> argv helper. Keeping it
"reserved" would preserve the lower-level interface the migration exists to
make unavailable — a future need is the trigger to add a typed remote
realization, not evidence that the helper should survive.

Deleted from dag/extdeps/tools/id.dag. The module's sole production import
(dag/gunbc/host/host_effect_realize.dag:69) imports id_uid_argv, id_gid_argv
and id_binary_path only — no reference to id_lookup_argv exists in the code
tree. The witness (test.claim.shell_dag_census_5a_typed_ops_witness,
witness_os_id_lookup_realizes_hermetically) exercises os.Id.Lookup, the
semantic op — NOT the deleted argv helper — and is unchanged.

CORRECTION (second finding): the §5.A row overstated by claiming "Done" when
the hermetic operation witnesses had landed but the model-before-implement
scope (call-site migration a later lane, the superseded argv/string path still
standing, remaining SSH callers dispositioned independently) does not support
that word. The row now says honestly: "operation model + hermetic operation
witnesses have landed" and explicitly what is NOT done instead of claiming
closure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The ruling record directed future consumers to `IdLookup`/`IdInvocation`,
neither of which exists in the tree. `os.Id.Lookup` is the actual semantic
operation — cite it directly, with the two plausible typed SSH-realization
paths (`ssh.Session.ExecArgv` on `id <user>`, or a full `IdLookup` invocation
modeled on the `os.Hostname.Set`/`HostnameSetInvocation` pattern) so a
migration worker is not left to guess. No changed symbols or fabricated
interfaces. DESIGN §3 single-authority and "cite the symbol" rules satisfied.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@briansrls
briansrls marked this pull request as ready for review September 3, 2026 21:17
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-03T21:19:41.159239Z cf445a8 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cf445a80a1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

| `ssh.Session.ExecArgv` | **add to** `dag/extdeps/diagnostic/ssh.dag` | typed argv over ssh (`ssh host -- argv`) | `host_effect_realize` ssh probes — **IN FLIGHT, C5 #6946** |
| `systemd.Systemctl.Status` | **add to** `dag/extdeps/os/systemctl.dag` | `systemctl status --no-pager --full <unit>` (models exit-3-for-dead-unit — retires the `\| tail`+`exit 0` absorbing fallback) | `live_deploy/readiness.dag` unit diagnosis |

**RULING — `extdeps.tools.id.id_lookup_argv` RETIRED and deleted (ruled 2026-09-03).** The retirement is on the ruling, not on the zero-reference count: `os.Id.Lookup` (the semantic operation) already names the intended request; a future consumer should consume `os.Id.Lookup` and choose a typed SSH realization (`ssh.Session.ExecArgv` on the `id` binary with a `{user}` argument, or an `IdLookup` invocation modeled on the `os.Hostname.Set`/`HostnameSetInvocation` pattern) — not resurrect a raw `List<String>` argv helper because it sat in inventory. Keeping it "reserved" would preserve exactly the lower-level interface the migration exists to make unavailable. The measured denominator (filed 2026-09-03) found no production reference — the §5.A witness calls `os.Id.Lookup`, NOT this helper — but a future need is the trigger to add a typed remote realization, not evidence that the helper should survive.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Do not prescribe the legacy ExecArgv path

When a future lookup receives a username containing whitespace or shell metacharacters, the suggested direct ssh.Session.ExecArgv realization does not preserve that value as one remote argument: dag/extdeps/ssh/session.dag:36-40 explicitly marks this operation for dissolution because SSH carries a single command string, and lines 49-63 explain that OpenSSH joins and remotely shell-parses the words. Since os.Id.Lookup.user is only a NonEmptyStr, following this new ruling can turn the username into shell syntax unless the caller separately uses the portable-word refusal wall. Point the ruling to ExecPortableWords/the guarded fleet SSH seam or only to the proposed typed IdLookup realization instead.

Useful? React with 👍 / 👎.

@gunbai-bot

gunbai-bot Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Closing: this PR has no content to land, and merging it would REVERT work already on main.

It was auto-opened on session/keen-moth-880 after #10233 squash-merged. Everything it carries is already on main via that merge (20b1b8f) -- the id_lookup_argv retirement, the corrected section 5.A row, and the ruling record that points at os.Id.Lookup.

The branch is 37 commits behind main, and the ONLY remaining difference is a stale row: this branch still carries the OLD hostname census entry (extdeps.os.hostname, "hostnamectl set-hostname remains") while main carries the newer one from #10211 (extdeps.tools.hostname, "LANDED, then migrated"). So the sole effect of merging would be to regress that row to a pre-#10211 state.

The CI failure on the older run is also not this branch's defect: it inherited the duplicate-declaration refusal in gunbc.recurring_failure_mode that was breaking main itself, fixed since by #10278.

No fix is warranted and none should be pushed. Further work on this lane should branch fresh from main.

@gunbai-bot gunbai-bot Bot closed this Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant