Skip to content

Say why triage acknowledge writes nothing, instead of promising it will - #5410

Open
yh928 wants to merge 2 commits into
tinyhumansai:mainfrom
yh928:fix/triage-acknowledge-log
Open

Say why triage acknowledge writes nothing, instead of promising it will#5410
yh928 wants to merge 2 commits into
tinyhumansai:mainfrom
yh928:fix/triage-acknowledge-log

Conversation

@yh928

@yh928 yh928 commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Summary

The Acknowledge arm of triage::escalation::apply_decision logged memory-write is a future addition. That described an unimplemented plan rather than the behaviour — and the plan was wrong. Replaces it with the reason the arm writes nothing, improves the log line, and files the work that note was actually pointing at.

Problem

Three things, in order of how much they matter.

The planned write would have been a bug. Copying an acknowledged trigger's summary into the memory store duplicates a document the connector sync has already ingested — the same mail, a second copy, competing with extracted memories for the same recall slots. That is #5312; #5315 is the fix for the copies that already exist. A note inviting the next contributor to add another one is worse than no note.

The arm's real behaviour was undocumented. Acknowledge is a classification, and the two things worth keeping are already kept elsewhere:

where when
what the trigger was trigger_history daily JSONL written before the triage gates, so it survives even with triage disabled
what it was judged to be DomainEvent::TriggerEvaluated published for every action, a few lines above this arm

Neither is obvious from the arm, so "writes nothing" read as an omission rather than a decision.

The log said what was missing instead of what happened. A reader tailing logs for an acknowledged trigger got a parenthetical about future work and no statement of the outcome.

Solution

  • The comment now states why the arm writes nothing, and names the two records that already exist.
  • The log line states what happened and where to look, and carries source and card_linked alongside the existing fields.
  • The sibling DROP arm gets the same two fields. Both are "no downstream work" verdicts; a dashboard filtering on source= would otherwise silently see only half of them.
  • The genuinely-missing piece — a record of what happened after the verdict, for every action rather than this one — is filed as Record what a trigger's verdict actually led to #5408 and referenced from the comment, so the next reader finds the work instead of re-deriving the note.

No behaviour change: the arm wrote nothing before and writes nothing now.

Acceptance criteria

  • The misleading note is gone — replaced by the reason, not by silence.
  • The reason is checkable — the comment names trigger_history and TriggerEvaluated, both verifiable in the same file's call path.
  • The follow-up is findableRecord what a trigger's verdict actually led to #5408 is linked from the code, not only from this PR.
  • Sibling arms stay greppable togetherDROP and ACKNOWLEDGE carry the same field set.
  • Tests passagent::triage 70 tests; cargo check --lib --all-features clean.

Related

Summary by CodeRabbit

  • New Features
    • Improved drop and acknowledgment activity logs with trigger source and task-card details.
    • Clarified acknowledgment records to indicate whether trigger history is retained, whether only the evaluation result is retained, and that no memory entry was created.
    • Added clearer activity history for Composio-triggered acknowledgments and other trigger sources, including their differing retention behavior.

@yh928
yh928 requested a review from a team August 5, 2026 12:40

@greptile-apps greptile-apps 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.

yh928 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4b590b36-f95d-4838-b3e1-9ad15a62c5d6

📥 Commits

Reviewing files that changed from the base of the PR and between c82715b and 14028cf.

📒 Files selected for processing (1)
  • src/openhuman/agent/triage/escalation.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/openhuman/agent/triage/escalation.rs

📝 Walkthrough

Walkthrough

The escalation logic updates drop and acknowledge logs with trigger source and task-card linkage. Acknowledge handling reports source-specific input retention, performs no memory write, and records evaluation through TriggerEvaluated.

Changes

Triage decision logging

Layer / File(s) Summary
Drop and acknowledge decision logging
src/openhuman/agent/triage/escalation.rs
Drop and acknowledge logs include trigger source and task-card linkage. Acknowledge handling documents no memory write, reports Composio trigger-history retention, and reports verdict-only retention for other sources. Tests cover Composio, webhook, cron, and webview sources.

Estimated code review effort: 2 (Simple) | ~10 minutes

Poem

I’m a rabbit, logging hops with care,
Sources and task cards now join the air.
No memory write when acknowledge is near,
Retention notes make records clear.
TriggerEvaluated marks the way,
Drop and ack logs shine today.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: explain why triage acknowledge writes nothing instead of promising a future write.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/openhuman/agent/triage/escalation.rs`:
- Around line 69-88: Update the acknowledge logging in apply_decision to
describe durable retention based on envelope.source. Keep the trigger-history
retention statement only for composio sources, and provide source-appropriate
wording for webhook, cron, and external envelopes while preserving the existing
structured fields and no-action behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 156d8dd5-d34c-48e4-86d9-b1f0e17a86a0

📥 Commits

Reviewing files that changed from the base of the PR and between d9d03af and e0cd845.

📒 Files selected for processing (1)
  • src/openhuman/agent/triage/escalation.rs

Comment thread src/openhuman/agent/triage/escalation.rs Outdated
yh928 added a commit to yh928/openhuman that referenced this pull request Aug 10, 2026
The log claimed "input retained in trigger history" for every acknowledged
trigger. Only the composio path has that archive — `trigger_history` is written
by `ComposioTriggerSubscriber` before the triage gates. A webhook, cron,
webview, or external acknowledge leaves nothing but the `TriggerEvaluated`
event, so the line pointed an operator at a record that was never written for
four of the five sources.

The retention claim is now a `retained` field derived from
`envelope.source`: the composio archive, or "none — verdict only".

Regression pins that only composio names an archive.

agent::triage 71 pass.

Reported by CodeRabbit on tinyhumansai#5410.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SRSNnqQsokuGmkbpLoLCGy
@yh928
yh928 force-pushed the fix/triage-acknowledge-log branch from e0cd845 to a994ca3 Compare August 10, 2026 00:13
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@tinysweeper tinysweeper 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.

tinysweeper found nothing blocking. Approving.

             $0.0021 · 16,131 in / 5,221 out · 3,567 cached (22%) · z-ai/glm-5.2
critique:    $0.0010 · 5,484 in  / 3,168 out · 896 cached (16%)   · z-ai/glm-5.2
security:    $0.0001 · 3,338 in  / 24 out    · 2,671 cached (80%) · z-ai/glm-5.2
tests:       $0.0005 · 3,253 in  / 1,044 out · 0 cached (0%)      · z-ai/glm-5.2
description: $0.0005 · 4,056 in  / 985 out   · 0 cached (0%)      · z-ai/glm-5.2

@tinysweeper tinysweeper Bot added the priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect. label Aug 10, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
src/openhuman/agent/triage/escalation.rs (1)

799-813: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover TriggerSource::External in this regression test.

TriggerSource supports External, but this loop covers only Composio, webhook, cron, and webview. Add an External case and assert none — verdict only. The current wildcard returns the expected value, but the test does not protect this supported source from a future regression.

Proposed test addition
             TriggerSource::WebviewIntegration {
                 provider: "gmail".into(),
                 account_id: "a".into(),
             },
+            TriggerSource::External {
+                caller_id: "caller".into(),
+                reason: "reason".into(),
+            },
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/openhuman/agent/triage/escalation.rs` around lines 799 - 813, Add a
TriggerSource::External case to the regression-test loop alongside the existing
source variants, using the appropriate External fields, and assert that it
produces no action (“none”) with only the verdict. Keep the existing assertions
and wildcard behavior unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/openhuman/agent/triage/escalation.rs`:
- Around line 799-813: Add a TriggerSource::External case to the regression-test
loop alongside the existing source variants, using the appropriate External
fields, and assert that it produces no action (“none”) with only the verdict.
Keep the existing assertions and wildcard behavior unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 141361fd-33d2-4dc7-bada-666e850eb122

📥 Commits

Reviewing files that changed from the base of the PR and between 8774fe4 and a994ca3.

📒 Files selected for processing (1)
  • src/openhuman/agent/triage/escalation.rs

yh928 and others added 2 commits August 11, 2026 14:37
…e day

The arm logged `memory-write is a future addition`, which described an
unimplemented plan rather than the behaviour — and the plan was wrong. Writing a
summary here would duplicate a document the connector sync has already ingested:
the same mail, a second copy, competing with extracted memories for the same
recall slots. That is tinyhumansai#5312, and tinyhumansai#5315 is the fix; this arm should not reopen it.

Acknowledge is a classification, not a write, and the two things worth keeping
are already kept. What the trigger *was* is durable in the composio
trigger-history JSONL, written before the triage gates so it survives even with
triage disabled. What it was *judged to be* went out as `TriggerEvaluated` a few
lines above, for every action.

What is actually missing is a record of what happened *after* the verdict — for
every action, not just this one — which belongs in its own surface rather than
bolted onto one branch. Filed as tinyhumansai#5408, and referenced from the comment so the
next reader finds the work instead of re-deriving the note.

The log line now states what happened and where to look, and carries `source`
and `card_linked`. The sibling DROP arm gets the same two fields: both are
"no downstream work" verdicts, and a dashboard filtering on `source=` would
otherwise silently see only half of them.

agent::triage 70 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SRSNnqQsokuGmkbpLoLCGy
The log claimed "input retained in trigger history" for every acknowledged
trigger. Only the composio path has that archive — `trigger_history` is written
by `ComposioTriggerSubscriber` before the triage gates. A webhook, cron,
webview, or external acknowledge leaves nothing but the `TriggerEvaluated`
event, so the line pointed an operator at a record that was never written for
four of the five sources.

The retention claim is now a `retained` field derived from
`envelope.source`: the composio archive, or "none — verdict only".

Regression pins that only composio names an archive.

agent::triage 71 pass.

Reported by CodeRabbit on tinyhumansai#5410.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SRSNnqQsokuGmkbpLoLCGy
@yh928
yh928 force-pushed the fix/triage-acknowledge-log branch from a994ca3 to 14028cf Compare August 11, 2026 05:38
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

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

Labels

priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant