feat(memory): ingest Codex and Claude coding sessions - #4863
Conversation
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds coding-session memory ingestion for Claude Code and Codex, including TinyCortex scanning, RPC APIs, Sources UI, localization, privacy metadata, tests, recursive CI submodule initialization, and compatibility updates. ChangesCoding-session memory
Estimated code review effort: 4 (Complex) | ~60 minutes Possibly related issues
Possibly related PRs
Suggested labels: Suggested reviewers: Sequence Diagram(s)sequenceDiagram
participant User
participant CodingSessionsCard
participant MemorySourcesService
participant MemorySourcesRPC
participant TinyCortexPersona
User->>CodingSessionsCard: open Sources tab
CodingSessionsCard->>MemorySourcesService: request session status
MemorySourcesService->>MemorySourcesRPC: call coding_session_status
MemorySourcesRPC->>TinyCortexPersona: scan local session roots
TinyCortexPersona-->>CodingSessionsCard: return source counts
User->>CodingSessionsCard: click Ingest
CodingSessionsCard->>MemorySourcesService: request ingestion
MemorySourcesService->>MemorySourcesRPC: call ingest_coding_sessions
MemorySourcesRPC->>TinyCortexPersona: run persona pipeline
TinyCortexPersona-->>CodingSessionsCard: return ingestion metrics
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: eff1f788a0
ℹ️ 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".
|
Caution Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted. Error details |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6f0fa4fe08
ℹ️ 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".
|
Re @chatgpt-codex-connector's P2 follow-up on The suggested fix (pass the cap into discovery / stop traversal once the limit is reached) has to change Two things bound the blast radius today:
Right fix: add a bounded |
|
To use Codex here, create a Codex account and connect to github. |
…refix
The tinycortex bump in this PR changes MemoryCategory's wire/Display format so
Custom(name) renders as `custom:{name}` (keeping Custom("core") distinct from
Core). The store persists a category via its Display form, but the read helper
`memory_category_from_stored` wrapped the raw stored string in Custom(_) without
stripping the prefix, so a round-trip produced Custom("custom:project") instead
of Custom("project") — breaking memory::tools::store::store_with_custom_category.
Parse back through FromStr (the true inverse of Display) so the prefix is stripped
symmetrically. Also update the stale memory_category_display_outputs_expected_values
test to the new custom: Display form.
|
Maintainer fix pass — pushed CI: Rust Core Coverage (was RED) → fixed. Two core tests failed:
Root cause: the Fix (source-only, submodule pin untouched):
Codex P2 (persona.rs:71, "cap discovery before collecting all session paths") — declining here, belongs in tinycortex. The concern is valid ( |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 92c309cd08
ℹ️ 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".
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (5)
src/openhuman/memory_search/tools/hybrid_search.rs (1)
113-118: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd diagnostics and regression coverage for invalid modes.
This new error branch should emit a grep-friendly diagnostic containing the rejected mode before returning, and have a test asserting that unknown modes fail without reaching the external search path.
As per coding guidelines, changed Rust flows must include verbose diagnostics and maintain coverage on changed lines.
🤖 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/memory_search/tools/hybrid_search.rs` around lines 113 - 118, Update the invalid-mode branch in the hybrid search flow around WeightProfile::by_name to emit a grep-friendly diagnostic containing the rejected mode before returning the error. Add regression coverage that submits an unknown mode, verifies the failure includes that mode, and confirms the external search path is not invoked.Source: Coding guidelines
src/openhuman/tinycortex/ingest.rs (2)
9-15: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueUnused
Configparam forces a pointless clone at the call site.
newtakes_config: Configby value but never uses it, yetcontext()(unchanged, line 58) still doesHostTreeJobSink::new(config.clone())— cloningConfigpurely to discard it. Since the sink no longer holds config state, consider dropping the parameter (and updating the one call site) or accepting&Configif it must stay for API symmetry with other constructors.♻️ Suggested cleanup
impl HostTreeJobSink { - pub fn new(_config: Config) -> Self { + pub fn new() -> Self { Self } }And update the call site:
HostTreeJobSink::new()instead ofHostTreeJobSink::new(config.clone()).🤖 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/tinycortex/ingest.rs` around lines 9 - 15, Remove the unused Config parameter from HostTreeJobSink::new and update context() to call HostTreeJobSink::new() without cloning config. Keep HostTreeJobSink stateless and preserve its existing construction behavior.
17-30: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winNo outcome/error diagnostics for the enqueue branch.
The trace log fires before the DB-transaction call but the returned
bool(enqueued vs. already-queued) and any error path fromQueueJobSink.enqueue_extract_txaren't logged. As per coding guidelines,"New or changed flows must include verbose, grep-friendly diagnostics for entry/exit, branches, external calls, retries/timeouts, state transitions, and errors"— this changed flow only covers entry.♻️ Suggested addition
- QueueJobSink.enqueue_extract_tx(tx, chunk_id, default_max_attempts) + let outcome = QueueJobSink.enqueue_extract_tx(tx, chunk_id, default_max_attempts); + if let Ok(enqueued) = &outcome { + tracing::trace!(chunk_id, enqueued, "[memory:ingest] enqueue extract job outcome"); + } + outcome🤖 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/tinycortex/ingest.rs` around lines 17 - 30, The enqueue_extract_tx flow in HostTreeJobSink logs only entry, not the QueueJobSink outcome or errors. Update HostTreeJobSink::enqueue_extract_tx to capture the delegated result, log whether the job was enqueued or already queued on success, and emit an error diagnostic when QueueJobSink.enqueue_extract_tx fails before returning the original result.Source: Coding guidelines
app/src/components/intelligence/__tests__/CodingSessionsCard.test.tsx (1)
18-82: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winMissing tests for the error/failure paths in
CodingSessionsCard.All three tests cover only success paths (status load succeeds, ingest succeeds, ingest disabled). Neither
getCodingSessionStatusnoringestCodingSessionsrejection paths are exercised, leaving thecatchblocks inCodingSessionsCard.tsx(status-fetch failure setting therole="alert"error text; ingest failure firing the error toast) untested.✅ Suggested test additions
+ it('shows an error when status fetch fails', async () => { + mockedStatus.mockRejectedValue(new Error('boom')); + renderWithProviders(<CodingSessionsCard />); + expect(await screen.findByRole('alert')).toHaveTextContent('boom'); + }); + + it('reports a toast when ingest fails', async () => { + mockedIngest.mockRejectedValue(new Error('ingest failed')); + const onToast = vi.fn(); + renderWithProviders(<CodingSessionsCard onToast={onToast} />); + fireEvent.click(await screen.findByTestId('coding-sessions-ingest')); + await waitFor(() => + expect(onToast).toHaveBeenCalledWith(expect.objectContaining({ type: 'error' })) + ); + });Based on path instructions, "Untested code is incomplete; changes should maintain at least 80% coverage on changed lines."
🤖 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 `@app/src/components/intelligence/__tests__/CodingSessionsCard.test.tsx` around lines 18 - 82, Add tests in the CodingSessionsCard suite for getCodingSessionStatus rejection, asserting the status-fetch catch path renders the expected role="alert" error text, and for ingestCodingSessions rejection, asserting the error toast is fired through onToast. Keep the existing success and disabled-path tests unchanged.Source: Path instructions
app/src/components/intelligence/CodingSessionsCard.tsx (1)
108-126: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win
scan_truncatedfrom the status payload is never surfaced to the user.
CodingSessionSourceStatusexposes an optionalscan_truncatedflag (permemorySourcesService.ts), presumably set when the 1,000-session processing cap mentioned in the PR objectives is hit. This card renders onlysession_files/evidence_unitsper source and never checks or displaysscan_truncated, so a user whose scan was capped has no indication that some local sessions weren't counted/ingested.♻️ Suggested addition
<div className="mt-1 text-xs text-content-secondary"> {source.available ? t('memorySources.codingSessions.counts') .replace('{files}', String(source.session_files)) .replace('{evidence}', String(source.evidence_units)) : t('memorySources.codingSessions.notFound')} </div> + {source.available && source.scan_truncated && ( + <div className="mt-1 text-xs text-amber-600 dark:text-amber-400"> + {t('memorySources.codingSessions.truncated')} + </div> + )}🤖 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 `@app/src/components/intelligence/CodingSessionsCard.tsx` around lines 108 - 126, Update the source rendering in CodingSessionsCard to check each CodingSessionSourceStatus entry’s optional scan_truncated flag and visibly indicate when scanning was capped, while preserving the existing file/evidence counts and not-found states. Use the existing translation mechanism and memory-source localization keys for the truncation message.
🤖 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 `@app/src/lib/i18n/ko.ts`:
- Line 7157: Update the memorySources.codingSessions.claude translation value to
the official product name “Claude Code,” matching the existing branding used
elsewhere in the locale and preserving consistent UI labels.
In `@app/src/lib/i18n/ru.ts`:
- Line 7319: Update the Russian `memorySources.codingSessions.counts` and the
adjacent count strings to use the project’s pluralization mechanism for each
interpolated count, or neutral wording that avoids inflected nouns; ensure
values such as 1, 2, and 21 render grammatically correct Russian labels.
In `@app/src/lib/i18n/zh-CN.ts`:
- Around line 6849-6850: Update the translation for
memorySources.codingSessions.counts in the Chinese locale so the evidence
placeholder is labeled neutrally as evidence units, such as “条证据” or “条证据单元”,
instead of “用户输入”; preserve the existing {files} and {evidence} placeholders.
In `@src/openhuman/memory_sources/rpc.rs`:
- Around line 34-60: Add a local wall-clock timeout around the `spawn_blocking`
join in `ingest_coding_sessions_rpc`, using the project’s established timeout
configuration or a dedicated bounded duration. Preserve the existing join and
ingestion error mapping, and return a clear timeout error when the budget
expires.
In `@src/openhuman/tinycortex/persona.rs`:
- Around line 148-220: Update ingest_coding_sessions to add grep-friendly error
diagnostics around build_chat_provider, FileStateStore::open_in_workspace, and
Pipeline::run before propagating their failures; preserve the existing ?-based
error propagation and include the relevant operation context in each log.
---
Nitpick comments:
In `@app/src/components/intelligence/__tests__/CodingSessionsCard.test.tsx`:
- Around line 18-82: Add tests in the CodingSessionsCard suite for
getCodingSessionStatus rejection, asserting the status-fetch catch path renders
the expected role="alert" error text, and for ingestCodingSessions rejection,
asserting the error toast is fired through onToast. Keep the existing success
and disabled-path tests unchanged.
In `@app/src/components/intelligence/CodingSessionsCard.tsx`:
- Around line 108-126: Update the source rendering in CodingSessionsCard to
check each CodingSessionSourceStatus entry’s optional scan_truncated flag and
visibly indicate when scanning was capped, while preserving the existing
file/evidence counts and not-found states. Use the existing translation
mechanism and memory-source localization keys for the truncation message.
In `@src/openhuman/memory_search/tools/hybrid_search.rs`:
- Around line 113-118: Update the invalid-mode branch in the hybrid search flow
around WeightProfile::by_name to emit a grep-friendly diagnostic containing the
rejected mode before returning the error. Add regression coverage that submits
an unknown mode, verifies the failure includes that mode, and confirms the
external search path is not invoked.
In `@src/openhuman/tinycortex/ingest.rs`:
- Around line 9-15: Remove the unused Config parameter from HostTreeJobSink::new
and update context() to call HostTreeJobSink::new() without cloning config. Keep
HostTreeJobSink stateless and preserve its existing construction behavior.
- Around line 17-30: The enqueue_extract_tx flow in HostTreeJobSink logs only
entry, not the QueueJobSink outcome or errors. Update
HostTreeJobSink::enqueue_extract_tx to capture the delegated result, log whether
the job was enqueued or already queued on success, and emit an error diagnostic
when QueueJobSink.enqueue_extract_tx fails before returning the original result.
🪄 Autofix (Beta)
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
Run ID: 92660183-047c-4057-afe7-cd6cf91d67b3
⛔ Files ignored due to path filters (2)
Cargo.lockis excluded by!**/*.lockapp/src-tauri/Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (50)
.github/workflows/ci-lite.yml.github/workflows/release-production.yml.github/workflows/release-staging.yml.github/workflows/test-reusable.ymlCargo.tomlapp/src/components/intelligence/CodingSessionsCard.tsxapp/src/components/intelligence/__tests__/CodingSessionsCard.test.tsxapp/src/lib/i18n/ar.tsapp/src/lib/i18n/bn.tsapp/src/lib/i18n/de.tsapp/src/lib/i18n/en.tsapp/src/lib/i18n/es.tsapp/src/lib/i18n/fr.tsapp/src/lib/i18n/hi.tsapp/src/lib/i18n/id.tsapp/src/lib/i18n/it.tsapp/src/lib/i18n/ko.tsapp/src/lib/i18n/pl.tsapp/src/lib/i18n/pt.tsapp/src/lib/i18n/ru.tsapp/src/lib/i18n/zh-CN.tsapp/src/pages/Brain.tsxapp/src/services/memorySourcesService.test.tsapp/src/services/memorySourcesService.tsapp/test/e2e/specs/coding-session-memory.spec.tsapp/test/playwright/specs/coding-session-memory.spec.tsdocs/TEST-COVERAGE-MATRIX.mdsrc/openhuman/about_app/catalog_data.rssrc/openhuman/about_app/catalog_tests.rssrc/openhuman/agent/harness/archivist/recap.rssrc/openhuman/memory/traits.rssrc/openhuman/memory/tree_source/file.rssrc/openhuman/memory_search/tools/hybrid_search.rssrc/openhuman/memory_search/tools/vector_search.rssrc/openhuman/memory_sources/rpc.rssrc/openhuman/memory_sources/schemas.rssrc/openhuman/memory_store/memory_trait.rssrc/openhuman/memory_store/retrieval/mod.rssrc/openhuman/memory_store/tools/raw_chunks.rssrc/openhuman/memory_store/traits.rssrc/openhuman/memory_store/trees/store_tests.rssrc/openhuman/memory_tree/tree/registry.rssrc/openhuman/memory_tree/tree/rpc.rssrc/openhuman/tinycortex/ingest.rssrc/openhuman/tinycortex/mod.rssrc/openhuman/tinycortex/parity.rssrc/openhuman/tinycortex/persona.rstests/coding_sessions_feature.rstests/json_rpc_e2e.rsvendor/tinycortex
Review (tinyhumansai#4863): this PR made Display/memory_recall emit the `custom:<name>` wire form, but memory_store still wrapped any non-builtin string as Custom(other), so echoing back `custom:project_notes` stored Custom("custom:project_notes") — which Displays as custom:custom:project_notes and no longer matches the original category on recall/filter. Route the custom arm through FromStr (which strips the prefix and still accepts legacy bare names), with a raw-string fallback. Adds a store-level round-trip regression.
Maintainer fix passSynced onto fresh Fixed — Codex P2 "Parse prefixed custom categories before storing" (
|
- memory_sources/rpc.rs: wrap ingest_coding_sessions in a budget-proportional
tokio::time::timeout (120s + 30s/session, capped) so a stalled provider call
can't keep the RPC waiting indefinitely, without killing a legit large
backfill (CodeRabbit Major).
- tinycortex/persona.rs: add error-path tracing::error! diagnostics on the three
fallible external calls (build_chat_provider, FileStateStore::open_in_workspace,
Pipeline::run) via inspect_err (CodeRabbit Major — repo diagnostics convention).
- i18n ko/zh-CN/ru: restore 'Claude Code' product branding for the .claude label,
and align the {evidence} count label to the canonical en semantics ('human
turns') instead of 'user input'/'user messages' (CodeRabbit Minor).
The enqueue branch only traced entry; add the returned enqueued/already-queued bool and an error-path diagnostic so the ingest flow is observable end-to-end (CodeRabbit nitpick, repo diagnostics convention).
|
Maintainer fix pass — addressed the 15:56 CodeRabbit review + the Codex P2: Fixed (Major):
Fixed (Minor / nitpick):
Declined-with-reason:
Already addressed in HEAD (Codex P2, Letting PR CI verify (no local matrix run). |
|
@coderabbitai review All 5 items from the last review are addressed (ingestion timeout, persona error diagnostics, enqueue outcome/error logging, i18n branding + the |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 29b1de84cb
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 85514fb4d4
ℹ️ 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".
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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/harness/session/turn/session_io.rs`:
- Around line 170-180: Add correlated telemetry around the checkpoint selection
in the session turn flow: retain the existing tool-call warning, and add
branch/outcome logs for the successful text and streamed-text fallback paths
plus a final checkpoint outcome log. Include model and iteration_for_stream
correlation fields and only safe counts or text-length metrics, using stable
prefixes and avoiding content or sensitive data.
- Around line 163-180: Update the wrap-up checkpoint selection around
parse_tool_calls and the streamed_text fallback so streamed_text is also parsed
for tool calls before being returned. Treat parsed tool calls found in either
response text or streamed_text as attempted_tool_call, preserving the
deterministic empty-string fallback and existing checkpoint behavior for valid
plain text.
🪄 Autofix (Beta)
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
Run ID: 82456f98-a7ee-4d42-a5c4-7a15bcbb5802
📒 Files selected for processing (2)
src/openhuman/agent/harness/session/turn/session_io.rssrc/openhuman/memory_queue/worker.rs
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0ee940e8bb
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0131ec2314
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6b82ce6f9f
ℹ️ 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".
…sion-ingestion # Conflicts: # app/src/lib/i18n/ar.ts # app/src/lib/i18n/bn.ts # app/src/lib/i18n/de.ts # app/src/lib/i18n/es.ts # app/src/lib/i18n/fr.ts # app/src/lib/i18n/hi.ts # app/src/lib/i18n/id.ts # app/src/lib/i18n/it.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/zh-CN.ts # src/openhuman/flows/ops_tests.rs # tests/raw_coverage/agent_session_round24_raw_coverage_e2e.rs
…sion-ingestion # Conflicts: # src/openhuman/agent/harness/session/turn/session_io.rs # src/openhuman/agent/harness/session/turn_tests.rs # tests/raw_coverage/agent_session_round24_raw_coverage_e2e.rs
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3afa56a033
ℹ️ 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".
Summary
vendor/tinycortexsubmodule from671e78ato9a0603aand adapt OpenHuman to its transactional queue, query, summary-context, and TinyAgents v2 API changes.Problem
Solution
QueueJobSinkimplementation.Submission Checklist
diff-covergate is delegated to CI.8.2.5documents the new coding-session persona ingestion surface and all test layers.## Related.Impact
Related
8.2.5AI Authored PR Metadata (required for Codex/Linear PRs)
Linear Issue
Commit & Branch
feat/tinycortex-session-ingestion92c309cd0Validation Run
pnpm --filter openhuman-app format:checkpnpm typecheckpnpm debug unit src/components/intelligence/__tests__/CodingSessionsCard.test.tsx src/services/memorySourcesService.test.ts(16 passed); fixture-based Rust code fully typechecked; runtime Rust/E2E suites delegated to Actions.cargo fmt --all -- --check;cargo check --lib; pre-pushcargo check --manifest-path app/src-tauri/Cargo.toml.Validation Blocked
pnpm i18n:english:check: reports the repository’s existing untranslated-string backlog; the new keys pass locale parity and add real translations in all locales.tsc -p app/test/tsconfig.e2e.json: local install lacks@wdio/globals/types; WDIO/Playwright compilation and execution are delegated to Actions.Behavior Changes
Parity Contract
Duplicate / Superseded PR Handling
Summary by CodeRabbit
custom:values consistent.