Skip to content

feat(collective): ordinary attachment custody and durable channel state - #123

Merged
zts212653 merged 4 commits into
mainfrom
feat/f290-expression-sol61
Oct 26, 2026
Merged

zts212653 merged 4 commits into
mainfrom
feat/f290-expression-sol61

Conversation

@zts212653

Copy link
Copy Markdown
Owner

What and why

Paired Core PR: https://github.com/zts212653/cat-cafe/pull/6122.

Members can paste two images in the ordinary Channel composer, remove one, send, open authenticated original bytes as another member, and return to the message. Refresh, Service restart and a lost send ACK preserve one canonical message. My Café and Channel consume the same attachment preview and media window; Service-owned per-Human drafts use CAS and exact send consumption, and read cursors advance from visible messages.

This is the first implementation slice of F290 Task042, under the approved full expression batch. The accepted plan explicitly permits separate contract/custody, shared expression and full journey PRs. Voice, stickers, quote/rich content, full model input and final Alpha acceptance remain with this same implementation owner; this PR does not close the batch or Feature.

Original requirements and accepted source

  • Discussion: docs/discussions/2026-10-23-f290-cafe-experience-parity.md; human source thread_mui5lsvu1whtysh1#0001792762441831-001160-16c41177.
  • “先对齐……有的东西不要自己造一套”。
  • Plan: docs/plans/2026-10-23-f290-channel-expression-and-projects.md, first batch. Design: c7e69f8c3f + 6900431ce6.
  • Accepted-Source-Ref: thread:thread_mui5lsvu1whtysh1#0001792762441831-001160-16c41177
  • Accepted-Revision: 0001792762441831-001160-16c41177
  • Delegation: approved platform proposal proposal_mvngj173pet2fnkh, child thread_mvngqzz1iixttng1, original parent Task 0001792910257139-000042-abe41fe3; no parent Task duplication/migration.

Risk and ownership

Behavior: ordinary file/image send, retry/recovery and read position. Data: additive persisted references/private draft and read records; no TTL. Security: independent Human membership, exact source/channel binding, revoked authority, Range/abort and installation-fenced owner proxy. Contract: shared Human/Agent/event schemas plus matching plugin Service/Client; old text is retained and legacy rich-content readers fail visibly before consuming delivery cursors. Irreversible: no production write, package publication, install upgrade or runtime restart.

Architecture cell: collective-runtime; update existing map. Original content owner keeps immutable bytes; Service remains canonical for events/private state. No new Work, Thread or content owner. The Service, Connector reader negotiation and optional SDK owner capability are implemented here; the compiled Client is generated from Core 193bd7ffef21e1a4b4ba1f6cee7e6331276ec373. assets/client/source.json records asset digest f99b5d9b35633f18db4fbb72e0e7d7ae5b803a357af2737306f73284bdaae3dd, input and manifest hashes. SDK source adds an optional structural seam; no registry version or external dependency is changed. The Service remains compatible with its existing SDK dependency and requires the updated Host only for ordinary byte custody. An old strict Service reader cannot read newly written state: preserve a pre-upgrade snapshot and repair forward after user writes.

Independent source: local Argon implementation/contract review, as selected in the delegation; review pending. No self-approval or automatic second cloud review.

Verification

Evidence in the paired Core commit: docs/evidence/2026-10-25-f290-expression-first-slice/README.md with 1440/390 screenshots and captured command output.

  • Real Service + original byte owner + compiled Client + two independent test-provider sessions: paste2/remove1, private draft refresh, lost ACK retry exactly once, original-byte comparison/decode/open/return, lost ACK reload, two-window CAS conflict, restart, narrow layout and long-message read all passed. This is not real OAuth/human acceptance. Latest test process10.88s / browser hold11.44s, queue excluded.
  • Core original-owner/Host proxy check1 passed; Client focused checks4 and My Café context-picker checks9 passed. Client build/lint and API typecheck passed. Plugin Service targeted21, business377, control59, lifecycle6, transport3 passed; packaged provenance/integrity4 and isolated installed closure1 passed.
  • Full Client:360 passed /1 existing scope-recovery timeout; same failing check reproduced in main. Browser consumer census also fails in main (289 inputs); introduced positive edges are explicitly mapped. Neither result is claimed full-green.
  • Paired Core capability tips, architecture ownership and staged Biome passed (existing warnings retained); git diff --check passed. The paired Core tip teaches the normal Channel attachment path.

Review focus: source/owner boundary, atomic draft consumption, membership revocation and the browser cache-removal intent. One early click-interception run and one90s browser timeout remain disclosed; later exact normal-click journeys passed, without force-clicking or suppressing assertions. The full batch still needs authorized model image consumption, voice, stickers, applicable rich blocks, all presentation modes and post-merge installed Alpha verification.

GitHub notification plugin is currently import-only; no recovery setting or retained wait is changed. PR/CI truth is read through canonical gh.

小太阳·砚砚 / gpt-6.1-sol

Installed candidate archive SHA256: 805b87a47714c2b4075893dfd34c7d759ff0e0beee547526bca1d75f239cf7df. Its isolated physical dependency closure exercised start/bootstrap/create/disable/re-enable, preserved state and verified packaged assets. It is not a production installation or actual Host/OAuth acceptance.

Codex61Sol-GPT-6.1-sol added 4 commits October 25, 2026 01:31
Why: Channel conversation needs authenticated original files, retry-safe event references and recoverable per-Human drafts without creating Work. Delegate immutable bytes through the original Host content owner, persist exact public bindings atomically, and package the matching Core Client from 193bd7ffef21e1a4b4ba1f6cee7e6331276ec373. The full expression batch remains active; this does not publish a package or certify model image input.
Why: distinguish the tested installed dependency closure from actual Host and OAuth acceptance, and retain cross-repository provenance for 02a75fc while the complete expression batch remains active.

Thread-Context: threadId=thread_mvngqzz1iixttng1 invocationId=f4e35fad-b971-45b8-8753-b548f9dee984 catId=codex61-sol
Why: ordinary attachments already use the Collective-local optional owner contract. Remove the unused duplicate SDK declaration/export so this batch does not change bytes under a published SDK version or break other plugins pinned to that immutable artifact. CI RED: feishu registry installation rejected the changed SDK with EINTEGRITY; the fixed CI toolchain will verify the same check after this scope reduction.

Thread-Context: threadId=thread_mvngqzz1iixttng1 invocationId=f8fd0c91-1ddd-4f44-ba81-92bf08d2ad9e catId=codex61-sol
Why: alpha.8 is already published and immutable. Prepare alpha.9 with a repeatable canonical pack digest while preserving every live catalog release and all dependency locks.

Thread-Context: threadId=thread_mvngqzz1iixttng1 invocationId=f8fd0c91-1ddd-4f44-ba81-92bf08d2ad9e catId=codex61-sol
@zts212653
zts212653 marked this pull request as ready for review October 25, 2026 09:39
@zts212653
zts212653 requested a review from mindfn as a code owner October 25, 2026 09:39
@zts212653

Copy link
Copy Markdown
Owner Author

Merge evidence for the ordinary attachment and durable Channel-state slice.

  • Exact HEAD: 232bda56f6a91f5932200b3b7d848d159f00a459; PR HEAD and clean author worktree match.
  • Independent local review: Argon approved the complete slice at 705823c5, the SDK scope reduction at b39e655d, and the package-identity delta at this exact HEAD. Local verdict receipt: local-review:0001792920133084-000335-ef50454d:approved.
  • Accepted source: thread_mui5lsvu1whtysh1#0001792762441831-001160-16c41177; accepted revision: 0001792762441831-001160-16c41177. No accepted-scope change.
  • headChangeCause=ci-fix, localPeerReviewSha=232bda56f6a91f5932200b3b7d848d159f00a459, cloudReviewSha=none, stale=false, nextGateOwner=author.
  • CI: 40180278603 passed on this exact HEAD, including the full local gate, browser checks, conformance, and immutable package identity. The PR publication job is correctly skipped.
  • Author checks: canonical Node24.18.0/npm11.16.0/zlib1.3.1-e00f703 package produced identical bytes twice; shrinkwrap + activation tests 58/58; source provenance 4/4; git diff --check passed. Earlier Service, Connector and compiled Client journey evidence remains applicable because the final deltas changed no business/Client code.
  • Risk: user-visible attachments, cross-member authorization, persistent drafts/read positions and event contracts require independent review and scoped restart/revocation/idempotence tests; those are covered by the reviewed slice and CI. gate_passed=true, verdict=passed for this slice.
  • Immutable release boundary: alpha.9 is a new candidate. All alpha.8 history and catalog/catalog.json are unchanged; no live catalog activation is included. The existing main publication workflow may publish the candidate after merge. No manual npm publish or runtime start/restart was performed.
  • Persistence is the existing atomic JSON-file transaction implementation; the previous review prose calling it SQLite was inaccurate. The reviewed atomic validate/bind/draft-consume behavior remains the same.
  • Paired Core slice has merged as 3cc7ecdc51a83308e105f18656166ce6f7382a1b (Core #6122). The retained Client source remains 193bd7ffef21e1a4b4ba1f6cee7e6331276ec373 with its reviewed digest.

This merges the first attachment slice only. Native model image consumption, STT, stickers, quoting, applicable rich content and the complete installation/Alpha journey continue under the original accepted batch; this is not Feature/Task closure or human OAuth acceptance.

@zts212653
zts212653 merged commit ec0ef60 into main Oct 26, 2026
2 checks passed
zts212653 pushed a commit that referenced this pull request Oct 26, 2026
Why: #123 was squashed into ec0ef60. Its complete tree is identical to reviewed 232bda5 (git diff --quiet verified); retain the already-published continuation history without a force push. Conflict resolution leaves the continuation tree unchanged.

Thread-Context: threadId=thread_mvngqzz1iixttng1 invocationId=c9c72db0-a87d-41f4-961b-9eef025c3b1c catId=codex61-sol
@mindfn

mindfn commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Resolved through a disclosed replacement source, 2026-10-26. The cleanup in #118 is now pushed at 442002be175e721500e1a47b72ebc851acb3e07f. It uses accessible public Core f0056865b6b1c7a9b235e51d9bb7d4d29f8e7363 with a recorded two-line source patch, 744 verified build inputs and rebuilt assets. The obsolete archive-replacement schemas and permission fields are absent; no bundle was hand-edited. Public branding/default differences are disclosed and independently reviewed. Source/provenance tests, independent packed install and the exact-HEAD 35-step gate passed; the PR records two Client test failures reproduced on the unmodified replacement baseline.

The original private 193bd7ff… commit remains unavailable, and the 728/746 partial historical recovery is not claimed as complete. That historical gap no longer blocks #118: it is replaced by the explicit, reviewed public build input. No further source handoff is required for this cleanup. The original request and recovery details remain below for provenance.

Original source request and partial recovery record

@zts212653 I am following up on the retained Client delivered by this PR for the permission-model cleanup in #118.

The packaged Client still contains the unused PluginArchiveReplacementConfirmationSchema / PluginArchiveReplacementOfferSchema declarations, including expectedGrantRevision and candidateEffectiveGrants (assets/client/collective-client/app.js:40351–40366). Symbol tracing finds no active Client consumer. I want to remove those obsolete declarations through the original source build while preserving this PR's attachment/Channel behavior.

Could the original Core/Client delivery owner provide the reviewed source at 193bd7ffef21e1a4b4ba1f6cee7e6331276ec373 through the original private delivery channel, or an accessible source ref/snapshot that can be checked against all 746 entries in the packaged build-inputs.json? The required build inputs include the Client/shared/UI sources, build scripts, package manifests and lockfile. The recorded input-manifest SHA256 is 73a8806e7089ffdc02559b6443817d541c3b52e7e3669ed418d24e2630b90a11; the original asset digest is f99b5d9b35633f18db4fbb72e0e7d7ae5b803a357af2737306f73284bdaae3dd.

The recorded private Core commit is unavailable in the currently accessible repositories. The inspected Host checkout differs in 130 recorded inputs, so rebuilding from it would mix in unrelated changes. I have left the bundle and its provenance intact; I am not asking for a new compatibility or permission mechanism.

Please post the source handoff status on #118 so its existing tracking subscription can resume this dependency. This is a source/provenance request, not a request to repeat review or publish/install/restart anything.

Input recovery update

I have now recovered and verified 728/746 exact input files from existing files and Git blobs, including the original build script and retired schema module. I also checked available worktrees and both local repositories' reachable/ref-log source histories. 18 exact inputs remain unavailable, listed below. A private handoff of these matching files, together with the original package/build-tool lock metadata, is sufficient to finish validating the source snapshot; there is no need to reproduce a new implementation or upload private source here.

Missing path relative to packages/collective-client Recorded SHA256
../shared/src/co-creator-display.ts 6367043654d75249679e825bea71a8e15d181e541c7e93d158d3a18bb447e6b9
../shared/src/codex-speed.ts ecad26ae2e0384bacf4e0cfa6bfc72fd9ab7585b1a6d4270caf4c1d440496fcc
../shared/src/deployment-profiles.json 173afdac9eb7e6c169f568ddc1652d94c48f9b77498efdc61d5c8a0609fd4d1d
../shared/src/types/community-issue.ts 473b8bff658379506d0fc51416eef6c3300f3bc91e8160ffa5ee9a0c3ce06b8d
../shared/src/types/connector.ts d49095f25a635e88e2e4b170962ce76f0198b2f6d09bbd4c65148115f68166d3
../shared/src/types/dispatch-proposal.ts 1eadff1e920b3a066b07b02d0557db4f18191897a1ba488fe9afee1a424379a4
../shared/src/types/dossier-distillation.ts 1bfcc25dc849fb1aff8931cce6ceda59b98f22f11146c926e10d19e1854bbdd7
../shared/src/types/entity-proposal.ts d5c9f10b9f103d7e7918ed33e8e627171724af04a1d3147ad2a6cd479e51ca70
../shared/src/types/profile-update.ts 58bd063b44cdbfbf11f5bf5e70b4fc74d6b864ea24fdc9bd2cc966475539214f
../shared/src/types/proposal.ts 988c0b6230c7bbe37634313d10f37ed2db2150f752b3cc3bd0fdd4de8a72d4ed
../shared/src/types/sop-definition.generated.ts 663b5930c22e1421d9122cdbbaa0a2d2aa88ec0b74d3f0c2f65bfb705e6eb5f1
../ui/src/MeowClubMark.tsx 9a041ebb153771252e7f5c71cf5fedb95a287e0adec25f645be72134fbd9a179
../ui/src/collective-copy.ts aa16f0027f4138fe0249118121a9cfea82c8d502194f11a00358f89ab10c47ba
../ui/src/memory-book-star-path.ts 63da8150b73ea1b66fd50fa0cabd42c4a71c9baf1f824a414b371edb00af99f6
../web/src/app/theme-tokens.css 25e0155077af475cba092b85b004bbddf7911a21eaf6846c8aed3e9230d76f1b
src/CollectiveWorldRail.tsx d85060cdf3375d3854c427c2672cda2e85d95802cd4a1987ad5276089dddd39f
src/OnboardingScene.tsx 055978b97e639dbe17a2045d74c6fa9f228591e2b0545b5096c4090f4e30f4ab
src/use-collective-client.ts effd4d584ce6ad83c01a40875731e0786df07070c4aad56d41b19c0b37d3e3e4

The original bundle has not been modified. After all inputs are available, I will first reproduce its existing asset digest before changing the obsolete schema and rebuilding the candidate. Please report handoff status on #118 for the existing tracking subscription.

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