Skip to content

refactor(visualization): route check-deck's K2 refusal through its local-result helper - #12765

Open
melodic-automation-lanes[bot] wants to merge 1 commit into
mainfrom
chore/tidy-adhoc-plugins-visualization-2026-11-03
Open

melodic-automation-lanes[bot] wants to merge 1 commit into
mainfrom
chore/tidy-adhoc-plugins-visualization-2026-11-03

Conversation

@melodic-automation-lanes

Copy link
Copy Markdown
Contributor

No related issue: code-tidying upkeep sweep.

Summary

Ad hoc tidy sweep of plugins/visualization/** from c8b364bcf (anchor: none, ad hoc). Structure-only edit to skills/present/scripts/check-deck.mjs. lib/* was skipped because those files are shared copies, and reference/*.html was skipped because it is browser-rendered (SOFT).

Fix

  • Beck feat: markdown-formatter plugin (pilot migration) #3, Normalize Symmetries: checkDeck's local() helper takes an optional extra-fields argument, and the K2 refusal is built through it instead of by hand. The emitted JSON keys (medium, class, reason, refused) and their order are unchanged.
  • P-2, stale reference: the header usage comment now lists hosted among the --argument values, matching the parser, the printed usage line and present/SKILL.md.
  • .changes/visualization/ patch fragment.

Verification

  • bash plugins/visualization/tests/present.test.sh: 52/52 pass, before and after.
  • scripts/check-affected.sh --base c8b364bcf --no-fetch: 10 passed, 5 skipped.

Related

  • Deferred by the scope budget: none.

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

claude-security-review reviewed 083802201d3d9d8fbbccadcba5ce7567482e856c: read 2 of 2 changed file(s); 0 finding(s), 0 as inline comments.

Security review: PR #12765

I found no security issues in this pull request.

I read every hunk of both changed files. Neither file matches a trusted-path glob, and no plugin manifest is touched.

  • plugins/visualization/skills/present/scripts/check-deck.mjs
    • The local() helper now accepts an optional extra object that is spread into the result. Its only caller is the K2 refusal, which passes the fixed shape { refused }.
    • The emitted keys and values are unchanged: medium: "file", class, reason and refused. The exit code is still 1.
    • The checks that run before the K2 branch are unchanged: the symlink and realpath check, the work-tree check and the title check. trustedMedium(layers) and its medium selection are also unchanged.
    • Nothing user-controlled reaches extra, so the spread cannot override medium or class.
    • The header usage comment now lists hosted. That is comment-only.
  • .changes/visualization/…fa6c9917.md: a changelog fragment with no security surface.

The PR context contains no embedded instructions. Prior findings: none (0 rounds; the round cap of 3 has not been reached).

critical-findings: 0

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

claude-review reviewed 083802201d3d9d8fbbccadcba5ce7567482e856c: read 2 of 2 changed file(s); 0 finding(s), 0 as inline comments.

Code review: no findings (I read every hunk of both changed files.)

This is a structure-only tidy of plugins/visualization/skills/present/scripts/check-deck.mjs plus a patch changelog fragment.

  • local() helper: it now takes an optional extra object and spreads it after reason. The K2 refusal therefore emits { medium: "file", class, reason, refused } with exit 1, the same keys in the same order as the hand-built object it replaces. Behaviour is unchanged. extra comes after the fixed keys, so it could overwrite them, but its only caller passes { refused }.
  • Header usage comment: it now lists hosted for --argument. That matches the parser at check-deck.mjs#L239 and the printed usage line at #L245.
  • Changelog fragment: bump: patch fits a refactor with no behaviour change.
  • No closing issue: the PR description says none, so there were no acceptance criteria to check.
  • Unverified claims: the test results in the PR description (52/52 present.test.sh, check-affected.sh) are the author's. I had no shell, so I did not run them.
  • No hold: neither changed file is on the trusted-path list, and nothing here costs money.

@melodic-automation-lanes

melodic-automation-lanes Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor Author

Unattended merge: native auto-merge leaves this pull request unarmed at head 083802201d3d9d8fbbccadcba5ce7567482e856c. The lanes clear this reason on their own; the next scheduled run judges it again.

a pr-unblock lane stopped its head (pr-unblock/address-feedback is failure), which clears when the
  lane runs again

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The pr-verify verifier failed head 083802201d3d9d8fbbccadcba5ce7567482e856c. What it wrote, as data:

Summary: PR #12765 has no spec to judge against. spec.json and spec-text.json are both empty arrays:
  the PR closes no issue, has no `Refs:` line, and spec-text.json holds no pull-request entry. The
  rules require `fail` when there is no spec. The diff itself is a small, behavior-preserving tidy
  of check-deck.mjs and shows no correctness or safety defect. The test-bash (0) job passed, and
  test-bash is the lane that runs the wrapped present.test.mjs suite.
- pr-verify-data/spec-text.json: empty, so there is no trusted spec text. The PR body says "No
  related issue: code-tidying upkeep sweep." and names no issue to close or reference. To fix, link
  a trusted issue that asks for this tidy, with `Closes #<n>` or `Refs: #<n>`, or have a trusted
  person or script write the PR title and body so they count as the spec.
- plugins/visualization/tests/present.test.mjs: CI runs this suite through its wrapper
  present.test.sh, and that wrapper's lane, test-bash (0), concluded success on the judged head
  (https://github.com/melodic-software/claude-code-plugins/actions/runs/41590663435/job/125818515830).
  test-node was skipped, which is expected because the suite runs only through its wrapper.
- plugins/visualization/skills/present/scripts/check-deck.mjs:32: `local()` now takes an optional
  `extra` argument that is spread after `reason`. The K2 refusal at line 43 still emits the keys
  medium, class, reason, refused in the same order, so the output does not change.
- plugins/visualization/skills/present/scripts/check-deck.mjs:22: the header usage comment now lists
  `hosted` among the `--argument` values. This edits a comment only.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

pr-unblock / address-feedback: UNCERTAIN, left open

Evidence: plugins/visualization/skills/present/scripts/check-deck.mjs:213

The verifier failed this head only because the pull request has no spec: it closes no issue, carries no Refs: line, and spec-text.json is empty. Its own notes find no correctness or safety defect in the diff. The K2 refusal at check-deck.mjs:213 still passes { refused } through local(), and the usage comment at check-deck.mjs:11 lists hosted, both behavior-preserving as the verifier says. The missing spec cannot be supplied by a file change in this thread's scope: it needs a trusted issue linked with Closes or Refs in the pull request body, or a trusted person writing the title and body. Leaving this open for a person to link a spec or accept the tidy without one.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Answered in #12806, an owner-login replacement. Its title and body are trusted spec text, which this head lacked. It also changes the code: local() in check-deck.mjs takes the refusal list as a named argument instead of an open extra spread that could overwrite medium or class, and a new test in present.test.mjs pins the K2 refusal keys and order. Tests: 55/55 pass. This PR is held as superseded.

@melodic-automation-lanes

melodic-automation-lanes Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor Author

The pr-unblock lane stopped address-feedback on this pull request: the pull request has an unresolved review thread the lane does not take (a reviewer it does not act on, a review of an older head, or a thread it already answered), so no lane resolves it and a session builder takes it. The lane labels it needs-session for a session builder, who makes the change this lane cannot, and the run ends in a failing pr-unblock/address-feedback status on the head the lane gated.

When a retry on this head can change the outcome, the lane runs one on its own, up to its per-head cap, and edits this comment if it stops again; a run that does not stop clears the status. When no retry can (a review thread the lane does not take or settle, or a failing check after the retries are spent), a person resolves the threads or gets the checks green, then dispatches the workflow below: that run finds the cause gone and clears the status. On a pull request the lanes App opened, the dispatchers start that run once per stop; on any other, a person does. A new commit to the branch starts clean.

To run it again on this head now, dispatch the pr-unblock workflow:

gh workflow run pr-unblock.yml -R melodic-software/claude-code-plugins -f pr-number=12765 -f activity=address-feedback

@melodic-automation-lanes

Copy link
Copy Markdown
Contributor Author

pr-unblock / address-feedback finished round 1 of max 4 on 0838022.

@melodic-automation-lanes melodic-automation-lanes Bot added the needs-session A pr-unblock stop a session builder takes: a change the lane cannot make. Not an owner stop. label Nov 3, 2026
@kyle-sexton kyle-sexton added the do-not-merge Hard merge gate: do not merge while applied. label Nov 3, 2026
@kyle-sexton

Copy link
Copy Markdown
Member

Hold: superseded by #12806, an owner-login replacement. Releases when: #12806 merges, then this PR closes.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge Hard merge gate: do not merge while applied. needs-session A pr-unblock stop a session builder takes: a change the lane cannot make. Not an owner stop.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant