Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .surface
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ ARG basecamp campfire delete 00 <id|url>
ARG basecamp campfire line 00 <id|url>
ARG basecamp campfire post 00 <message>
ARG basecamp campfire show 00 <id|url>
ARG basecamp campfire update 00 <id|url>
ARG basecamp campfire update 01 [content]
ARG basecamp campfire upload 00 <file>
ARG basecamp card 00 <title>
ARG basecamp card 01 [body]
Expand Down Expand Up @@ -66,6 +68,8 @@ ARG basecamp chat delete 00 <id|url>
ARG basecamp chat line 00 <id|url>
ARG basecamp chat post 00 <message>
ARG basecamp chat show 00 <id|url>
ARG basecamp chat update 00 <id|url>
ARG basecamp chat update 01 [content]
ARG basecamp chat upload 00 <file>
ARG basecamp checkin answer 00 <id|url>
ARG basecamp checkin answer create 00 <question-id>
Expand Down Expand Up @@ -479,6 +483,7 @@ CMD basecamp campfire list
CMD basecamp campfire messages
CMD basecamp campfire post
CMD basecamp campfire show
CMD basecamp campfire update
CMD basecamp campfire upload
CMD basecamp card
CMD basecamp card move
Expand Down Expand Up @@ -520,6 +525,7 @@ CMD basecamp chat list
CMD basecamp chat messages
CMD basecamp chat post
CMD basecamp chat show
CMD basecamp chat update
CMD basecamp chat upload
CMD basecamp checkin
CMD basecamp checkin answer
Expand Down Expand Up @@ -2363,6 +2369,30 @@ FLAG basecamp campfire show --stats type=bool
FLAG basecamp campfire show --styled type=bool
FLAG basecamp campfire show --todolist type=string
FLAG basecamp campfire show --verbose type=count
FLAG basecamp campfire update --account type=string
FLAG basecamp campfire update --agent type=bool
FLAG basecamp campfire update --cache-dir type=string
FLAG basecamp campfire update --content type=string
FLAG basecamp campfire update --content-type type=string
FLAG basecamp campfire update --count type=bool
FLAG basecamp campfire update --help type=bool
FLAG basecamp campfire update --hints type=bool
FLAG basecamp campfire update --ids-only type=bool
FLAG basecamp campfire update --in type=string
FLAG basecamp campfire update --jq type=string
FLAG basecamp campfire update --json type=bool
FLAG basecamp campfire update --markdown type=bool
FLAG basecamp campfire update --md type=bool
FLAG basecamp campfire update --no-hints type=bool
FLAG basecamp campfire update --no-stats type=bool
FLAG basecamp campfire update --profile type=string
FLAG basecamp campfire update --project type=string
FLAG basecamp campfire update --quiet type=bool
FLAG basecamp campfire update --room type=string
FLAG basecamp campfire update --stats type=bool
FLAG basecamp campfire update --styled type=bool
FLAG basecamp campfire update --todolist type=string
FLAG basecamp campfire update --verbose type=count
FLAG basecamp campfire upload --account type=string
FLAG basecamp campfire upload --agent type=bool
FLAG basecamp campfire upload --cache-dir type=string
Expand Down Expand Up @@ -3336,6 +3366,30 @@ FLAG basecamp chat show --stats type=bool
FLAG basecamp chat show --styled type=bool
FLAG basecamp chat show --todolist type=string
FLAG basecamp chat show --verbose type=count
FLAG basecamp chat update --account type=string
FLAG basecamp chat update --agent type=bool
FLAG basecamp chat update --cache-dir type=string
FLAG basecamp chat update --content type=string
FLAG basecamp chat update --content-type type=string
FLAG basecamp chat update --count type=bool
FLAG basecamp chat update --help type=bool
FLAG basecamp chat update --hints type=bool
FLAG basecamp chat update --ids-only type=bool
FLAG basecamp chat update --in type=string
FLAG basecamp chat update --jq type=string
FLAG basecamp chat update --json type=bool
FLAG basecamp chat update --markdown type=bool
FLAG basecamp chat update --md type=bool
FLAG basecamp chat update --no-hints type=bool
FLAG basecamp chat update --no-stats type=bool
FLAG basecamp chat update --profile type=string
FLAG basecamp chat update --project type=string
FLAG basecamp chat update --quiet type=bool
FLAG basecamp chat update --room type=string
FLAG basecamp chat update --stats type=bool
FLAG basecamp chat update --styled type=bool
FLAG basecamp chat update --todolist type=string
FLAG basecamp chat update --verbose type=count
FLAG basecamp chat upload --account type=string
FLAG basecamp chat upload --agent type=bool
FLAG basecamp chat upload --cache-dir type=string
Expand Down Expand Up @@ -16266,6 +16320,7 @@ SUB basecamp campfire list
SUB basecamp campfire messages
SUB basecamp campfire post
SUB basecamp campfire show
SUB basecamp campfire update
SUB basecamp campfire upload
SUB basecamp card
SUB basecamp card move
Expand Down Expand Up @@ -16307,6 +16362,7 @@ SUB basecamp chat list
SUB basecamp chat messages
SUB basecamp chat post
SUB basecamp chat show
SUB basecamp chat update
SUB basecamp chat upload
SUB basecamp checkin
SUB basecamp checkin answer
Expand Down
4 changes: 2 additions & 2 deletions API-COVERAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Out-of-scope sections are excluded from parity totals and scripts: chatbots (dif

> Note: the per-row `Endpoints` column in the Coverage by Section table sums higher than the Summary totals above. The discrepancy predates the BC5 baseline; the row count (46 sections) is authoritative for the `Since` column. Reconciling endpoint counts is pre-existing maintenance, tracked separately.

**SDK version:** v0.7.3 — maintenance bump: API date advanced to 2026-03-23, transitive dependency updates. No new services or methods.
**SDK version:** v0.7.3 + pending UpdateCampfireLine (basecamp/basecamp-sdk#295). On merge of the SDK PR + next tagged release, this header will move to that version and the temporary fork pin in `go.mod` will be dropped.

## Coverage by Section

Expand All @@ -37,7 +37,7 @@ The **Since** column tags each row with the Basecamp version that introduced its
| messages | 10 | `messages`, `message` | ✅ | BC4 | - | list, show, create, update, publish, pin, unpin. Create supports `--subscribe`/`--no-subscribe` and `--draft`. Publish promotes drafts to active |
| message_boards | 3 | `messageboards` | ✅ | BC4 | - | Container, accessed via project dock |
| message_types | 5 | `messagetypes` | ✅ | BC4 | - | list, show, create, update, delete |
| campfires | 14 | `chat` | ✅ | BC4 | - | list, messages, post, line show/delete. @mentions in content |
| campfires | 14 | `chat` | ✅ | BC4 | - | list, messages, post, line show/update/delete. @mentions in content |
Comment thread
nnemirovsky marked this conversation as resolved.
| comments | 8 | `comment`, `comments` | ✅ | BC4 | - | list, show, create, update. @mentions in content |
| boosts | 6 | `boost`, `react` | ✅ | BC4 | - | list (recording + event), show, create (recording + event), delete |
| notifications | 2 | `notifications` | ✅ | BC4 | - | list, mark as read |
Expand Down
9 changes: 9 additions & 0 deletions e2e/chat.bats
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,15 @@ load test_helper
assert_output_contains "ID required"
}

@test "chat update without args shows error" {
create_credentials
create_global_config '{"account_id": 99999, "project_id": 123}'

run basecamp chat update
assert_failure
Comment thread
nnemirovsky marked this conversation as resolved.
assert_output_contains "required"
}


# Help flag

Expand Down
22 changes: 22 additions & 0 deletions e2e/smoke/smoke_campfire.bats
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,28 @@ setup_file() {
assert_json_not_null '.data.id'
}

@test "campfire update edits a message" {
local id_file="$BATS_FILE_TMPDIR/campfire_line_id"
[[ -f "$id_file" ]] || mark_unverifiable "No campfire line created in prior test"
local line_id new_content
line_id=$(<"$id_file")
new_content="Edited smoke test $(date +%s)"

run_smoke basecamp campfire update "$line_id" "$new_content" \
--room "$QA_CAMPFIRE" -p "$QA_PROJECT" --json
assert_success
assert_json_value '.ok' 'true'
assert_json_not_null '.data.id'
Comment thread
nnemirovsky marked this conversation as resolved.

# Re-fetch the line and verify its content actually changed (guards against
# a no-op update silently passing).
run_smoke basecamp campfire line "$line_id" \
--room "$QA_CAMPFIRE" -p "$QA_PROJECT" --json
assert_success
echo "$output" | jq -e --arg expected "$new_content" '.data.content | contains($expected)' >/dev/null \
|| fail "expected updated line content to contain '$new_content', got: $(echo "$output" | jq -r '.data.content')"
}

@test "campfire delete deletes a message" {
local id_file="$BATS_FILE_TMPDIR/campfire_line_id"
[[ -f "$id_file" ]] || mark_unverifiable "No campfire line created in prior test"
Expand Down
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,5 @@ require (
golang.org/x/sync v0.20.0 // indirect
golang.org/x/term v0.38.0 // indirect
)

replace github.com/basecamp/basecamp-sdk/go => github.com/nnemirovsky/basecamp-sdk/go v0.5.1-0.20260504111141-62d09023dc73
Comment thread
nnemirovsky marked this conversation as resolved.
Comment thread
nnemirovsky marked this conversation as resolved.
Comment thread
nnemirovsky marked this conversation as resolved.
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ
github.com/aymanbagabas/go-udiff v0.4.1/go.mod h1:0L9PGwj20lrtmEMeyw4WKJ/TMyDtvAoK9bf2u/mNo3w=
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
github.com/basecamp/basecamp-sdk/go v0.7.4-0.20260423230153-f54589f0924a h1:TPVDkxRbdon4oxEYycnTV1Aslz2ZyMqgPiPUutNc+cg=
github.com/basecamp/basecamp-sdk/go v0.7.4-0.20260423230153-f54589f0924a/go.mod h1:g53B/9z0VNYo217NrAf4zuEDc2yNolFBa09C3vSHbUI=
github.com/basecamp/cli v0.2.1 h1:8GyehPVtsTXla0oOPu4QgXRjwwzJ99prlByvyi+0HRQ=
github.com/basecamp/cli v0.2.1/go.mod h1:p8tt/DatJ2LAzWO6N6tNfV8x3gF5T3IxDTo+U8FfWPo=
github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w=
Expand Down Expand Up @@ -129,6 +127,8 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
github.com/nnemirovsky/basecamp-sdk/go v0.5.1-0.20260504111141-62d09023dc73 h1:uNGFi10azpdkC0/Vdhj0gWJPwd0xlTyX81yuXQo/Dxg=
github.com/nnemirovsky/basecamp-sdk/go v0.5.1-0.20260504111141-62d09023dc73/go.mod h1:g53B/9z0VNYo217NrAf4zuEDc2yNolFBa09C3vSHbUI=
github.com/oapi-codegen/runtime v1.4.0 h1:KLOSFOp7UzkbS7Cs1ms6NBEKYr0WmH2wZG0KKbd2er4=
github.com/oapi-codegen/runtime v1.4.0/go.mod h1:5sw5fxCDmnOzKNYmkVNF8d34kyUeejJEY8HNT2WaPec=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand Down
Loading
Loading