Skip to content

Ask bounded private questions from selected card evidence - #2885

Merged
Chris0Jeky merged 3 commits into
mainfrom
codex/2808-grounded-observations
Sep 10, 2026
Merged

Ask bounded private questions from selected card evidence#2885
Chris0Jeky merged 3 commits into
mainfrom
codex/2808-grounded-observations

Conversation

@Chris0Jeky

Copy link
Copy Markdown
Owner

Quiet insights can now preview one selected card and explicitly ask the configured model for up to three private questions. Each saved question keeps an exact quote, source fingerprint and provider attribution. Questions expire when evidence changes or after one day; dismissals, muted categories, snoozes and retained statement answers survive repeated analysis. The board is not changed.

The request shares the user's Chat quota and kill switch, rechecks active access and the fingerprint before/after model completion, and rejects unsupported or ungrounded output as a whole batch. The UI preserves identity boundaries, disables overlapping operations, requires a new preview after uncertain completion and never automatically retries the model call. The model service is registered only by API model setup, leaving CLI/MCP host startup independent.

Continues #2808; stacked on #2866. Classic, Studio, Companion and Unified share the same question queue. This is an experimental explicit question producer, not full Context Fabric semantic-candidate processing, recall or automatic attention. The documented usefulness corpus supports future live-provider evaluation; no live-model quality score is claimed.

Validation:

  • Fifteen contract/budget tests passed. The initial full backend command passed 9,205 tests with 34 existing skips and found three MCP host-registration failures. Moving the model-dependent service to API setup fixed that boundary; final API/insight/MCP verification passed 21/21, including the three failures and a new membership-revocation interleaving. The initial full run was not green.
  • Full frontend: 6,382 passed, three existing skips, 413 files. Final typecheck/build and fourteen focused frontend cases pass after conflict-copy/theme corrections; ESLint, documentation links, governance and diff checks pass.
  • Real-browser journey through an explicitly configured synthetic localhost provider passed in 13.6s: exact preview, all four experience switches, actual stale-source409, provider transport, saved questions, reload, private answer, 375px overflow and scoped accessibility. Screenshot inspected. Initial browser failures identified generic409 copy and a fixture configured with a blocked literal IP; the final proof uses the existing permitted localhost configuration. Synthetic services are stopped; no working database, real provider or real credentials were used.

One bounded independent Luna review found no HIGH/CRITICAL defect. Two MEDIUM limits remain tracked under #2808: commit-time evidence fencing between the final read and save, and graceful handling of quota-settlement storage failures. The next insights read invalidates stale evidence; an uncertain response requires refresh. Exact-head hosted CI remains required before merge. Existing OUTSTANDING_TASKS.md publisher, deployment, physical-device, provider/dogfooding and other owner decisions remain open.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 10, 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-09-10T04:23:53.974995Z 19edf40 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.

@Chris0Jeky Chris0Jeky moved this from Pending to Review in Taskdeck Execution Sep 10, 2026
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Independent bounded Luna review: no HIGH/CRITICAL blocker in selected-source access, before/after freshness, output bounds, shared quota or private queue/UI identity boundaries. Two MEDIUM follow-ups retained under #2808: close the final-read/save evidence interval with commit-time fencing, and handle quota settlement storage exceptions without masking completion. The API-only service registration fix is proven by21 API/insight/MCP cases including all three initial full-run failures; final14 frontend cases and the synthetic real-provider-transport browser journey pass. No live-provider usefulness claim.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 19edf4042e

ℹ️ 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".

var rule = WorkspaceObservationContract.RulePrefix + candidate.Kind;
var existing = items.SingleOrDefault(x => x.Rule == rule && x.TargetKey == dto.CardId.ToString());
// Stable category + card identity collapses paraphrases and preserves user decisions.
if (existing is { State: "dismissed" or "muted" or "snoozed" }) continue;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Stop suppressing expired snoozes

When a previously snoozed model question reaches SnoozeUntil while the page remains open, this unconditional branch still suppresses that category. The provider call and quota settlement have already occurred before this check, so the first post-expiry analysis consumes budget but saves nothing; only the subsequent insights refresh transitions the stale row out of snoozed, requiring another paid analysis. Check whether the snooze is still active, or revalidate persisted insights before dispatch.

Useful? React with 👍 / 👎.

const answerStatus = ref<MemoryStatus>('statement')
const answerError = ref<string | null>(null)
const { leaveRequested, decide } = useUnsavedWorkspaceNavigation(() => Boolean(answeringInsightId.value && answerText.value.trim()) || busyInsightIds.value.size > 0)
const { leaveRequested, decide } = useUnsavedWorkspaceNavigation(() => Boolean(answeringInsightId.value && answerText.value.trim()) || busyInsightIds.value.size > 0 || modelBusy.value)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep navigation disabled during model analysis

When navigation is attempted while generateObservations is pending, this new predicate opens the leave dialog, but its “Discard answer and leave” button is disabled only for busyInsightIds, not modelBusy. The user can therefore leave while the uncancelled POST may still save private questions server-side, despite a dialog that only describes discarding an answer; include modelBusy in the dialog's disabled and busy-specific presentation, as the analogous sending flows do.

AGENTS.md reference: frontend/AGENTS.md:L5-L5

Useful? React with 👍 / 👎.

Base automatically changed from codex/2808-overhaul-integration to main September 10, 2026 07:26
@Chris0Jeky
Chris0Jeky merged commit 652ee5d into main Sep 10, 2026
36 of 37 checks passed
@Chris0Jeky
Chris0Jeky deleted the codex/2808-grounded-observations branch September 10, 2026 08:10
@github-project-automation github-project-automation Bot moved this from Review to Done in Taskdeck Execution Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant