You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Fix show lookups for supported Basecamp item URLs - #1017
Pasting a supported Basecamp item URL into basecamp show should return the item with its full content, rather than fail on an incorrect endpoint or stop at a sparse recording.
This fixes inbox-forward routing, recognizes current reply/card-table/column wire types, and supports the native reply, subtask, Google-document and cloud-file paths already modeled by the URL parser. Typed and generic lookups share canonical endpoint mapping; recurring occurrences use validated parent/date context to build a relative API request.
URL lookups now reject untrusted hosts, conflicting accounts, wrong projects and wrong nested chat/forward parents. Project checks retain the original sparse recording's bucket when enrichment returns a different representation, and missing parent context is carried into the richer response. Numerically equivalent IDs remain accepted. Recording fragments still select their referenced child.
Verification
Committed regression tests cover endpoint/content selection, actual wire types, occurrence refetch context, aliases, numeric ID equivalence and URL rejection boundaries.
Full local bin/ci passes.
Real local BC3 acceptance: 309/309 cases pass — 273 positive cases across 29 resource/context families and 36 deliberate rejections. The harness rebuilds the CLI, compares identity/type/content with dedicated local API responses, and cleans up its short-lived token and loopback server. No mocked API or production/beta requests.
Three independent Codex CLI reviews (correctness, URL/account/host security, regression/coverage), plus two follow-ups after addressing the numeric-ID and remote-review findings. Actual review model: gpt-6.1-sol; Codex CLI 0.166.0.
The real-server harness uses an isolated retained local development database and is not committed; the deterministic regression tests run with the normal repository suite. This does not add arbitrary web-page support, new product families, or an ONCE/SQLite verification claim. Real URL acceptance runs use --no-comments; existing tests retain comment-enrichment coverage.
Ready for Rob’s final review once the remote checks are green. Please leave merging to Rob.
The reason will be displayed to describe this comment to others. Learn more.
🟢 Approved
No active review issues are recorded for the changes to basecamp show URL routing and content retrieval.
No open issues 🎉
What changed in this PR
Fixes basecamp show so supported Basecamp item URLs resolve through the correct endpoints and return full content rather than sparse recordings.
Changes:
Unifies typed and generic endpoint mapping, adding native item aliases and current wire types.
Adds validated occurrence refetching and rejects mismatched URL hosts, accounts, projects, and nested parents.
Adds regression coverage for routing, content retrieval, URL rejection, and numerically equivalent IDs.
[!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.
File
Description
internal/urlarg/urlarg.go
Preserves the parent forward ID from nested reply URLs.
internal/commands/show.go
Corrects endpoint routing, expands supported types, and validates URL context.
internal/commands/show_urls_test.go
Adds URL routing, full-content, occurrence, and validation regression tests.
internal/commands/show_test.go
Updates endpoint expectations and reply/chat fixtures.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Valid nested reply and chat-line URLs can be rejected because enrichment discards the sparse recording's matching parent ID when the dedicated response omits parent.
No open issues 🎉
1 previously missed issue
In code that hasn't changed since last review
Preserve nested reply parent when enrichment omits it
internal/commands/show.go:282
Valid nested reply and chat-line URLs are rejected when the dedicated response omits parent, because enrichment discards the sparse recording's matching parent ID. Preserve that parent when the richer response omits it; the same issue affects the chat check at line 285. Add nested-URL cases using the parent-less responses already covered by TestShowRefetchesRealReplyContent and TestShowLineRefetchesViaParent.
…950575
* origin/main:
Fix show lookups for supported Basecamp item URLs (#1017)
Stamp v0.25.0 (#1016)
Put the gist of the writing instructions in every agent session (#1014)
Stamp v0.24.3 (#1013)
Read a slow keyring instead of calling its credential missing (#1011)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
commandsCLI command implementationstestsTests (unit and e2e)
2 participants
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pasting a supported Basecamp item URL into
basecamp showshould return the item with its full content, rather than fail on an incorrect endpoint or stop at a sparse recording.This fixes inbox-forward routing, recognizes current reply/card-table/column wire types, and supports the native reply, subtask, Google-document and cloud-file paths already modeled by the URL parser. Typed and generic lookups share canonical endpoint mapping; recurring occurrences use validated parent/date context to build a relative API request.
URL lookups now reject untrusted hosts, conflicting accounts, wrong projects and wrong nested chat/forward parents. Project checks retain the original sparse recording's bucket when enrichment returns a different representation, and missing parent context is carried into the richer response. Numerically equivalent IDs remain accepted. Recording fragments still select their referenced child.
Verification
bin/cipasses.gpt-6.1-sol; Codex CLI0.166.0.The real-server harness uses an isolated retained local development database and is not committed; the deterministic regression tests run with the normal repository suite. This does not add arbitrary web-page support, new product families, or an ONCE/SQLite verification claim. Real URL acceptance runs use
--no-comments; existing tests retain comment-enrichment coverage.Ready for Rob’s final review once the remote checks are green. Please leave merging to Rob.