Skip to content

Archive and restore a project - #992

Open
jeremy wants to merge 2 commits into
mainfrom
sdk-absorb/card-10447983764
Open

jeremy wants to merge 2 commits into
mainfrom
sdk-absorb/card-10447983764

Conversation

@jeremy

@jeremy jeremy commented Oct 30, 2026 •

Copy link
Copy Markdown
Member

basecamp projects archive <id> takes a project off the active list, and basecamp projects unarchive <id> brings it back.

Why

[CLI] Archive and unarchive a project: the SDK has had these two operations since basecamp-sdk#679, and the coverage report (basecamp-sdk#1055) lists them as unreached by the CLI. recordings archive goes through the generic ArchiveRecording, not the project endpoints, which are the ones that answer 403 where the admin pro pack restricts archiving.

What changed

Operation Command
ArchiveProject basecamp projects archive <id>
UnarchiveProject basecamp projects unarchive <id>
  • Both answer {id, status}. Each offers projects show as a follow-up, and archive also offers projects unarchive to undo it, carrying --profile and --account where the run needed them. unarchive offers no undo, because the project may have come from the trash and archiving it wouldn't put it back. The endpoints return 204 with no body, so neither re-reads the project; projects delete answers the same way.
  • unarchive also restores a project from the trash, as the API does, and fails with limit_exceeded at the account's project limit. Its help and agent notes say both, as do archive's for the admin pro pack's 403.
  • Catalog entry, .surface, an API-COVERAGE.md row with the summary counts, and a short note in skills/basecamp/SKILL.md. That note is two lines because the skill has a 16 KB limit and was 156 bytes under it; the rest is in leaf help.

Builds on

Main at 5f88c4f2, whose pinned SDK (v0.33.0) has both operations. No bump in this PR.

Left out

ArchiveRecording, the third operation the planner found on the card: main already reaches it through recordings archive.

Tests

  • Unit (internal/commands/projects_archive_test.go): the request each command sends, its output and follow-ups (none offering archive after unarchive), follow-ups keeping scope, the 403 and the 507 reported as errors with nothing on stdout, a bad ID refused before any request.
  • e2e (e2e/projects.bats): missing and non-numeric IDs, the help text on restoring from the trash.
  • Smoke (e2e/smoke/smoke_projects_write.bats): archive then unarchive in the project lifecycle, checked with projects show. Written but not run: smoke needs a live account.

make -k check on thelio passes everything except TestHardenConfigDir in internal/cli (symlinked ancestor is not followed, regular file is not chmod'd). Those two subtests fail the same way on a clean checkout of 5f88c4f2 on that machine, this PR touches nothing there, and main's CI is green, so remote CI on this PR is the check for them. They're worth a separate look: the test exists to prove hardening doesn't follow a symlinked ancestor or chmod a regular file.

Gap card

https://app.basecamp.com/2914079/buckets/48521764/card_tables/cards/10447983764

projects archive and projects unarchive reach the SDK's ArchiveProject and
UnarchiveProject, the project endpoints recordings archive doesn't use. They
answer 403 where the admin pro pack restricts archiving, and unarchive also
restores from the trash, answering 507 at the account's project limit.
@jeremy

jeremy commented Oct 30, 2026

Copy link
Copy Markdown
Member Author

🤖 @codex review

@github-actions github-actions Bot added commands CLI command implementations tests Tests (unit and e2e) skills Agent skills docs labels Oct 30, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-30T16:50:57.132140Z 3d4e5c9 Draft marked ready
🔒 Security Review ✅ Completed 2026-10-30T16:51:32.961364Z 3d4e5c9 Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 4451495f8c

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4451495f8c

ℹ️ 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".

Comment thread internal/commands/projects.go Resolved
unarchive also restores from the trash, and archiving a project it brought
back from there would not put it back. archive still offers unarchive.
@jeremy

jeremy commented Oct 30, 2026

Copy link
Copy Markdown
Member Author

🤖 @codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Can't wait for the next one!

Reviewed commit: 3d4e5c9a51

ℹ️ 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".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 3d4e5c9a51

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@jeremy

jeremy commented Oct 30, 2026

Copy link
Copy Markdown
Member Author

🤖 Converged on 3d4e5c9a: CI green, Codex found no issues on this head (its one earlier finding, the undo follow-up after unarchive, is fixed and resolved), no open threads, mergeable. Copilot was requested twice, on open and again on this head, and never reported. Marked ready for a person to merge.

TestHardenConfigDir fails locally on thelio on a clean 5f88c4f2 too, and passes in CI here. That is the machine, not this PR, but worth a look on its own.

@jeremy
jeremy marked this pull request as ready for review October 30, 2026 16:49
@jeremy
jeremy requested a review from a team as a code owner October 30, 2026 16:49

This branch has not been deployed

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

Labels

commands CLI command implementations docs skills Agent skills tests Tests (unit and e2e)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants