Expose client visibility at create time (#457) — blocked on SDK#554
Expose client visibility at create time (#457) — blocked on SDK#554jeremy wants to merge 4 commits into
Conversation
Basecamp (bc3 master) accepts a top-level visible_to_clients param at create time, but the Go SDK's create-request types don't carry it, so the CLI can't pass it without an out-of-lane SDK change. Record the required SDK change (Smithy create inputs -> generated -> wrapper -> mapping) and the CLI wiring that follows in SDK-GAP-457.md.
There was a problem hiding this comment.
Pull request overview
Adds an SDK gap communiqué documenting what the Basecamp Go SDK must expose to let the CLI set visible_to_clients at recording create time (blocking CLI issue #457), so the eventual --visible-to-clients flag can be implemented atomically.
Changes:
- Add
SDK-GAP-457.mddescribing server behavior, in-scope recording types, and the specific SDK shape/wrapper/mapping changes needed. - Document the intended follow-on CLI wiring steps after an SDK bump.
Tip
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
All reported issues were addressed across 1 file
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
…cs/uploads Address review of SDK-GAP-457.md: - Fix message create contract: POST /message_boards/:board_id/messages.json with a flat body; the visible_to_clients key is top-level. - Require *bool tri-state (nil=inherit, true, false) end-to-end instead of bool,omitempty, which drops explicit false; cite the AllDay precedent. - Defer docs/uploads: they accept arbitrary folder IDs and nested vaults inherit folder visibility (silent no-op), so gate or defer before wiring. - Scope the verified gap to SDK v0.8.0; correct the lane-policy wording. - Link SDK tracking issue basecamp/basecamp-sdk#395 as the unblocker.
…ink follow-ups - Reference 'this PR' instead of a hard-coded PR number (drift-prone). - Point at function/struct identifiers instead of line numbers (files.go, schedules.go). - Link deferred docs/uploads to CLI follow-up #556; note the SDK should still expose those inputs for completeness (#395 covers all six) while the CLI withholds only the flag. - Clarify #457 closure sequencing (four-together vs messages-first).
… locked #457 boundary - Requested SDK change now targets all six inputs in the implementation steps (message, todolist, question, schedule entry, document, upload), matching the surrounding completeness note; no more four-now/two-later contradiction. - Gap evidence lists the six actual target wrappers (CreateMessageRequest, CreateTodolistRequest, CreateQuestionRequest, CreateScheduleEntryRequest, CreateDocumentRequest, CreateUploadRequest), not the unrelated card/todo/ comment structs. - Lock #457 completion boundary to the four initial commands; messages-first stays Refs #457 until all four are wired.
There was a problem hiding this comment.
All reported issues were addressed across 1 file (changes from recent commits).
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
Draft — blocked on the Basecamp Go SDK. Unblocker: basecamp/basecamp-sdk#395. Refs #457.
Root cause
The CLI can't set a recording's client visibility at create time because the SDK's create-request types don't carry the field.
visible_to_clientsboolean on create, e.g.POST /message_boards/:board_id/messages.jsonwith a flat body{"subject":"…","content":"…","visible_to_clients":true}. Omitted → inherits the parent's visibility; client users are forced visible.CreateMessageRequest,CreateTodolistRequest,CreateQuestionRequest,CreateScheduleEntryRequest,CreateDocumentRequest,CreateUploadRequest), nor the generated bodies or Smithy shapes, carryvisible_to_clientsat the pinnedv0.8.0. Only the separateSetClientVisibilityPUT exists. Repo policy forbids raw generated-client calls and routes SDK blockers to an SDK issue — hence Agent not passing --agent when requesting --md output mode #395.A create-then-toggle two-step would work for messages today but is non-atomic and can't touch cards/todos/comments (they inherit and 403). We're not shipping that; the clean path is the create-time param.
This PR
Adds
SDK-GAP-457.md— the design communiqué behind SDK issue #395: the API contract, the required SDK change (tri-state*boolacross all six inputs), and the CLI wiring that follows. The file is transient and is deleted in the commit that wires the feature; these links and the scope split are retained here in the PR body.Scope
messages create(priority),todolists create,checkins question create,schedule create.docs create/uploads create— accept arbitrary folder IDs; a nested vault inherits folder visibility (silent no-op), so they need docked/root-vault gating before carrying the flag. SDK still exposes their inputs; only the CLI flag waits.cards,todos,comments— parent-inherited (create ignores it; toggle 403s).The SDK field must be tri-state (
*bool: nil=inherit / true / false) so explicit--visible-to-clients=falsesendsfalserather than being dropped and inheriting — see #395 (AllDay precedent).#457 closure (locked)
#457 completes only when all four initial commands (messages, todolists, check-in questions, schedule entries) are wired. A messages-first PR may ship earlier but keeps
Refs #457and leaves #457 open; the switch toFixes #457happens only once all four are wired. Docs/uploads (#556) are outside the #457 boundary.Next steps
make bump-sdk, wire the flag (req.VisibleToClients = &visibleToClientsonly when the flag changed), tests for nil/true/false, regenerate.surface, updateSKILL.md,bin/cigreen.SDK-GAP-457.md; flip to ready when all four are wired (Refs #457→Fixes #457).