Skip to content

test(tools): fix the catalog drift guard's feature list and present goal_resume - #8356

Merged
M3gA-Mind merged 2 commits into
tinyhumansai:mainfrom
M3gA-Mind:fix/tool-catalog-feature-list
Oct 24, 2026
Merged

M3gA-Mind merged 2 commits into
tinyhumansai:mainfrom
M3gA-Mind:fix/tool-catalog-feature-list

Conversation

@M3gA-Mind

@M3gA-Mind M3gA-Mind commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Fixes tools::ops::tests::catalog_fixture_tests::tool_catalog_matches_frontend_fixture.

full_product_features_enabled() keeps a list of the product's cargo gates and asserts that it equals scripts/ci/product-features.txt, minus the RPC-only os-keyring. That stops a new product gate from silently making a partial build look like the shipped product. storage-file, secret-file and legacy-import were added to product-features.txt (fdd6ae9, f0a727c, 478120e) but not to this list, so the assert_eq!(checked, declared) failed in every build, before the catalog comparison ran.

This PR adds the three flags. A build without them, such as the gates-off lanes, now reports itself as non-product and only checks that every registered tool name is in the fixture, as the test intends for partial builds. A full product build keeps the exact-equality check.

Second drift, uncovered once the flag list held: goal_resume. With the assertion passing, the test reached its catalog comparison and reported added: ["goal_resume"]. tinyagents' goals family gained goal_resume: a paused goal is resumed when the user continues that objective. The tinyagents pin (#8330) made the core register it, both in the product build and in partial builds, and core already names it in the orchestrator's tool list and the threads tool group. The frontend didn't know it, so the second commit:

  • adds goal_resume to coreToolNames.json;
  • gives it a spec in toolSpecs.ts (flag icon, plan family, like goal_set / goal_get / goal_complete) and phrases in toolPhrases.ts;
  • adds conversations.tools.resumeGoal.{active,done} ("Resuming goal" / "Resumed goal") to all 16 locales.

toolPresentation.catalog.test.ts requires every fixture name to have a non-fallback, translated label, which this provides.

Tests

  • The test itself, in the gate-contract lanes and the product build on the CI host.

… catalog feature list

`full_product_features_enabled` asserts that its flag list equals
scripts/ci/product-features.txt (less the RPC-only os-keyring), so that a
new product gate cannot silently make a partial build look like the
product. storage-file, secret-file and legacy-import were added to that
file without being added here, so the assertion failed in every build
before the catalog was even compared. List them.
@tinysweeper

tinysweeper Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Tiny Sweeper review

Verdict: Incomplete · Priority: none
Coverage: Reviewed 7 of 20 files; not reviewed (large PR): app/src/features…, app/src/features…, and 11 additional unreviewed files.
Pull request purpose (title): test(tools): fix the…

Diagnostics and supporting details

Full summary

Pull request purpose (title): test(tools): fix the catalog drift guard's feature list and present goal_resume. Purpose (title): test(tools): fix the catalog drift guard's feature list and present goal_resume. The PR adds storage-file, secret-file and legacy-import to the feature-gate list in full_product_features_enabled() so the catalog fixture drift guard's equality assertion passes, and, with the comparison then reaching the catalog, registers the new goal_resume tool on the frontend side: a fixture name, a tool spec, phrase pairs, and resumeGoal translations in all 16 locales.

Unreviewed paths

  • app/src/features/conversations/tools/__fixtures__/coreToolNames.json
  • app/src/features/conversations/tools/toolPhrases.ts
  • app/src/features/conversations/tools/toolSpecs.ts
  • app/src/lib/i18n/hi.ts
  • app/src/lib/i18n/id.ts
  • app/src/lib/i18n/it.ts
  • app/src/lib/i18n/ja.ts
  • app/src/lib/i18n/ko.ts
  • app/src/lib/i18n/pl.ts
  • app/src/lib/i18n/pt.ts
  • app/src/lib/i18n/ru.ts
  • app/src/lib/i18n/tr.ts
  • app/src/lib/i18n/zh-CN.ts

Partial review reasons

  • critique: app/src/features/conversations/tools/__fixtures__/coreToolNames.json — not selected by the large-review budget
  • security: app/src/features/conversations/tools/__fixtures__/coreToolNames.json — not selected by the large-review budget
  • critique: app/src/features/conversations/tools/toolPhrases.ts — not selected by the large-review budget
  • security: app/src/features/conversations/tools/toolPhrases.ts — not selected by the large-review budget
  • critique: app/src/features/conversations/tools/toolSpecs.ts — not selected by the large-review budget
  • security: app/src/features/conversations/tools/toolSpecs.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/hi.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/hi.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/id.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/id.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/it.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/it.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/ja.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/ja.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/ko.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/ko.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/pl.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/pl.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/pt.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/pt.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/ru.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/ru.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/tr.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/tr.ts — not selected by the large-review budget
  • critique: app/src/lib/i18n/zh-CN.ts — not selected by the large-review budget
  • security: app/src/lib/i18n/zh-CN.ts — not selected by the large-review budget

Review snapshot

Change surface Files Review signal Count
Production 17 Active findings 0
Tests 3 Noted findings 0
Documentation 0 Resolved findings 0
Configuration 0 Pending checks/questions 39

Completeness: Incomplete
Test assessment: Test coverage is assessed from changed tests and lane evidence; execution is not claimed without trusted check data.

Features

  • Added — goal_resume registered in the frontend tool catalog fixture: The catalog comparison now finds goal_resume in the frontend fixture rather than reporting it as added, so the fixture matches the core-registered tool set. (app/src/features/conversations/tools/__fixtures__/coreToolNames.json)
  • Added — goal_resume tool spec and phrases: goal_resume renders with a flag icon in the plan family and a Resuming goal / Resumed goal label pair, matching the presentation of the sibling goal tools. (app/src/features/conversations/tools/toolSpecs.ts export const EXACT_TOOL_SPECS: Record<string, ToolSpec> = {, app/src/features/conversations/tools/toolPhrases.ts export const TOOL_PHRASES = {)
  • Added — resumeGoal translations across all 16 locales: Each locale map carries conversations.tools.resumeGoal.active and .done, so the new tool's labels are translated rather than falling back. (app/src/lib/i18n/en.ts const en: TranslationMap = {, app/src/lib/i18n/ar.ts const messages: TranslationMap = {, app/src/lib/i18n/bn.ts const messages: TranslationMap = {, app/src/lib/i18n/de.ts const messages: TranslationMap = {, app/src/lib/i18n/es.ts const messages: TranslationMap = {, app/src/lib/i18n/fr.ts const messages: TranslationMap = {, app/src/lib/i18n/hi.ts const messages: TranslationMap = {, app/src/lib/i18n/id.ts const messages: TranslationMap = {, app/src/lib/i18n/it.ts const messages: TranslationMap = {, app/src/lib/i18n/ja.ts const messages: TranslationMap = {, app/src/lib/i18n/ko.ts const messages: TranslationMap = {, app/src/lib/i18n/pl.ts const messages: TranslationMap = {, app/src/lib/i18n/pt.ts const messages: TranslationMap = {, app/src/lib/i18n/ru.ts const messages: TranslationMap = {, app/src/lib/i18n/tr.ts const messages: TranslationMap = {, app/src/lib/i18n/zh-CN.ts const messages: TranslationMap = {)
  • Added — storage-file, secret-file and legacy-import feature gates in catalog drift guard: full_product_features_enabled() lists all three gates, so its set comparison against scripts/ci/product-features.txt holds and partial builds are correctly identified as non-product. (crates/openhuman-core/src/tools/ops_tests_catalog_fixture_tests.rs fn full_product_features_enabled() -> bool {)

Tests

  • drift guard — The catalog fixture test compares the gates enumerated by full_product_features_enabled() against scripts/ci/product-features.txt and, once that passes, compares the registered tool catalog against the frontend fixture.: The lane found the fixture ordering alphabetical and consistent and no behavioural defect. (crates/openhuman-core/src/tools/ops_tests_catalog_fixture_tests.rs fn full_product_features_enabled() -> bool {, app/src/features/conversations/tools/__fixtures__/coreToolNames.json, app/src/features/conversations/tools/toolPhrases.ts export const TOOL_PHRASES = {)

Findings

No active actionable findings.

Before merge

  • Complete the critique review for app/src/lib/i18n/hi.ts, app/src/lib/i18n/id.ts, app/src/lib/i18n/it.ts, app/src/lib/i18n/ja.ts, app/src/lib/i18n/ko.ts, app/src/lib/i18n/pl.ts, app/src/lib/i18n/pt.ts, app/src/lib/i18n/ru.ts, app/src/lib/i18n/tr.ts, app/src/lib/i18n/zh-CN.ts, app/src/features/conversations/tools/__fixtures__/coreToolNames.json, app/src/features/conversations/tools/toolPhrases.ts, app/src/features/conversations/tools/toolSpecs.ts.
  • Complete the security review for app/src/lib/i18n/hi.ts, app/src/lib/i18n/id.ts, app/src/lib/i18n/it.ts, app/src/lib/i18n/ja.ts, app/src/lib/i18n/ko.ts, app/src/lib/i18n/pl.ts, app/src/lib/i18n/pt.ts, app/src/lib/i18n/ru.ts, app/src/lib/i18n/tr.ts, app/src/lib/i18n/zh-CN.ts, app/src/features/conversations/tools/__fixtures__/coreToolNames.json, app/src/features/conversations/tools/toolPhrases.ts, app/src/features/conversations/tools/toolSpecs.ts.
  • Review uncovered paths: app/src/features/conversations/tools/__fixtures__/coreToolNames.json, app/src/features/conversations/tools/toolPhrases.ts, app/src/features/conversations/tools/toolSpecs.ts, app/src/lib/i18n/hi.ts, app/src/lib/i18n/id.ts, app/src/lib/i18n/it.ts, app/src/lib/i18n/ja.ts, app/src/lib/i18n/ko.ts, app/src/lib/i18n/pl.ts, app/src/lib/i18n/pt.ts, app/src/lib/i18n/ru.ts, app/src/lib/i18n/tr.ts, app/src/lib/i18n/zh-CN.ts.
Agent review details

critique

  • Conclusion: Neutral
  • Scope reviewed: incomplete; unanswered files: app/src/lib/i18n/hi.ts, app/src/lib/i18n/id.ts, app/src/lib/i18n/it.ts, app/src/lib/i18n/ja.ts, app/src/lib/i18n/ko.ts, app/src/lib/i18n/pl.ts, app/src/lib/i18n/pt.ts, app/src/lib/i18n/ru.ts, app/src/lib/i18n/tr.ts, app/src/lib/i18n/zh-CN.ts, app/src/features/conversations/tools/__fixtures__/coreToolNames.json, app/src/features/conversations/tools/toolPhrases.ts, app/src/features/conversations/tools/toolSpecs.ts
  • Lane summary: Reviewed 6 of 19 files — 13 not reviewed. Reviewed 6 files; 0 findings. 13 files were omitted: not selected by the large-review budget.

security

  • Conclusion: Neutral
  • Scope reviewed: incomplete; unanswered files: app/src/lib/i18n/hi.ts, app/src/lib/i18n/id.ts, app/src/lib/i18n/it.ts, app/src/lib/i18n/ja.ts, app/src/lib/i18n/ko.ts, app/src/lib/i18n/pl.ts, app/src/lib/i18n/pt.ts, app/src/lib/i18n/ru.ts, app/src/lib/i18n/tr.ts, app/src/lib/i18n/zh-CN.ts, app/src/features/conversations/tools/__fixtures__/coreToolNames.json, app/src/features/conversations/tools/toolPhrases.ts, app/src/features/conversations/tools/toolSpecs.ts
  • Lane summary: Reviewed 6 of 19 files — 13 not reviewed. Reviewed 6 files; 0 findings. 13 files were omitted: not selected by the large-review budget.

tests

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Lane summary: The change adds a `goal_resume` entry to the tool spec, its phrase pair, translations in all 16 locales, a fixture name, and three new feature-gated tools to the catalog fixture test. Existing coverage (`coreToolNames.json` fixture consumed by tool-presentation tests, the i18n coverage test asserting every key exists in every locale) fails if the new phrases or translations regress, and the catalog fixture test derives its expected set from `Cargo.toml`, so it cannot drift silently. The fixture's ordering is alphabetical and consistent. No test-file spec is violated (the Rust test touched is a sibling `_tests.rs` module already declared elsewhere), and I found no behavioural defect in the diff. _The code index is behind this pull request (indexed at `36819ece1578`), so retrieved context may be out of date._

commits

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Positive: The commits lane (answered) reported no sensitive content in committed files.
  • Lane summary: No sensitive content in committed files. _The code index is behind this pull request (indexed at `36819ece1578`), so retrieved context may be out of date._

description

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Lane summary: The diff delivers what the PR body describes for the goal_resume second commit: the fixture name, the spec, the phrases, and the two keys in all 16 locales. One detail in the description is wrong: the ci/product-features.txt list (with storage-file, secret-file, legacy-import) is not part of this revision's diff — only the app-side goal_resume work is here, so those Rust changes presumably landed in an earlier commit of the branch. The description's claims otherwise match the changes, and the keys are present in every locale file. No findings. _The code index is behind this pull request (indexed at `36819ece1578`), so retrieved context may be out of date._
Evidence and run details
  • Models: ladder/vectors-oai3, deepseek-v4.1-flash
  • Spend: $0.000466
  • Tokens: 296126 input · 4485 output · 72704 cached · 494 embedding
  • Updated: 2026-10-23T22:32:30Z
Head State Pass summary
4ecc5ccc48f1 ready for maintainer review 0 active finding(s), 0 resolved finding(s) (at 2026-10-23T22:15:17Z)
ae41353357cf incomplete 0 active finding(s), 0 resolved finding(s) (at 2026-10-23T22:32:30Z)

tinysweeper 0.1.2

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 23, 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-23T22:15:39.796515Z 4ecc5cc PR opened
ℹ️ 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.

@coderabbitai

coderabbitai Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f70b08eb-a790-45ed-afba-f21ebb348264
📥 Commits

Reviewing files that changed from the base of the PR and between 8e73d9b and 4ecc5cc.

📒 Files selected for processing: 1
  • crates/openhuman-core/src/tools/ops_tests_catalog_fixture_tests.rs

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

📝 Walkthrough

The full-product feature check now includes storage-file, secret-file, and legacy-import in its enabled-feature set.

Changes: Product feature check

Layer / File(s) Summary
Include additional product features
crates/openhuman-core/src/tools/ops_tests_catalog_fixture_tests.rs
full_product_features_enabled now checks storage-file, secret-file, and legacy-import against the declared product feature set.

Priority: ➖ Normal

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

Change: Bug fix

Suggested reviewers: senamakel

Merge Risk: ⚪ Minimal · up to 4ecc5

No actionable merge-blocking risk was identified.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Title check Warning The title names the test change and the goal_resume catalog change, but the changeset summary covers only the feature list in the test helper full_product_features_enabled. It adds storage-file, secre… Remove the goal_resume reference from the title, or add the goal_resume changes to the PR and its summary. A title such as "test(tools): add missing product gates to catalog drift guard feature list" would match the changeset.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files.
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.
Full details: Title check

Explanation

The title names the test change and the goal_resume catalog change, but the changeset summary covers only the feature list in the test helper full_product_features_enabled. It adds storage-file, secret-file, and legacy-import. No changes to goal_resume appear in the raw summary, so the title describes something the changeset does not show. The title also describes the change at a level that a reader can follow, and the test-fix part matches the main change.

Resolution

Remove the goal_resume reference from the title, or add the goal_resume changes to the PR and its summary. A title such as "test(tools): add missing product gates to catalog drift guard feature list" would match the changeset.

✨ Finishing Touches: 💡 1
🛠️ Fix failing CI checks: 💡
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

A rabbit checks the feature list,
Three flags hop in, no flag is missed.
Storage-file joins the secret-file,
Legacy-import makes the set worthwhile.
The helper checks them all in style.

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

tinysweeper[bot]
tinysweeper Bot previously approved these changes Oct 23, 2026

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

Diagnostics

Total spend: $0.0040

@tinysweeper tinysweeper Bot added the priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect. label Oct 23, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Oct 23, 2026
tinyagents' goals family gained `goal_resume` (a paused goal is resumed
when the user continues that objective), and the tinyagents pin that
brought it in made the core register it, so the core tool catalog drift
guard reported it as an unknown name and the frontend fell back to a raw
label. Add it to the fixture, give it a spec (flag icon, plan family,
like goal_set/goal_get/goal_complete) and its active/done phrases in all
16 locales.
@M3gA-Mind M3gA-Mind changed the title test(tools): track storage-file, secret-file and legacy-import in the catalog feature list test(tools): fix the catalog drift guard's feature list and present goal_resume Oct 23, 2026
@tinysweeper
tinysweeper Bot dismissed their stale review October 23, 2026 22:32

tinysweeper could not review the latest push, so its earlier approval no longer speaks for this pull request.

@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 could not complete coverage (13 unanswered item(s)), so this is not an approval.

Diagnostics

Total spend: $0.0005

@M3gA-Mind
M3gA-Mind merged commit 76f4780 into tinyhumansai:main Oct 24, 2026
18 of 24 checks passed
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