Skip to content

feat(api): cancel accepted project-histories via loopback CLI - #448

Closed
seonghobae wants to merge 2 commits into
feat/project-history-cancel-http-gap-003afrom
feat/project-history-cancel-cli-gap-003a
Closed

feat(api): cancel accepted project-histories via loopback CLI#448
seonghobae wants to merge 2 commits into
feat/project-history-cancel-http-gap-003afrom
feat/project-history-cancel-cli-gap-003a

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Summary

GAP-003A unique operator-visible slice: published tepp-project-history-cancel cancel mints typed lineageweave_project_history_cancel_exchange onto spawned tepp-loopback TCP.

Explicitly not

Another project-history cancel HTTP (#447), export cancel CLI (#446), export cancel HTTP (#445), interpretation-run cancel CLI (#442), interpretation-run cancel HTTP (#440), project-history retrieval CLI (#431), project-history GET-by-id (#429), project-history collection CLI (#428), project-history collection GET (#424), project-history POST CLI (#420), analysis-run cancel (#361), Leiden, Driver p.16, GAP-010 Figma/export, persistence/Compose (#287).

Does not add GET to NaruonLiveService. Does not open naruon on this LineageWeave-owned adapter. Does not weaken fail-closed. Does not infer causality. No Buyer language. HTTP 200 is not an ADR 0014 claim.

Test plan

  • cargo test -p tepp_api --lib project_history_cancel_cli
  • cargo test -p tepp_api --test project_history_cancel_cli_contract
  • cargo clippy -p tepp_api --all-targets -- -D warnings
  • cargo doc -p tepp_api --no-deps
  • python3 scripts/validate_documentation.py
  • python3 scripts/check_docstrings.py

Devin Review

Publish tepp-project-history-cancel cancel so operators mint LineageWeave
POST /v1/project-histories/{idempotency_key}/cancel onto spawned
tepp-loopback TCP. Receipts stay metric-free cancelled=true with
temporal_association_only. Naruon is refused. NaruonLiveService stays
POST-only. ADR 0080.
@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

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

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: d84b526d-92d9-4990-90d3-9e45e51749dd

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

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

Comment @coderabbitai help to get the list of available commands.

devin-ai-integration[bot]

This comment was marked as resolved.

@devin-ai-integration devin-ai-integration 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.

Devin Review found 1 new potential issue.

Devin Review

return Err(ApiError::InvalidWirePayload);
}
let parsed = ProjectHistoryCancelled::from_json(&response.body)?;
if !parsed.cancelled || parsed.idempotency_key != invocation.idempotency_key {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📝 Info: Receipt matching remains exact

The idempotency_key check rejects a valid-looking receipt for another request. Existing receipt validation still governs every other response field.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Contributor Author

Closing with replacement mapping to #174. Before closure, exact branch head 548ef0a7fc64b3abb89b0718e59aebfbac8283d7 repaired its own valid review bug: CLI stdout now rejects a cancellation receipt whose idempotency_key differs from the requested history, with a regression test. That fix remains useful lineage, but this CLI still transports #447's unauthenticated destructive mutation and therefore must not ship until the authenticated principal/resource/purpose boundary exists.

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