fix(claude-ops): resolve built-in descriptions the inventory left unresolved - #5619
kyle-sexton wants to merge 36 commits into
Conversation
…esolved The inventory now follows a call with arguments into its function with the parameters shadowed, resolves template substitutions, || and ?? fallbacks, parenthesized parts and joined arrays, and resolves identifiers by module (import to the exporting module, else the module itself). On Claude Code 2.1.285 unresolved descriptions drop from 14 to 1 (design). Detect scores PascalCase native names as words and scores the user-facing name, and native_drift files an unresolved-description item for each name the previous summary did not list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-tool-descriptions # Conflicts: # plugins/claude-ops/.claude-plugin/plugin.json # plugins/claude-ops/CHANGELOG.md
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @kyle-sexton's task in 44s —— View job Security review — PR #5619
No security issues found. Reviewed all 10 changed files (
None of the changed files are |
|
Claude finished @kyle-sexton's task in 6m 36s —— View job Code review complete
SummaryReviewed the diff against One finding posted inline, worth the author's attention but not necessarily blocking:
There is test coverage for "an old-shape previous summary (missing the field) files every name once" via a non- Everything else reviewed (module-scoped resolution rules, PascalCase splitting, |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 337bf9182a
ℹ️ 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".
Keep single-letter bindings inside their module, take a later module binding only from inside a function body, prefer a resolved left operand over its || or ?? fallback, and record the 2.1.285 bundle claims as verification records. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 21s —— View job Security review — PR #5619
No security issues found. Reviewed all 10 changed files (diff scoped to
None of the changed files are |
|
Claude finished @kyle-sexton's task in 5m 5s —— View job Code review complete
SummaryReviewed All four prior Codex findings are fixed, each with a new regression test:
One new finding on the fix itself, posted inline on Not re-raised: the earlier open question about Verification claims in the PR body (test counts, before/after unresolved-description counts, timing) are author-reported and not independently re-run here — this lane has no execution access. |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b32c7081bf
ℹ️ 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".
…strings A binding after the reader is taken only when the read is reached through a getter, method, arrow or function-valued field and the binding is top-level, so an eager call at load time stays unresolved. `??` keeps any string left operand, including "". Document and test why a baseline drift run files every unresolved description. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
Claude finished @kyle-sexton's task in 1m 29s —— View job Security review — PR #5619
No security issues found. Reviewed the full diff (
This confirms the two prior security-review passes on this PR (head |
|
Claude finished @kyle-sexton's task in 3m 27s —— View job Code review complete
SummaryReviewed Both are fixed correctly, each with a regression test:
Also in this commit: No new findings. I did not find additional correctness issues in this commit's diff. Static trace only — this lane has no code-execution access, so |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b4450688b3
ℹ️ 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".
…iant A plain parameter takes the values its call-site argument resolves to, a concatenation keeps every combination of its parts' values (capped at 16), and a fallback keeps the left operand's non-empty variants; a call or group on the left never settles a fallback, since it can yield a non-string. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b3be945bbd
ℹ️ 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".
…-tool-descriptions # Conflicts: # plugins/claude-ops/.claude-plugin/plugin.json # plugins/claude-ops/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 2m 45s —— View job Code review complete
SummaryScoped to the 10 changed files ( The one gap: three P2 findings Codex posted against
None of these are newly introduced by the merge commit — they're latent in logic added by |
|
Claude finished @kyle-sexton's task in 57s —— View job Security review — PR #5619
No security issues found. Reviewed all 10 changed files (
This confirms the four prior security-review passes already posted on this PR across earlier commits, which also found no issues; this pass covers the full current head ( |
|
@codex review |
|
Claude finished @kyle-sexton's task in 5m 29s —— View job Code review complete
SummaryThe only commit since the last reviewed head ( Two of three are fixed correctly:
Both fixes introduce a new gap, each posted inline:
Both are static traces (this lane has no code-execution access, consistent with every prior round on this PR) but are mechanical regex/logic derivations I'm confident in. Not re-raised: everything else fixed across this PR's ~50 review rounds (module-boundary resolution and visibility, deferred-read tracking, |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 606bfb37b4
ℹ️ 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".
…ate-aware masking Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 6m 20s —— View job Code review complete
SummaryThe only commit since the last reviewed head ( Both traced and confirmed fixed for the cases their new tests cover:
Also in this commit: One new finding, posted inline on Not independently re-run: Not re-raised: everything else fixed across this PR's ~50 review rounds (module-boundary resolution and visibility, deferred-read tracking, Branch · |
|
Claude finished @kyle-sexton's task in 1m 23s —— View job Security review — PR #5619
No security issues found. This PR has been through many security-review passes on prior heads ( Five commits landed in that window (
No other files changed in this window: The PR's full changed-file set (10 files) remains confined to Branch · |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f1d3a04ae6
ℹ️ 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".
- A `var` statement is found by walking back over balanced brackets, so an earlier declarator's call initializer (`var a=f(1,2),xx=`) no longer hides it and a later hoisted `var` still shadows. - A one-letter binding read inside a function is unresolved when that function declares the name again after the read. - A nested function whose parameter list holds parentheses (`inner(a=g())`) is recognized, so its returns stay out of the caller. - Integer literals render only up to 15 digits, below 2**53, where a JS double prints them exactly. No description on Claude Code 2.1.285 changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # plugins/claude-ops/.claude-plugin/plugin.json # plugins/claude-ops/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 6m 58s —— View job Code review complete
SummaryScoped to what changed since the last reviewed head (
Not independently re-run: Not re-raised: everything else fixed across this PR's ~55 review rounds (module-boundary resolution and visibility, deferred-read tracking, |
|
Claude finished @kyle-sexton's task in 1m 19s —— View job Security review — PR #5619
No security issues found. This PR has been through many clean security-review passes on prior heads ( Two commits landed in that window:
No other files changed in this window. The PR's full changed-file set (10 files) remains confined to Branch · |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1cbce94b40
ℹ️ 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".
… heads - A declaration with no initializer (`let x;`, `var x` after the read) or a `catch (x)` parameter between a binding and its read leaves the read unresolved, for long and one-letter names; an imported binding is checked against the reader's own module only. - A nested function head is matched with quoted text blanked, so a default such as `sep=")"` is recognized; an unreadable head raises, which leaves the value unresolved. - A parameter followed in its statement by `]=` or `}=` counts as written, so nested destructuring unbinds it. No description on Claude Code 2.1.285 changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
Claude finished @kyle-sexton's task in 1m 4s —— View job Security review — PR #5619
No security issues found. This PR has been through many clean security-review passes on prior heads ( The only commit in that window is
No other files changed in this window. The PR's full changed-file set (10 files) remains confined to Branch · |
|
Claude finished @kyle-sexton's task in 6m 17s —— View job Code review complete
SummaryThe only commit since the last reviewed head (
Re-verified the previously open finding (my own comment on the Two non-blocking precision notes, both fail-safe (can only turn a real value into
Not independently re-run: this lane has no code-execution access ( No new findings. Every finding raised across this PR's ~55+ review rounds has been fixed with regression tests and independently re-verified, and this round's commit closes the three remaining open items with no new issue found. Branch · |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 121806dd6e
ℹ️ 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".
…eads
- A `let` or `const` in a `for (...)` head is visible only in that loop;
an unbraced loop body raises, leaving the value unresolved.
- Method and function parameter lists are matched with quoted text
blanked (`_head_open`), so `a="("` no longer drops a parameter from
the shadow scope.
- A function declaration whose parameter list holds parentheses leaves
calls to that name in its module unresolved instead of falling back
to another declaration.
No description on Claude Code 2.1.285 changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
Claude finished @kyle-sexton's task in 5m 16s —— View job Code review complete
SummaryThe only functional commit since the last reviewed head (
One finding, posted inline on Not independently re-run: Not re-raised: everything else fixed across this PR's ~55 review rounds (module-boundary resolution and visibility, deferred-read tracking, Branch · |
|
Claude finished @kyle-sexton's task in 1m 27s —— View job Security review complete
No security issues found. This PR has been through many clean security-review passes on prior heads ( Two commits landed in that window:
Full diff against the merge-base with Branch · |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e4b2d08a9d
ℹ️ 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".
| block=True, | ||
| hops=hops, | ||
| anchor=anchor, | ||
| shadow=shadow, |
There was a problem hiding this comment.
Shadow catch parameters before scanning catch bodies
When a followed function parameter is rebound by a catch parameter, this recursive scan preserves the call-site binding. For example, function ff(x){try{throw "LOCAL"}catch(x){return x}} called as ff("REAL") is extracted as REAL, although JavaScript returns LOCAL. Fresh evidence beyond the earlier catch-binding fix is that _resolve_chain short-circuits names already present in shadow, so the declaration-only guard never runs; extend the nested block scope with catch parameters before scanning it.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
VALID, not fixed on this head. Basis: verified by trace: the call-site binding of x sits in shadow, so the catch-parameter guard in _binding_value never runs. This head reaches the review-round cap the operator set for this PR, so the fix (add catch parameters to the scope of the recursive catch-block scan) is left for the operator to schedule. Leaving open.
| k = _open_paren(src, j) | ||
| if k is None or not _CONTROL_HEAD_RE.search(src, max(0, k - 16), k): |
There was a problem hiding this comment.
Mask literals when identifying control-flow blocks
When a control condition contains an unmatched parenthesis character in a string, _function_block feeds the raw source to _open_paren and can classify the control block as a function body. For example, var xx="WRONG"; function ff(){if(a==="("){var xx="REAL"}return xx} resolves ff() as WRONG, even though the local var is function-scoped and the runtime result is REAL or undefined. Fresh evidence beyond the earlier method-parameter fix is that this separate backward scan still ignores quoted text; use the masked balanced-head lookup here as well.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
VALID, not fixed on this head. Basis: verified by trace: _function_block still matches the control head with raw text, so a quoted ( in an if condition misclassifies the block as a function body. The fix is to use _head_open (the masked matcher) there too. This head reaches the review-round cap the operator set for this PR, so the fix is left for the operator to schedule. Leaving open.
No related issue: operator-directed fix from the 2.1.284/2.1.285 native-surface review (ClaudeDesign had an empty description, so detect never paired it).
Summary
inventory.pyleft 14 built-in descriptions unresolved on Claude Code 2.1.285 (13 tools plus thedesignbundled skill). It now resolves 13 of them.designstays unresolved because its text reads a table keyed by a runtime mode. Detect also scores native names that have no description, and native drift now files each newly unresolved description.Fix
inventory.py). A call with arguments (kbr(RTe()),gLr(void 0),P({...})) is now followed into its function, with that function's parameters shadowed. Template substitutions resolve, and so do||/??fallbacks (an empty""fallback is skipped), parenthesized parts such asd+(x()?m:c)+p, and[...].join(sep)arrays. A template made only of runtime parts stays unresolved.workflow-authoring's${jd}readsWorkflow, not another module's localhost_exit. A single-letter function resolves only when it is the one top-level declaration in its module.discover.py). PascalCase native names are split into words (ClaudeDesignscores as "design",EnterWorktreeas "enter worktree").user_facing_nameis scored. It is not added to the dismissal fingerprint, soaudit-native-overlap/SKILL.mdstays accurate.native_drift.py).summarizerecordsintegrity.undetermined.description_unresolved.diffadds anunresolved-descriptionitem (keynative-drift:unresolved-description:<name>:inventory) for each name the previous summary did not list. These items go through the existing key-based filing path, with no label.context/native-drift.mddocuments the new kind and its title.claude-ops0.75.1 -> 0.76.0, with a CHANGELOG entry.docs/native-surfaces/records.jsonand all skill bodies are unchanged.Verification
test_inventory.py: 144 tests OK (10 new synthetic-bundle cases, negative cases included).test_overlap.py: 182 OK.test_native_drift.py: 40 OK.overlap.test.shandnative_drift.test.shexit 0. The pinnedscripts/run-ruff.sh check/format,markdownlint-cli2andtyposall pass.inventory.py --self-checkon the installed 2.1.285 exits 3 with only the version advisory, the same result asorigin/main. All lanes are ok. The run takes about 12 s (11 s before).ALWAYS use Grep ... as a Bash command,workflow-authoringWorkflow, and Edit user-facing nameUpdate.overlap.py detect --inventory <2.1.285> --repo .goes from 23 to 50 candidates. The operator rules on the new candidates and on the dismissals that came back because their descriptions changed.Related
🤖 Generated with Claude Code