Skip to content

twin: PR #82 full-matrix run (f4ce8a8f) - #89

Closed
ualtinok wants to merge 1 commit into
masterfrom
twin/pr82-f4ce8a8f
Closed

ualtinok wants to merge 1 commit into
masterfrom
twin/pr82-f4ce8a8f

Conversation

@ualtinok

@ualtinok ualtinok commented Sep 2, 2026 •

Copy link
Copy Markdown
Contributor

CI twin for #82 (fork PRs run a partial matrix). Not for merge — #82 merges on green.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Runs the full CI matrix for #82; fork PRs get a partial run, so this twin is not for merge. Unknown tags in the six diagnostic control enums now decode to Unknown { tag, body } with body retaining wire order, instead of failing the whole response.

Bug Fixes

  • ModuleDeclaredProvenance, RunningImageAgreement, RunningImageEvidence, SupervisorRouteConsumer, StderrCaptureState, and StderrTailEntry round-trip unknown object bodies byte-for-byte without enabling serde_json preserve_order.
  • Known tags keep their typed decoding; malformed bodies (non-object, missing or duplicate discriminator) still error.
  • ck provenance output escapes unknown tag and body text so control characters can't reach the terminal.
  • Versions bump to subc-control 0.11.0, subc-client-rs 0.11.0, and subc-core 0.15.0.

Written for commit f4ce8a8. Summary will update on new commits.

Review in cubic

Unknown internally tagged diagnostic values retain recursively ordered pairs captured directly from the deserializer stream. Known running-image agreements now decode nested evidence from that ordered representation instead of converting through serde_json::Value, so byte-faithfulness holds wherever an unknown value appears relative to a known ancestor. Duplicate discriminators are rejected during tag reading before a known-tag decoder can reach a mismatched unreachable arm; non-object bodies remain decode errors. ErrorBody.detail establishes the crate's deliberate use of an untyped Option<Value> region for wire compatibility. serde_json preserve_order is deliberately not enabled, so workspace-wide Value semantics remain unchanged.

CONSUMER-IMPACT: receivers tolerate future tags in the six diagnostic object enums with recursively ordered body retention through known ancestors, duplicate-discriminator rejection, and unchanged known-tag behavior; subc-control 0.10.0, subc-client-rs 0.11.0, and subc-core 0.12.0.

@cubic-dev-ai cubic-dev-ai 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.

1 issue found across 7 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/subc-control/src/lib.rs">

<violation number="1" location="crates/subc-control/src/lib.rs:719">
P2: When a known tagged value contains duplicate non-discriminator fields, `into_value()` drops all but one before validation, so malformed control payloads are silently accepted. Preserve duplicate detection, or reject duplicate members before converting to `serde_json::Value`.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

self.0
.into_iter()
.map(|(key, value)| (key, value.into_value()))
.collect(),

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: When a known tagged value contains duplicate non-discriminator fields, into_value() drops all but one before validation, so malformed control payloads are silently accepted. Preserve duplicate detection, or reject duplicate members before converting to serde_json::Value.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At crates/subc-control/src/lib.rs, line 719:

<comment>When a known tagged value contains duplicate non-discriminator fields, `into_value()` drops all but one before validation, so malformed control payloads are silently accepted. Preserve duplicate detection, or reject duplicate members before converting to `serde_json::Value`.</comment>

<file context>
@@ -570,25 +604,690 @@ pub enum StderrCaptureState {
+            self.0
+                .into_iter()
+                .map(|(key, value)| (key, value.into_value()))
+                .collect(),
+        )
+    }
</file context>

@ualtinok

ualtinok commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Twin served its purpose: full matrix green on f4ce8a8; #82 merged.

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.

2 participants