Skip to content

fix: harden cognition validation and release readiness - #165

Merged
auto-wood merged 72 commits into
mainfrom
iteration/release-016-maintenance-20261108
Nov 8, 2026
Merged

auto-wood merged 72 commits into
mainfrom
iteration/release-016-maintenance-20261108

Conversation

@auto-wood

@auto-wood auto-wood commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Changes

  • Align mental JSON-pointer acceptance across schema, TypeScript and Rust; preserve nine-facet/RFC6901 controls and the reference provider's unreadable-pin stale/error handling.
  • Complete C ABI field-type/layout controls, both C++17 modes, one report writer, paired-header provenance and LF representation.
  • Refuse non-increasing release targets before mutation. Keep member-derived lockstep pins, optional dependencies and changelog-section promotion; git-cliff fallbacks now derive their version from the root devDependency.
  • Bind producer checkout to its run head, validate producer outcomes, and verify checksum-aware transfer/post-copy SHA-256 before staging. Preflight shasum and the existing git-lfs presence requirement before network/copy; keep strict Swift byte freshness and meaningful real-script controls.
  • Increase the existing Gradle wrapper timeout from 10 to 60 seconds and refresh existing C, Swift and Go Darwin carriers from aligned source 02983eee9e6b0bdb7838c7bf40a8fe16489cc098.
  • Affected npm runtime packages require Node.js 22 or later, retaining canonicalize5.1.0. This compatibility-floor change is explicitly owner-approved and recorded by a breaking Conventional Commit. Root engines and crypto capability-probe/fallback behavior remain unchanged; CI uses Node24.

Package versions remain 0.15.2. A separately authorized New release 0.16.0 uses the existing signed-bump, annotated-tag and Trusted Publishing workflows.

Verification

  • Original source plans completed task L2, independent three-seat/model QC and mandatory QA; actual global-document D1–D5 acceptance also passed. Mental-path and malformed/valid reflection-pin boundaries retain targeted fixture proof.
  • Source-trust/transfer corrections passed independent QC and six-AC acceptance; producer mismatch/cancellation/override/header and equal-size/mtime delivery controls remain. Fixture-only inequalities and incidental wording pins were removed.
  • Aligned C producer passed both rebuilt OS lanes, meaningful ABI/header/mutation gates and both C++ modes; independent artifact QC and integrated four-AC native QA preserve own-RID provenance, actual bytes/LFS and headers.
  • Aligned Swift producer retains its truthful old-committed freshness failure. Guarded application checked all ten members without an override, and the original ZIP/record was independently recovered and inspected. At the prior integrated109 snapshot, both PR and push independently rebuilt and passed consumer smoke plus strict freshness. The final7e6 head separately passed its own consumer/locked rebuild/strict freshness; native compile inputs remain aligned.
  • Both Go Darwin targets retain two genuine same-full-path cold builds per architecture, raw/processed/committed matches and old-same-architecture mismatch controls. Their public producer/hash record is attributed same-host evidence, not universal reproducibility or a new automatic Go-side verifier contract.
  • Actual Node22.23.4 packed-install of all three npm packages passed twelve public-consumer golden JCS/signature/fail-closed/digest assertions. Official Node22.0.0 and22.4.0 fresh packed consumers subsequently each passed the same12 assertions; actual productionprobe was true on both and ExperimentalWarnings were retained. This disproved the old static patch/backend prose. The six-path prose/JSDoc correction9480fddb passed independent source QC and all five mandatory QA ACs, then was actually integrated/pushed as e31309d with the same b8bab471 tree. Executable crypto is unchanged; this is not rebuilt-tarball byte-identity proof. No22.1–22.3/fallback/universal backend or engine-strict claim.
  • Actual installed git-cliff2.14.2 isolated bump/lockstep/real-header notes acceptance remains distinct from the new real offline npx fallback generation/extraction proof. The latter fixes fallback drift; it does not certify pnpm execution, online availability, or relabel the historical23tests as current-helper coverage.
  • Missing-shasum before/after proof verifies refusal before gh/tree/sidecar/index work; the existing17-case helper matrix passes. The ten-path source batch, including corrected library/demo/recipe canonicalizer ownership, passed independent QC and four-AC mandatory QA. Source39e9cd39 and actual588 integration shared tree1ececbcda63c090506a5a409c30e56b95bdb83cb; that is historical batch equality, not current-head artifact identity.
  • Coherent four-path source9328267 passed fresh independent QC and all six mandatory SOURCE QA ACs, then actually integrated/pushed as2241c66 with equal0e51cc18 trees. The existing git-lfs probe/error/exit now precedes first gh/network/copy; staging attributes and all trust/transfer gates stay intact. Real restricted-PATH before/after and final17cases are bounded status/invocation evidence, not whole-index snapshots or atomicity. Two existing knowledge docs have supported metadata/current facts. Their source-stage unchanged-metadata receipts remain scoped; actual merged-main files additionally passed exactlytwo final-input CLI checks and independent six-AC remaining QA, and catalog rev2 title/hash now match each actual H1/rawSHA256. I167 is resolved on complete post-merge evidence, not premerge old hashes or a whole-root completeness claim.
  • Five-path prose source7a56db9 passed independent QC/native validation and all six SOURCE QA ACs, then was normally integrated/pushed as7e6abd9 with identical41217c451eaa213ac8aae5959035dcc28903a5d6 source/integration trees. D10 and knowledge now distinguish existing public client/responder facades from internal helpers; the SDK and two JSDoc blocks specify the one PKCS8 sign-key probe selecting both sign/verify providers, with SPKI verification not separately probed; the sidecar comment matches required producer.rustcVersion(full rustc-Vv)→observedRustc, distinct from the declared pin. All changes are prose/comments: executable behavior, wire, exports, metadata and examples remain unchanged. Earlier runtime/17-case evidence applies only to unchanged subjects, not fresh emitted-tar or whole-candidate byte identity.
  • Current7e6 Kotlin execution is independently observed in PR and push jobs: production cdylib build, consumer smoke, KE-count check and JUnit upload succeeded. The six actually downloaded XMLs give per-lane totals Golden5 + Ports13 + Tool1 = 19 executed, 0 failures/errors/skips. This completes I155 under its original source-QC/pm-acceptance contract; the enclosing workflows and unrelated Swift/Inspector gates remain separate. Archive digests are provider-reported, not independently rehashed ZIPs; no test was rerun.

Merged source and post-merge validation

PR165 was verified normally merged at2026-11-08T20:18:56Z as b9a9d713a1aa1ef772b4d05c82cc5c27034f3ba1. Its valid GitHub signature, parents and tree 41217c451eaa213ac8aae5959035dcc28903a5d6 match tested head 7e6abd92508569315f427f3f464de53e77664497. All11required checks succeeded; all30settled28success/1PagesSkip/1CodeQLneutral with no failure or in-flight work. Strict Swift consumer/rebuild/freshness passed, both Kotlin lanes executed19JUnit cases with0failures/errors/skips, Greptile5/5 and Inspector77% bind that head, and all16threads were resolved. Native workflow completion revision53 and root unregister committed atomically; fresh status and Phase6 gate pass. Two actualmerged-main knowledge catalog rows now match final H1/hash via CAS1→2; exactlytwo final-file CLI checks and independent all-six-AC remaining QA passed, then I167 closed. R6's4unverified/13invalid-output/8omitted limits and low I170 remain explicit, not zeroed. Source versions remain0.15.2; separately authorized New release0.16.0 is the publishing action.

Merge policy: reviewed-bot. Require latest-head required CI, every attached bot's own passing bar (Greptile5/5; Inspector success with complete head-bound overall/inline evidence), and resolved threads/blocking findings. Earlier-head approvals authorize nothing here.

Prior test/trust/ABI findings have source fixes; SQLite evidence is explicitly reference-provider scoped. Strict freshness remains exact, with original drift explained by different effective Cargo inputs. Optional self-contained failed-step metadata was not added: truthful failure/run references and application outcome/source/hash gates remain. Previous unverified/omitted tallies are retained as evidence limitations, not invented verified or closed findings.

Inspector's internal manual-responder recipe suggestion is retained as I170: consumer-local error/seed bindings remain implicit in the preserved worked excerpts, and no standalone-compilation claim is made. It is separate from the shipped public connectResponder; owner architect handles it on scoped recipe maintenance or demonstrated consumer demand. The compiler nit compares JSON fields, not raw stdout: actual recovered producer rustcVersion and committed sidecar observedRustc are equal191-character strings with no trailing LF. The producer already shell-captures stdout before JSON; arbitrary edited records/raw-stdout terminator fidelity are not asserted.

Residuals

All15 original selected source records and seventeen subsequent accepted corrections are resolved with their complete applicable acceptance retained. These three project followups remain open and unwaived:

Issue Severity Remaining scope Blocker-defer
I-000059 low Original prototype-display/artifact-bound trigger no
I-000013 nit Original optional remote-helper maintenance trigger no
I-000170 low Architect: make the internal manual-responder worked recipe's local error/key input explicit on scoped recipe upkeep or demonstrated consumer demand; no shipped SDK runtime defect no

New platforms and UE engine-internal verification retain their existing demand/environment gates. Publication is separate. The owner explicitly retained exactly three local cleanup resources; all other owned-resource guarded post-merge cleanup remains required.

Scope's helper returns a SpokeReject value with a fixed message and a field detail; cognition's helper returns a generic SpokeResult<T> with a caller-supplied message and no field. Both carry the same unsupported_cognition_requirement wire reason, so the distinction is intentional and stays unconsolidated.
…st wording

The remote module doc claimed default connect builds stay lean without a
spoke-operations dependency, while Cargo declares that dependency
unconditionally. State the feature gate and the unconditional dependency
affirmatively, preserving the TypeScript ./remote subpath note.

Rename the memory-engine measure test to the normalize-path byte
equality it asserts and trim the stale direct-serialization comment.
Wording only; no behavior change.
The C ABI gate could see record sizes, alignments and offsets, and every
callback signature, but not a same-size member retype: an int64_t to
uint64_t swap or a dropped const kept all of those assertions green.

The carrier test report now prints SPOKE_CONNECT_ABI_FIELD_TYPE
<record>.<field> <rust type> for every non-callback member, behind a
coerced field accessor so the line states the field's own type, and the
gate renders that Rust type back into the C type the header must declare
(both coverage directions fail). Callback members stay on the existing
signature axis.

runLayoutCheck is split into buildLayoutProbe (writes the probe TU,
returns its compile entry) and a thin wrapper, so the self-test can
compile a probe built from a report with one offset perturbed and prove
that fails; a same-size struct field retype joins the mutations as well.
The common MindDelta pattern accepted any non-empty token under
/modules/mental/, so /modules/mental/temperament and other unknown
fields validated even though both validateMindState guards already
enforced the nine-name vocabulary. Narrow the schema token to the
verbatim guard names, leaving the cognition arm, description and
RFC 6901 tail unchanged.

Add a shared fixtures/mental-field-cases.json and assert the same
accept/reject paths in the JSON Schema leg, the TypeScript guard and
the Rust guard so the three layers cannot drift again. Regenerate the
generated trees; typify embeds the pattern in the generated Rust.
A pinned selection or cognition_filter that cannot be decoded degraded to a fresh verdict. Both now report stale through the existing reflections.state stale member, with a stored-state regression covering each arm.
Keep one why-only line per helper explaining why the two reject constructors stay separate (raw SpokeReject vs generic result, field-aware vs caller-message), and drop the assertion-site line numbers that go stale as the files change.
… comments

Both helper comments now record the shared unsupported_cognition_requirement reason while keeping the practical split: scope needs the raw reject with a field path and fixed message, cognition needs a generic result with a caller-supplied message and no field.
Report each non-callback member from its accessor's inferred type instead of an expected return type, so a mutable pointer can never be reported as const. Assert exact type identity and cover both the producer inference and the pointer-constness comparison with negative controls.
Mirror the smoke's disabled/enabled configuration table in probeCommands,
adding an exceptions-enabled C++17 inclusion probe beside the unchanged
disabled one on both toolchains. Select the planted .hpp exception
mutation by the exact disabled label, since the planted throw only fails
under a no-exception configuration.
@auto-wood

Copy link
Copy Markdown
Contributor Author

Additional evidence for the current nonblocking Cargo/Go audit findings at 109e556c6206aacf6e0eec2389a79df59d06142f:

Cargo attribution. git diff --exit-code b1afafe6d4cf492d09041f1424729150c7774942 109e556c6206aacf6e0eec2389a79df59d06142f -- Cargo.lock returns0 with no diff. The lockfile changes in the incremental 4a78ffe..109e556 review came from preserving the current target main, not a new PR-relative dependency refresh. The aligned native source includes that actual graph; its Cargo.lock SHA-256 is fc067fbe8f1b7723eeffb234fcffbc69cb56a98a602e93ba449247d990d5ae0b. We retain those upstream inputs rather than revert them to conceal native drift.

Go producer and byte identity. Both committed Darwin carriers were built from 02983eee9e6b0bdb7838c7bf40a8fe16489cc098 (artifact-only source commit 9b93103148ca892ad91199a57ff5929f41b6164a). The manual producer used cargo/rustc +nightly-2026-06-26 (rustc1.98.0-nightly bd08c9e71), explicit -Zno-embed-metadata, --locked --release --features ffi,remote-adapter, Apple clang21.0.0 and macOS SDK27.0. Each architecture had two genuine cold builds at the same complete target path; raw files matched, then separately install-name-adjusted copies matched committed bytes. Each real old same-architecture carrier was a mismatch control.

Target Committed SHA-256 Ordinary Git blob
darwin_arm64 f1a4f2ca3397f689af19531b80c41a002d6e32ef43cd23c4518f40d7373839e8 304c3e6bdffde064592a5e7a72454ae3722dc67a
darwin_amd64 013207fcf1c7f58b3c27c6e09f937c8d2c47f854bf43565f9bf9ef4facbfebf3 6b1d7985954cb35cd9e50aae0a2f78c4d23c85be

This publishes the existing attributed producer/byte record; it does not add an automatic Go-side provenance/verifier contract. These are ordinary Git objects, not LFS pointers. Same-host/source/SDK/options/full-path equality is not universal reproducibility or a consumer-runtime claim. Final current-head CI and review gates remain mandatory.

…he demo

The current connect-demo server carries no canonicalize dependency; it
orchestrates the public ConnectResponder, whose library dependency
supplies the pinned canonicalize@5.1.0. Narrowly correct the responder
knowledge paragraph and its index summary to distinguish the library's
real pin and the third-party recipe pin from the demo's ownership.
@auto-wood

Copy link
Copy Markdown
Contributor Author

@greptile review

@wood-s-inspector wood-s-inspector 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.

mstar-inspector line comments · round 3 · 588597b

Comment thread tooling/release/run-git-cliff.mjs Resolved
Comment thread tooling/release/run-git-cliff.mjs Resolved
Comment thread packages/spoke-connect-ts/package.json Resolved
greptile-apps[bot]
greptile-apps Bot previously approved these changes Nov 8, 2026
Correct the verify-version runtime in the release spec to Node 24, list git-lfs among the apply script's header prerequisites, and distinguish the root dev-tool Node range from the published consumer floor.
Replace the static Node patch-version thresholds with the actual capability-probe contract on the advertised Node >= 22 floor; comment and prose only.
@greptile-apps
greptile-apps Bot dismissed their stale review November 8, 2026 17:42

Dismissed because a newer commit was pushed; Greptile will re-review the current head.

@auto-wood

Copy link
Copy Markdown
Contributor Author

@greptile review

greptile-apps[bot]
greptile-apps Bot previously approved these changes Nov 8, 2026

@wood-s-inspector wood-s-inspector 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.

mstar-inspector line comments · round 4 · e31309d

Comment thread packages/spoke-connect-ts/src/crypto.ts Resolved
btspoony and others added 6 commits November 9, 2026 02:08
Convert inline frontmatter arrays to block sequences, keep eight SDK tags, record last_updated, and state the current SDK role and shipped public responder orchestration.
Describe the custom serialized gate without the removed demo path and state that the demo exercises the shipped connectResponder integration, not the manual low-level recipe.
…claims

The Ed25519 backend is chosen by the runtime probe that imports this host's required keys, not by an asserted version cutoff. Replace the absolute cutoff wording in the module header, the probe docstring and the SDK knowledge doc with that implementation contract; probe behaviour, exports and package floors are unchanged.
…rce branch

Merge docs track ref a22d6dc
(probe-precision: two knowledge docs + crypto.ts JSDoc-only) into
fix/maintenance-016-swift-carriers alongside the LFS preflight root fix.
@greptile-apps
greptile-apps Bot dismissed their stale review November 8, 2026 18:41

Dismissed because a newer commit was pushed; Greptile will re-review the current head.

@auto-wood

Copy link
Copy Markdown
Contributor Author

@greptile review

@wood-s-inspector wood-s-inspector 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.

mstar-inspector line comments · round 5 · 2241c66

…d sidecar facts

Current-fact prose pass over five existing paths; no runtime, API, wire,
or schema change:

- spoke-remote-adapter.md D10: the exclusive enforcement sentence is now
  scoped to the dialer/client pipeline and cross-references the existing
  public responder faces (D14 connectResponder; serving/FFI faces
  D13/D16), preserving module-internal/crate-private visibility and all
  reject/D7 wording.
- connect-ts-responder-from-public-exports.md: the Context parenthetical
  and the Why-This-Matters sentence drop the 'only through the
  RemoteAdapter surface' claim for the helper-visibility fact; factory
  name/subpath, demo ownership, and every example stay unchanged.
- connect-ts-client-sdk.md and crypto.ts JSDoc: the WebCrypto probe is
  described exactly as implemented — one PKCS8 Ed25519 private/sign-key
  import (['sign'] only) whose cached result selects the backend for
  both sign and verify; verification's SPKI import is not itself probed.
- apply-xcframework-artifact.sh: the stale sidecar comment no longer
  claims the compiler banner is 'deliberately not recorded'; it states
  the producer record's rustcVersion (full producer rustc -Vv output,
  required non-empty) is copied verbatim into the sidecar observedRustc.
@auto-wood

Copy link
Copy Markdown
Contributor Author

@greptile review

Please review current head 7e6abd92508569315f427f3f464de53e77664497. The delta from2241 is five prose/JSDoc/shell-comment files: scope existing client/responder enforcement surfaces, document the single PKCS8 sign-key probe (shared sign/verify backend choice; SPKI verify import is not separately probed), and match required producer rustcVersion / sidecar observedRustc full-compiler provenance. No executable behavior, API, wire, frontmatter, example, native carrier, pin or CI change. Independent exact-source QC and all six targeted SOURCE QA ACs passed. The previous2241 wave actually completed29success/1PagesSkip, including strictSwift consumer/freshness; this new head still requires its own CI and reviews.

@wood-s-inspector wood-s-inspector 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.

mstar-inspector line comments · round 6 · 7e6abd9

@auto-wood

Copy link
Copy Markdown
Contributor Author

Current head 7e6abd92508569315f427f3f464de53e77664497 Inspector round6 passes77% with0must/0should,1may/1nit/4unverified. Full13invalid-output/8omitted prior-revalidation limits are retained, not relabeled as verified fixes. The may-fix concerns the internal third-party manual-responder worked excerpts: consumer-local error definition and signing-key binding are implicit. It is tracked as local roadmap I-000170 (low, owner architect; next scoped recipe upkeep or demonstrated consumer demand), with explicit self-contained public-primitives/error/key-input acceptance and unchanged wire/fail-closed behavior. This is not a shipped SDK/connectResponder runtime path, not a claim these excerpts compile, and not a reason to export private auth helpers or silently expand this maintenance change. The comment nit has actual JSON-field equality counterevidence in its thread. Greptile review5 is5/5 on this head; actual PR/push Kotlin jobs each executed19JUnit cases with0failures/errors/skips. Remaining current-head required CI/strictSwift and final fresh thread state still gate merge; no release is performed.

@auto-wood
auto-wood merged commit b9a9d71 into main Nov 8, 2026
30 checks passed
@auto-wood
auto-wood deleted the iteration/release-016-maintenance-20261108 branch November 8, 2026 20:18
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