Fix GetProjectTimeline path from /buckets/ to /projects/#78
Conversation
The Smithy spec incorrectly used /buckets/{projectId}/timeline.json
instead of /projects/{projectId}/timeline.json. This was a
pattern-matching error — most bucket-scoped resources use /buckets/,
but timeline is a project-level resource under /projects/.
Audited all other @http URIs against bc3-api docs; this was the only
discrepancy.
Conformance tests validated behavior (status codes, retries, pagination) but not path correctness — the gap that allowed the /buckets/ vs /projects/ bug. The new requestPath assertion verifies the SDK constructs correct URL paths at CI time. Adds three path tests for timeline/reports operations (26 total, up from 23). Also adds GetProjectTimeline, GetProgressReport, and GetPersonProgress operation handlers to the conformance runner.
There was a problem hiding this comment.
Pull request overview
This PR fixes a critical bug where the GetProjectTimeline operation used an incorrect URL path /buckets/{projectId}/timeline.json instead of the correct /projects/{projectId}/timeline.json. The fix updates the Smithy specification, regenerates all three SDKs (Go, TypeScript, Ruby), and adds conformance test infrastructure to validate URL path correctness going forward.
Changes:
- Fixed GetProjectTimeline path in Smithy spec from
/buckets/to/projects/ - Added
requestPathassertion type to conformance test infrastructure with 3 new path validation tests - Regenerated all three SDKs (Go, TypeScript, Ruby) with the corrected path
Reviewed changes
Copilot reviewed 7 out of 17 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| spec/basecamp.smithy | Updated GetProjectTimeline HTTP URI from /buckets/ to /projects/ |
| typescript/src/generated/services/timeline.ts | Changed GET path from /buckets/ to /projects/ |
| typescript/src/generated/services/index.ts | Reorganized export order (TimelineService moved) |
| typescript/src/generated/schema.d.ts | Moved GetProjectTimeline path definition from /buckets/ to /projects/ section |
| typescript/src/generated/path-mapping.ts | Updated path-to-operation mapping |
| typescript/src/generated/openapi-stripped.json | Moved endpoint definition to correct path section |
| typescript/src/generated/metadata.json | Updated generation timestamp |
| ruby/test/basecamp/services/timeline_service_test.rb | Updated test stub to use /projects/ path |
| ruby/lib/basecamp/generated/types.rb | Updated generation timestamp |
| ruby/lib/basecamp/generated/services/timeline_service.rb | Changed from bucket_path helper to direct /projects/ path |
| ruby/lib/basecamp/generated/metadata.json | Updated generation timestamp |
| openapi.json | Moved GetProjectTimeline endpoint definition from /buckets/ to /projects/ |
| go/pkg/generated/client.gen.go | Updated NewGetProjectTimelineRequest to construct /projects/ path |
| go/pkg/basecamp/url-routes.json | Updated route pattern from /buckets/ to /projects/ |
| conformance/tests/paths.json | Added 3 new path validation tests |
| conformance/schema.json | Added requestPath assertion type |
| conformance/runner/go/main.go | Implemented requestPath assertion and added operation handlers |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3066962e04
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Adds GetProjectTimeline, GetProgressReport, and GetPersonProgress operation mappings plus the requestPath assertion handler so the Ruby runner can execute the new paths.json tests.
Summary
GetProjectTimelineSmithy spec used/buckets/{projectId}/timeline.jsoninstead of/projects/{projectId}/timeline.json— a pattern-matching error from the original transcription. Audited all other@httpURIs; this was the only discrepancy.requestPathassertion to conformance test infrastructure so URL path correctness is validated at CI time (26 tests, up from 23).Closes #75
Test plan
make checkpasses (Smithy, Go, TypeScript, Ruby, conformance)/projects/path propagated to all generated clients