Skip to content

docs(architecture): propose non-destructive Project removal - #298

Merged
shingonoide merged 8 commits into
mainfrom
task-cc1c8ccb-4345-4492-a891-9881505e060b
Nov 3, 2026
Merged

shingonoide merged 8 commits into
mainfrom
task-cc1c8ccb-4345-4492-a891-9881505e060b

Conversation

@shingonoide

@shingonoide shingonoide commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This pull request revises the architecture proposal in docs/architecture/project-removal.md. The proposal now describes logical hide and restore for a Project: one optional hidden_at field on the existing Project record, with the Project id, Repository record, Tasks, Conversation, configuration, and Workspace membership all kept in place.

This is a documentation-only change. No production code, configuration, or test is changed. The document is a proposal. Nothing in it is implemented or adopted.

Authorization and approval status

  • The documentation revisions were authorized by the repository owner outside the normal SlashIt Human Review renewal path.
  • The earlier Human Review approval covers the previously published commit 690916997d7201036fb7586bd323556bdaaded1d. It does not approve the later revisions, and it must not be read as approval of them.
  • The current head is daf1f2f0eb6fea261693a0fe6ecc4d44f50196e7. It has two documentation commits on top of 690916997d7201036fb7586bd323556bdaaded1d: the logical-hide revision, and a correction to the checkout and decision rules.
  • The SlashIt Task record is unchanged by this update.
  • This pull request remains a draft and is not ready to merge.

What changed from the previous revision

  • The earlier version described an archive. The new version describes logical hide only. Permanent deletion and moved-folder recovery are deferred.
  • Credential handling was corrected. An agent-type change in update_project resets agent_config and clears a configured api_key today. The earlier text said the opposite. This is recorded as an existing finding, separate from the proposed feature.
  • The lock sequence now includes the in-memory projects write lock, which every Project writer already takes. Without it, a concurrent write could revert a hide on disk.
  • PrCreated is no longer named as an unresolved-work marker. It is a historical outcome. The durable markers are listed in section 2.5.
  • A PrCreated Task that still holds a checkout blocks hide, regardless of status. Hide does not release, detach, or reclaim a checkout. Some Projects may therefore need a separate, explicit checkout-release mechanism before they can be hidden. That mechanism is a lifecycle requirement for implementation, not part of this proposal (section 3.4).
  • The startup notice is a later, non-required addition. Phase 1 does not depend on it.
  • Restore takes the Project id and never a folder. Adding a folder that a hidden Project still uses is refused, with a pointer to restore.
  • The enforcement table now has 28 rows. Rows 20 to 28 cover paths the earlier table omitted, including Worker new-attempt and recovery acceptance, integration commands, IPC terminalizing moves, the executor's committed-handoff reconciliation, dependency checkout admission, PR publication and restack, PR republish, and the Project path lookup.
  • Every behavior is labeled VERIFIED CURRENT or PROPOSED.

Review thread dispositions

These are design positions, not GitHub thread resolutions. No thread has been resolved in this update. The threads may show as outdated after this commit.

Thread Disposition in this revision
Repository-less Projects Resolved by design. Nothing is copied, repository_id stays optional, and restore needs no path (sections 3.1, 3.5).
Canonical board route Mostly resolved. Routes derive from the retained record. The Auto location can drift, so restore checks the resolved board and refuses on conflict (sections 2.2, 3.5). A stored resolved location is deferred.
Shared Repository ownership Resolved by design. No copy and no move. One Repository record stays (section 3.3).
Non-destructive invariant wording Wording fixed. The invariant is one config field, tested by tree diff (sections 3.2, 11).
Permanent deletion of archived Projects Deferred. No permanent delete in phase 1 (section 9).
Folder-only restore Addressed. Restore takes the Project id (sections 3.5, 3.6).
Cross-project orphan ownership Resolved by design. Hidden Projects' Tasks remain in the orphan owner set, and a test covers it (row 19, test T32).

Decisions

Section 12.2 lists the phase-1 decisions:

  • O1, downgrade policy: settled. The document accepts a documented procedure and does not claim fail-closed protection against released older builds.
  • O6, open pull requests on hide: settled. The hide confirmation warns and does not block.
  • O7, adding a folder used by a hidden Project: settled. The add is refused, with a pointer to restore.
  • O2, whether active-Project api_key exposure is handled in this phase: open. The default is to record it as a separate item.
  • O4, a hidden Workspace member blocks Workspace deletion until it is restored or detached: open. The default applies until the owner decides otherwise.

Validation

  • Source claims were read against the main branch after PR feat(tasks): select review mode during Task creation #299 was merged. Line references are given in the document.
  • The revised document was reviewed by an independent read-only pass before publication. Its material findings were checked against main and corrected, including the lock-order claim, the Conversation open and get writes, the Add-flow check location, and the Attention coverage of Failed Tasks.
  • The api_key serialization question is resolved from source: AgentConfig has no skip attribute (src-tauri/src/domain/project.rs:138-144).
  • Each published diff touches only docs/architecture/project-removal.md.
  • scripts/check-agent-docs.sh passes on daf1f2f0.
  • Hosted CI is the authoritative check for this head.

@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: BarraDev/slashit
  • Branch: main
  • File: .coderabbit.yaml
  • Commit: 3f462a5
  • Layers: Repository YAML (base), Repository UI (inherited)
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: d9e77fdc-0ad7-4ee6-ab44-cb1051fe2ac8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • Resume reviews
  • Trigger review
Walkthrough

This change adds a design proposal for archiving Projects separately from permanently deleting them. It describes proposed archive records, restore and re-registration rules, refusal conditions, checkout ownership, failure outcomes, and command and UI surfaces. It also outlines backend and frontend tests, identifies implementation risks, and lists unresolved decisions. The proposal does not implement the archive behavior.

Possibly related issues

Possibly related PRs

  • BarraDev/slashit#202: The proposal uses the existing destructive Project removal path as its baseline and describes related refusal and recovery behavior.
  • BarraDev/slashit#203: The proposal specifies a one-transaction archive operation and discusses config publication and restart outcomes.
  • BarraDev/slashit#120: The proposal extends checkout and branch ownership accounting to archived Projects.

Change: Other

Merge Risk: Moderate · previous review daf1f

This draft proposal for hiding and restoring Projects changes no runtime behavior. Before the design is adopted, it should define how an unconfirmed hide is detected after a crash, how restore handles legacy-only task boards, and how to downgrade with a Project that cannot be restored. It should also narrow the claim that startup writes nothing for hidden Projects.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title clearly and concisely describes the documentation proposal for non-destructive Project removal. It does not claim implementation work that is absent.
Description check Passed The description accurately explains the documentation-only logical hide and restore proposal, its scope, revisions, and non-implementation status.
Persistent State Integrity Passed The pull request changes only the new documentation file docs/architecture/project-removal.md (+502 lines). It changes no application code, persistence logic, or shared-memory mutation path. The che…
Recoverable Resource Lifecycle Passed The pull request changes only docs/architecture/project-removal.md (+502/-0). No worktree, task, migration, or cleanup lifecycle code is changed. The document explicitly states that the proposal is …
Platform Boundary Safety Passed The reviewed range changes only docs/architecture/project-removal.md (+502 lines). It adds a proposal and explicitly states that no code, configuration, or tests are changed. No build path or platfo…
Full details: Persistent State Integrity

Explanation

The pull request changes only the new documentation file docs/architecture/project-removal.md (+502 lines). It changes no application code, persistence logic, or shared-memory mutation path. The check is therefore not applicable.

Full details: Recoverable Resource Lifecycle

Explanation

The pull request changes only docs/architecture/project-removal.md (+502/-0). No worktree, task, migration, or cleanup lifecycle code is changed. The document explicitly states that the proposal is not implemented and that no code, configuration, or test is changed. Therefore, the failure condition is not introduced.

Full details: Platform Boundary Safety

Explanation

The reviewed range changes only docs/architecture/project-removal.md (+502 lines). It adds a proposal and explicitly states that no code, configuration, or tests are changed. No build path or platform-specific implementation changed, so the stated failure condition is not present.

Tip

🎯 Customize your risk assessments

Guide how CodeRabbit assesses merge risk and security architecture risk. Highlight sensitive changes and explain your security boundaries using Merge Risk Instructions and Security Risk Instructions in your review settings. Security architecture risk assessments require the Advanced plan or above.

✅ Automatic approvals, with your rules

Let CodeRabbit approve pull requests once required threads are resolved, pre-merge checks pass, and your risk limits are met. Enable Automatic approvals in review settings, with overrides for teams or file paths.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.
Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 3f462a5 and daf1f2f.

Files selected for processing: 1
  • docs/architecture/project-removal.md

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

@shingonoide shingonoide changed the title Design non-destructive Project removal (proposal only) docs(architecture): propose non-destructive Project removal Nov 2, 2026
@shingonoide
shingonoide marked this pull request as draft November 2, 2026 23:34
Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Replace the archive design with a logical hide design: one optional
hidden_at field on the existing Project record, with the Project id,
Repository, Tasks, Conversation, configuration, and Workspace membership
kept in place. Document the hide and restore preconditions, the
enforcement boundaries, lock order, downgrade limits, and credential
handling, and label each claim as verified current behavior or proposal.

This is a documentation-only change. No code, configuration, or test
is changed.
- Qualify the PrCreated not-blocking rule: a PrCreated Task that still
  holds a worktree_path blocks hide, regardless of status.
- Document that hide does not release or reclaim checkouts, and that a
  separate explicit release mechanism may be required before some
  Projects can be hidden.
- Mark phase-1 decisions O1, O6 and O7 as settled; keep O2 and O4 open.
- Present the startup notice as a later, non-required addition.
- Resolve the api_key serialization question from source.
@shingonoide
shingonoide marked this pull request as ready for review November 3, 2026 02:19
@shingonoide

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Action performed

Full review finished.

Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Comment thread docs/architecture/project-removal.md Resolved
Restore accepts a Project whose board is still in the legacy location, as
the loader does. Placeholders in example messages are code-formatted so
they are not rendered as HTML. Startup does not confirm a reverted hide,
because the confirmation flag is process-local; the limitation is recorded
as an open decision. Downgrade is marked unsupported while a hidden Project
is unrestorable. T20 covers only NotPublished, T21 covers PublishedNotDurable,
and T22 uses current-format fixtures. Section cross-references are corrected.
State O1, O6 and O7 as settled in one place and mark the proposal as
proposed direction. Add workspace detach to the Project writer inventory
and to T26. Correct the lifecycle line references, the checkout row, and
the lock-order and projects_referencing statements. Record O8 and O9 with
the preferred directions.
@shingonoide
shingonoide merged commit acc7d8f into main Nov 3, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant