feat(lint): broken-link check + lint before push; drop scan-stage tool#75
feat(lint): broken-link check + lint before push; drop scan-stage tool#75sVIKs wants to merge 1 commit into
Conversation
AI ReviewPorts the Checklist
U5 detail: Issues found[warning] U6 — CLI exit-code contract changed for existing CI consumers The Python python3 .../scan_stage.py stage.zip --quietand gates on the exit code will silently break after this change: it will always exit Suggested fix: Add a one-line migration note near the top of SKILL.md (e.g. "⚠ If you previously gated CI on the Python exit code, replace with This review was generated automatically. A human maintainer should still make the merge decision. |
|
Stepping back from the code — I'm not convinced this tool belongs in the plugin right now. The plugin has no whole-stage operation: Its real audience is support/integration work (auditing exported stage zips) and Corezoid-UI stage merges — both orthogonal to what the plugin does today. Two ways to make the work land without carrying dead weight:
Suggest deferring the merge and doing (1) as a smaller PR against |
Reworked per maintainer feedback: validation should be lint, run right
before push — not a separate stage-scan tool.
- lint-process gains broken node-link detection: a logic
to_node_id/err_node_id/go_to/goto or a semaphor to_node_id/esc_node_id
pointing at a static 24-hex node id absent from the process. The
server rejects such a deploy ("referenced node does not exist");
now caught offline. Dynamic {{...}}/@alias targets resolve at deploy
and are left alone. (Salvaged from the former stage-scan tool.)
- push-process runs lint before deploying and blocks on issues that
would break the deploy or its callers (broken links, old-format,
RPC-without-reply, missing default go, sub-30s timers, literal reply
values); advisory findings are shown but do not block; force=true
overrides.
- Standalone stage-export scanner removed: the corezoid-stage-scan skill
and scan_stage.py are gone. Its per-process check moved into lint;
cross-process conv_id/api_get_task validation is left to the server,
which already rejects bad references on deploy, rather than
duplicated offline.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
d7c63a5 to
f67ab50
Compare
|
Reworked this PR per the feedback that validation belongs in lint-before-push, not a separate tool. Pivot: dropped the
Force-pushed; title and description updated. Gates green ( |
AI ReviewRe-review after synchronize: reworks the PR from a Checklist
U5 detail: Fixed since last review ✅
Issues found[warning] U6 — Advisory lint findings are silently discarded by The tool description in
The PR body also says: "advisory findings are shown but do not block." But the if hard > 0 && !force {
return "Push blocked: ...\n\n" + FormatLintResult(lintRes), true // shown + blocked
}
if hard > 0 && force {
fmt.Fprintf(os.Stderr, "[lint] %d blocking issue(s) overridden\n", hard)
// FormatLintResult still not returned to the caller
}
// hard == 0 → falls through silently; advisory-only findings are never shownWhen a process has only advisory findings and no hard findings, the push succeeds with zero lint output. The user or AI agent never sees the advisory issues. Concrete failure scenario: an agent pushes a process that has 3 noop conditions and an orphaned node. All go silently into production. Later a standalone Suggested fix (two options):
This review was generated automatically. A human maintainer should still make the merge decision. |
What
Reworked per maintainer feedback: pre-deploy validation should be lint, run right before push — not a separate stage-scan tool. So this PR no longer adds a
scan-stagetool; instead it folds the one salvageable check intolint-processand makespush-processlint automatically.lint-processgains broken node-link detection — a logicto_node_id/err_node_id/go_to/goto, or a semaphorto_node_id/esc_node_id, pointing at a static 24-hex node id that is absent from the process. The server rejects such a deploy ("referenced node does not exist"); now caught offline, before the round-trip. Dynamic{{...}}/@aliastargets resolve at deploy and are left alone.push-processruns lint before deploying and blocks on issues that would break the deploy or its callers: broken links, old-format nodes, RPC paths without reply, nodes missing a defaultgo, sub-30s timers, literal reply values. Advisory findings (noop, unused set_param, orphans, passthrough, shared clusters) are shown but do not block.force=trueoverrides.corezoid-stage-scanskill and itsscan_stage.pyare gone. Its per-process check moved into lint (above); the cross-processconv_id/api_get_taskreference checks are left to the server, which already rejects bad references on deploy — no point duplicating them offline (they'd need to fetch the whole stage anyway).Net: 172 insertions / 400 deletions — the change removes more than it adds.
Verified
go build,go vet,go test -race ./...green;TestToolRegistryMatchesREADMEgreen.err_node_idreports=== BROKEN NODE LINKS (1) ===with a precise message.POWER.md(skill count + capability), the main skill's list,install-kiro.sh, andpublic/discovery artifacts all updated; no dangling references remain.🤖 Generated with Claude Code