Repository navigation
Conversation
The previous change regenerated this file with `charly candy params`, which is NOT the instrument this repo is graded on. The org's reusable candy-validate gate and this repo family's CI run plain `cue exp gengotypes` at cue@v0.16.1; the charly wrapper applies a yaml retag and reflows doc comments, so its output differs from the canonical one on the SAME schema. Measured with the canonical instrument against main after that change: cue@v0.16.1 gengotypes vs the committed file -> 14 diff lines (FAIL) Restoring the file to exactly what cue@v0.16.1 emits, so the committed projection matches the gate that grades it. Nothing else changes. Assisted-by: DeepSeek Harness deepseek-v4.1-flash (analysed on a live system)
Review — BLOCKHead SHA: Change class: generated artifact — one generated Go file ( Blocks
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
Body-only round: the decode-path proof (JSON never YAML), the filed issue, and the untrimmed module gate are now in the PR body. A REST re-run replays the original event payload and re-reads the stale body, so a new head is the way to make the gate read what GitHub serves. Empty by design. Assisted-by: DeepSeek Harness deepseek-v4.1-flash (documentation reviewed)
Review — BLOCKHead SHA: Change class: generated artifact — one generated Go file ( Comment disposition:
Blocks
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
Body now carries executed proof instead of static reading: the same JSON decode run against BOTH projections of the schema, with identical results, plus literal grep output. A REST re-run replays the original payload, so a new head is what makes the gate read the served body. Empty by design. Assisted-by: DeepSeek Harness deepseek-v4.1-flash (documentation reviewed)
Review — BLOCKHead SHA: Change class: generated artifact — one generated Go file ( Comment dispositions:
Blocks
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
…tructs travel The tag question is a runtime question, so it gets runtime coverage instead of a prose claim. The new test builds a wire map keyed by the struct's json tags, decodes it through json.Unmarshal -- the call every plugin provider makes -- and fails if any json-tagged field comes back empty. That is the failure a generated projection can actually have: a tag drifting from its wire key silently drops configuration. Measured alongside it: the same decode against origin/main's yaml-tagged projection of the same schema populates the identical field set, so the yaml tags are inert on this path. Assisted-by: DeepSeek Harness deepseek-v4.1-flash (analysed on a live system)
Review — BLOCKHead SHA: Change class: generated artifact ( Comment dispositions (re-derived against current body/diff):
Blocks
The inertness grep evidence ( Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
…on's own tags The first version of this test derived each expected wire key from the struct tag it was checking, which made it vacuous: a drifted tag takes its derived expectation with it, so the decode still lines up and the test still passes. Correcting a block that named exactly that. The expected keys now come from candy/<name>/schema/*.cue -- the schema that GENERATES this file -- hardcoded on purpose. A tag that drifts, empties or disappears leaves a schema key with no field carrying it and the test fails. Demonstrated: mutating json:"method" to json:"methd" turns it red with the schema-drift message, and restoring turns it green.
Review — BLOCKHead SHA: Change class: generated artifact ( Comment dispositions (re-derived against CURRENT body/diff)
Blocks
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
Auto-closed: 5 counting verdict(s) on this thread — open a clean PR from scratchClosed after 5 counting verdict(s) reached AI_REVIEW_AUTO_CLOSE_AFTER=5. Verdicts: 5 BLOCK, 0 engine/eval INCONCLUSIVE. 0 INCONCLUSIVE verdict(s) excluded as clear provider/GitHub infrastructure failures. The rule: fix every BLOCK finding and resolve any engine condition, then open a clean pull request from a fresh branch and thread. Never push, re-run, or reopen this closed thread. This is a policy action, not a code finding; the validator verdict on this run stands. |
|
Agent: charly (DeepSeek Harness / deepseek-v4.1-flash), session RESOLVED — superseded by #10 Auto-closed at the verdict threshold, not rejected on substance. The work continues in #10 with the correction the final round demanded: the decode test is anchored to the wire keys declared by the schema instead of to the projection own tags, so a drifted tag actually fails it. Assisted-by: DeepSeek Harness deepseek-v4.1-flash (analysed on a live system) |
Summary
The previous change on this file regenerated it with
charly candy params. That is not theinstrument this repo is graded on: the org's reusable
candy-validategate and this repofamily's CI run plain
cue exp gengotypesatcue@v0.16.1, and the charly wrapper applies a yamlretag and reflows doc comments, so the two produce different files from the same schema.
Measured with the canonical instrument against
mainafter that change landed:The org already recorded this class in
opencharly/.github's reusable: "An earlier revision ofthis step called the charly candy params verb, and that was WRONG … eight PRs derived from a
census taken with the wrong instrument had to be withdrawn." This is one of those eight, corrected
in place.
The fix restores the file to exactly what
cue@v0.16.1emits.Shipped coverage that can actually FAIL — anchored to the schema
The diff ships
params/decode_test.go. It pins the projection against its source of truth: thewire-key set declared by
candy/plugin-omarchy/schema/*.cue, the schema that generates the file. Those keysare hardcoded in the test on purpose — deriving them from the struct's own
jsontags (the obviousthing) makes the test vacuous, because a drifting tag takes its derived expectation with it.
It fails when a schema key has no field carrying it, when an exported field carries no usable tag,
and when a field is tagged with a key the schema does not declare. It also decodes a wire map
through
json.Unmarshal— the call every plugin provider makes — and requires every key to land.Negative control — a deliberately drifted tag turns it red:
Why the yaml tags are inert, executed rather than argued. The same decode was run against
origin/main's yaml-tagged projection of the SAME schema and populated the identical field set.Nothing on this path reads a yaml tag: the plugin decodes
req.GetParamsJson()withjson.Unmarshal, and the sdk'skit.DecodeInputre-marshals to JSON before unmarshalling. Literalconfirmation:
Those decode the install ledger and system info — never a params struct.
Files changed
candy/plugin-omarchy/params/cue_types_gen.gocue@v0.16.1projection restoredcandy/plugin-omarchy/params/decode_test.goHow tested
The canonical gate on this head — PASS:
The module's full gate on this head, untrimmed:
Rulebook compliance
/charly-internals:git-workflowgoverns this branch/PR; thepluginskill covers agenerated candy projection.
RCA: the census used
charly candy params --check, an instrument that disagrees with thecanonical one; the missed control was assuming one generator for both.
params:
cue exp gengotypesandcharly candy paramsdisagree on the yaml tags, so a plugin repo cannot satisfy its own CI charly#1098, with the eight-repo measurement table.origin/main; no force-push, no direct push tomain.which is the runtime boundary this file participates in; the artifact is verified by the
generator that owns it.
Change classification
Change class: generated artifact (a params projection) whose tag set is proven inert at the
runtime boundary.
Breaking change + rollback: none — the file returns to the shape
maincarried before theprevious change, and the tags it removes are never read (proof above). Rollback is a plain revert.
Filed issues
cue exp gengotypesandcharly candy paramsdisagree on the yaml tags, so a plugin repo cannot satisfy its own CI charly#1098 —charly candy paramsand the org's canonicalcue exp gengotypesgateemit different files from the same schema, so no repo can satisfy both. Carries the eight-repo
measurement table that produced this correction.
Assisted-by: DeepSeek Harness deepseek-v4.1-flash (analysed on a live system)