Skip to content

Coordination: Reconcile overlapping PRs and dependencies #134

Open

Description

@zachshallbetter

Summary

Following maintainer feedback (comment), this issue is simplified to track one concrete task: reconciling overlapping open PRs so we can merge them in the right order without conflicts or duplicate implementations.

Rule for overlapping PRs

  • When two PRs overlap, keep the better implementation and close the other as superseded.
  • When one PR builds on another, mark it with Depends on #N and merge in dependency order.

Active Workstreams & Status

1. Verification Tooling: #9 and #13

2. Contributor Standards: #24 and #38

3. Architecture & UI Inventories: #78 and #96


Subsystem Stacks Under Review


Completion

This issue can close once the overlapping PRs above have their merge order or supersession confirmed by maintainers.

Activity

  1. changed the title [-]Governance: Decide on shared infrastructure extraction and contributor protocols[/-] [+]Decision needed: Shared infrastructure standards and overlapping PRs[/+] on Oct 15, 2026
  2. aiongg commented on Oct 15, 2026

    @aiongg
    Contributor

    IMO:

    D1, D2, D3 already de facto yes.
    D4, D5 are already separately raised in their own PRs for independent discussion.
    D6 would be good to clarify before adding more people with merge perms. My very simple rule would be:

    • When two PRs overlap, keep the better one, whoever wrote it, and close the other as superseded. If one builds on the other, it says Depends on #N and they merge in that order.
  3. zachshallbetter commented on Oct 15, 2026

    @zachshallbetter
    ContributorAuthor

    Agreed. That simplifies this quite a bit.

    I will treat D1–D3 as existing conventions and leave D4–D5 with their respective PRs.

    For D6, I will start identifying actual overlap and dependencies, then recommend which implementation to retain or supersede, regardless of author. Where work is genuinely dependent, I will make sure the relationship is explicit.

    I will keep the findings on the relevant PRs rather than introducing another layer of process.

  4. aiongg commented on Oct 15, 2026

    @aiongg
    Contributor

    Check #115?

  5. changed the title [-]Decision needed: Shared infrastructure standards and overlapping PRs[/-] [+]Coordination: Reconcile overlapping PRs and dependencies[/+] on Oct 15, 2026
  6. wdunn001 commented on Oct 15, 2026

    @wdunn001

    Cloud / CollabCraft workstream that needs to be included here

    There is another active dependency stack with both file overlap and an important runtime boundary:

    1. craft-cloud: provider-neutral contracts, and the controls that speak them #48 is the base: provider-neutral craft-cloud contracts plus account/share controls. It has no transport, provider, credential, or socket implementation.
    2. craft-ui: the File page's shared parts, places panel and navigation column #50 is independently mergeable, but it conceptually overlaps Presence, the overflow and split menus, more than one account, and a conversation contract #52's Open/Save cloud pages. The right reconciliation is for the higher-level craft_ui::cloud flow to compose or adapt the generic PlacesPanel, rather than leave two competing Open-page systems.
    3. Presence, the overflow and split menus, more than one account, and a conversation contract #52 depends on craft-cloud: provider-neutral contracts, and the controls that speak them #48. It adds presence, shared cloud pages, menus, multi-account UI, and destination-aware encoding. This is the UI currently exercised by GridCraft, DeckCraft, VectorCraft, DesignCraft, and WordCraft.
    4. wdunn001/craft-libs has one additional commit, 289d562, on invite-landing above Presence, the overflow and split menus, more than one account, and a conversation contract #52's current head. The deployed app branches pin that revision because guest recipients need identity/read-only state without being shown an account menu. That commit needs to be appended to Presence, the overflow and split menus, more than one account, and a conversation contract #52 or proposed as an explicit follow-up; it must not disappear when the stack is rebased.
    5. craft-nextcloud: a native Nextcloud client for listing, previewing and opening remote files #54 is a native direct Nextcloud client. It can remain an optional direct-host backend or implement the craft-cloud: provider-neutral contracts, and the controls that speak them #48 contracts. It must not make direct provider access mandatory. Browser builds at craft.quasarke.net use a same-origin CollabCraft host with session-cookie auth; provider credentials and policy remain server-side.

    Recommended order: merge #48; merge #50 independently; rebase #52 onto both and reconcile cloud::pages with PlacesPanel; carry 289d562 as the guest-recipient follow-up. #48 and #52 are currently 13 commits behind the fork's main, so the rebase should happen before treating their current lockfile/workspace diffs as final.

    Direct collision with #128

    #128 introduces a package named craft-collab. CollabCraft already has a package with the exact same name, used by the deployed app branches for native and WASM relay transports. These are different layers:

    They should not supersede one another without a migration plan. The existing apps currently emit application commands, not #128's CRDT change algebra. A safe boundary is to give the pure core an unambiguous package name such as craft-collab-core, while CollabCraft remains the host/transport layer. Alternatively rename the transport client, but every current consumer must then migrate explicitly. The service can later carry core changes over the CollabCraft relay without moving sockets, auth, provider policy, or service credentials into craft-libs.

    The invariant we need to preserve across all of these PRs is: craft-libs owns provider-neutral contracts and reusable UI/core primitives; the host supplies CloudBackend/ShareBackend; CollabCraft owns wire transport, same-origin web sessions, provider credentials, service policy, and relay deployment. Direct-provider adapters remain optional implementations, not the required architecture.

  7. webdevtodayjason commented on Oct 16, 2026

    @webdevtodayjason

    Went back through these after last night's updates. The runner rewrite in #9 and the handshake check in #13 cover what I was going to raise: baseline resolution and tests now run only in the isolated worktrees, a failed worktree skips that consumer instead of falling back to the normal checkout, FAIL/FAIL reports BASELINE_FAILURE, and a lifecycle fixture now needs the adapter's ACK (plus a non-empty state file for UnsavedSave), so a bare /usr/bin/true no longer passes. #9 then #13 looks right to me.

    With the policy parts of #24, #38, #78 and #96 moving to craft-contrib RFCs, a few factual fixes in the reference material are still worth making before they merge:

  8. wdunn001 commented on Oct 16, 2026

    @wdunn001

    Update: cloud / collab / runtime stack consolidated on #160

    Per the D6 rule (keep the better implementation, close the rest as superseded):

    Was Now
    #48 craft-cloud + share/account UI folded into #160, closed superseded
    #52 presence / menus / multi-account / conversation folded into #160, closed superseded
    #143 craft-suite-account folded into #160, closed superseded
    #132 craft-runtime epic (tier-store, worker-host, gpu) implementation is #160 (Closes #132 on merge)

    Merge target: #160

    Still open and not folded in: #50 (PlacesPanel vs cloud pages), #54 (optional Nextcloud), #128 (package-name collision with CollabCraft transport), #123 (CollabCraft transfer). Issue body workstream 4 updated to match.

  9. aiongg commented on Oct 19, 2026

    @aiongg
    Contributor

    Update: #69 merged and #70–#76 are closed; #24 closes as superseded by #38. Once craft-contrib RFC-0004 merges, this can close pointing to it.

  10. wdunn001 commented on Oct 19, 2026

    @wdunn001

    Replying to #134 (comment)

    The cloud and CollabCraft stack that this issue was tracking did not move to craft-contrib RFC-0004. It was relocated to #123 (transfer wdunn001/collab-craft into storytold/collab-craft, and retarget app pins after that). The shared crates for that track are #160, which supersedes #48, #52, and #143 and closes #132 on merge.

    #69 and #24/#38 can follow the note above. Closing this issue should point at #123 for the relocated collab work, not only at RFC-0004.

  11. el-j commented on Nov 2, 2026

    @el-j

    Workstream Coordination: Media Containers, Codecs & Audio (#439–#448 vs #504 / #503)

    Following the project coordination rule ("When two PRs overlap, keep the better implementation... When one PR builds on another, mark it with Depends on #N and merge in dependency order"), here is the reconciliation roadmap between the craft-media / craft-audio split stack (#439–#448, originating from #395) and the centralized pure-Rust codecs stack (#504, closing #503):

    1. Architectural Division of Responsibilities

    2. Recommended Merge Order & Supersession

    1. Merge craft-media: shared codec identifiers, one ByteSource, the testkit (1/10) #439 (craft-media: shared codec identifiers, one ByteSource, the testkit): Provides foundational ByteSource and CodecParams.
    2. Rebase & Merge craft-media: index a Matroska file progressively #430 & media: bound Matroska resync work and header reads #457: Progressively index Matroska and bound resync work on top of craft-media: shared codec identifiers, one ByteSource, the testkit (1/10) #439's unified ByteSource.
    3. Merge craft-media: Ogg demuxer (2/10) #440 (craft-media: Ogg demuxer): Extends craft-media with Ogg container demuxing.
    4. Merge feat(codecs): centralize pure-Rust video codecs into craft-libs #504 (feat(codecs): centralize pure-Rust video and audio codecs into craft-libs): Provides standalone codec crates and workspace craft-testkit.
    5. Retarget craft-audio: core types, WAV/AIFF read and write, peaks, symphonia (3/10) #441+ (craft-audio): craft-audio consumes craft-aac and craft-opus from feat(codecs): centralize pure-Rust video codecs into craft-libs #504, closing craft-audio: AAC decoder (5/10) #443 (AAC decoder) and craft-audio: Opus decoder (7/10) #445 (Opus decoder) as superseded to eliminate double effort.
  12. alehel commented on Nov 2, 2026

    @alehel
    Contributor

    @el-j Have I understood correct that your proposed order here means that PRs #443 and #445 are the only of my stacked PRs that will be replaced by #504 ? So #442, #444, #446, #447 and #448 would still go in as features not covered by #504 ?

  13. el-j commented on Nov 3, 2026

    @el-j

    Hi @alehel! Great question, and I have good news with a fresh update following maintainer feedback on #504:

    None of your PRs (#441–#448) are replaced or superseded by #504 anymore! 🎉

    Here is what was updated based on review from @benandez:

    1. Clear single ownership: To avoid duplicate implementations and split ownership, we removed all audio crates (craft-aac, craft-opus, and craft-audio-io) and the symphonia workspace dependency from PR feat(codecs): centralize pure-Rust video codecs into craft-libs #504 entirely.
    2. Dedicated video codec scope: PR feat(codecs): centralize pure-Rust video codecs into craft-libs #504 is now strictly focused on pure-Rust video codecs (craft-h264enc, craft-prores, craft-hevcenc, craft-av1enc, craft-vp9enc, craft-vp8, craft-dnx) along with craft-testkit and the video craft-codecs umbrella.
    3. Your audio stack (craft-audio: core types, WAV/AIFF read and write, peaks, symphonia (3/10) #441–craft-audio: MP1/MP2 decoder (10/10) #448) is the canonical home: You have complete, undivided ownership of the entire craft-audio stack — from core types and file I/O (WAV, AIFF, peaks) through FLAC (craft-audio: FLAC encoder (4/10) #442), AAC decode/encode (craft-audio: AAC decoder (5/10) #443, craft-audio: AAC encoder (6/10) #444), Opus decode/encode (craft-audio: Opus decoder (7/10) #445, craft-audio: Opus encoder (8/10) #446), AC-3 (craft-audio: AC-3 and E-AC-3 decoder (9/10) #447), and MP1/MP2 (craft-audio: MP1/MP2 decoder (10/10) #448).

    There is now zero collision or overlap between #504 and #441–#448, and both stacks can proceed and land cleanly in parallel. Thanks a lot for coordinating with us!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions