Repository navigation
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d7b944311d
ℹ️ 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".
|
@codex review Please review the current head The normal follow-up commits address the validated cursor boundary, legacy revision attribution, stricter replay visibility and mixed-revision join findings. Ordinary status now gates direct and source-bound historical prose, including advisory choices whose source linkage cannot be recovered. Independent source review passed 121 focused cases; all four Python 3.11/3.12 push and pull-request CI checks pass at this head. This remains a source-only contribution, without merge or runtime activation. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3f839956f2
ℹ️ 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".
|
@codex review Please review the current head Verification at this head: complete source suite 2,621 passed with 3 optional integration skips; independent policy review 129/129 passed; Python 3.11/3.12 push and PR CI all pass. This is a source-only contribution; merge and runtime adoption are separate. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 30413b6910
ℹ️ 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: 1e56655ba7
ℹ️ 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".
| ("threads", threads, selected_threads), | ||
| ("candidates", candidates, [require("candidates", ref, policy=True) | ||
| for ref in selected_candidates]), | ||
| ("events", events, [require("events", ref, policy=True) for ref in event_ids]), | ||
| ("signals", signals, [require("signals", ref, policy=True) for ref in signal_ids]), |
There was a problem hiding this comment.
Narrow prepared outbox records on replay
When producer material has already created a prepared external outbox request, a stricter replay (for example, changing public_safe/Discord to local_only) narrows the signal, event, candidate, and thread here but leaves the prepared outbox row with its original broader surfaces. With direct dispatch enabled, dispatch_outbox_request trusts that retained row and can still send its message to Discord after the source and thread have been restricted; include pending outbox descendants in this closure or revalidate their current source owner before dispatch.
AGENTS.md reference: AGENTS.md:L7-L8
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Addressed in bd98a400798f2b90a0e568d77b33ddb2f9348c50. Preparation and dispatch revalidate the current unique thread/candidate owner. The outbox-before-candidate transaction remains held through the adapter effect and receipt, so a stricter replay cannot interleave with that decision. Present null or other malformed origins cannot acquire historical standalone authority; absent/empty-string compatibility remains. Source-backed fake-transport tests cover stricter replay, denial without mutation and legitimate delivery. Keeping this thread open until exact-head hosted checks finish.
| valid, resolved = self._linked(child, trail, owner=owner, | ||
| source_refs=field == "source_refs" and isinstance(value, dict)) |
There was a problem hiding this comment.
Bound nested disclosure traversal
When an otherwise valid retained candidate or thread contains deeply nested JSON metadata, this recursive walk can exceed Python's recursion limit and raise RecursionError instead of denying that record. A roughly 995-level nested dictionary is still accepted by read_jsonl but makes status and other DisclosureVisibility-backed readers crash, so traverse iteratively or enforce a bounded depth/node budget and fail the subject closed when it is exceeded.
AGENTS.md reference: AGENTS.md:L7-L8
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Addressed in bd98a400798f2b90a0e568d77b33ddb2f9348c50. Disclosure traversal is iterative with depth/node bounds and denies an over-limit retained subject instead of raising recursion errors. Regressions cover actual JSONL loading of decoder-admitted deep metadata, normal disclosure readers, valid neighbors and malformed/deep inputs. Keeping this thread open until exact-head hosted checks finish.
| if not linked and record.get("type") == "subconscious.advisory": | ||
| if (record.get("output_action") in ("DROP", "SAVE", "CREATE_CONSCIOUS_TASK") | ||
| or record.get("action") in ("drop", "save", "would_create_conscious_task", | ||
| "created_conscious_task_candidate", "updated_conscious_task_candidate")): | ||
| return False, False |
There was a problem hiding this comment.
Withhold unbound advisory candidates
When a retained advisory candidate has kind="subconscious_advisory" but its source IDs and admission binding are missing, linked remains false and this guard does not run because it checks only the receipt type. The candidate's source-derived summary is consequently exposed by status, candidate-open, volunteer-card, and pointer readers on any surface allowed by its own stale metadata; treat the advisory candidate kind like advisory receipts and deny it unless at least one canonical source link resolves.
AGENTS.md reference: AGENTS.md:L8-L9
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Addressed in bd98a400798f2b90a0e568d77b33ddb2f9348c50. Both advisory receipt types and the subconscious_advisory candidate kind require canonical source binding before source-derived prose is disclosed. Real advisory construction regressions cover unbound denial, hidden sources and valid visible bindings across status, candidate-open, cards and pointers. Keeping this thread open until exact-head hosted checks finish.
|
@codex review Current source head: |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bd98a40079
ℹ️ 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".
| if field not in record or (identifier is None and not source_refs): | ||
| continue |
There was a problem hiding this comment.
Reject null owners on canonical subjects
When a retained canonical thread has a present origin_candidate_id: null, this branch treats it as if the owner declaration were absent. The thread can then pass subject() using only its own visibility and expose source-derived title/summary through status, open, pointers, and volunteer cards even after the originating candidate is hidden; the new delivery guard rejects the same malformed row, so disclosure and delivery now disagree. Reserve the null compatibility exception for standalone operational receipts rather than canonical candidate/thread subjects.
AGENTS.md reference: AGENTS.md:L7-L8
Useful? React with 👍 / 👎.
| signals = store.read_jsonl("signals") | ||
| try: | ||
| replays = _canonical_replays(signals, normalized, |
There was a problem hiding this comment.
Serialize canonical replay checks with signal appends
When two workers concurrently ingest the same producer material under different wrapper IDs, both can read the pre-append signal snapshot here and pass _canonical_replays; both signals are then persisted, while the candidate transaction deduplicates the second event against the first. This leaves one signal orphaned, reports both calls as fresh promotions, emits duplicate observer effects, and makes every later replay fail with ambiguous_ingress_material because two equivalent retained wrappers now exist. Hold one source transaction from this replay check through the signal/event/candidate commit so equality cannot change between validation and append.
AGENTS.md reference: AGENTS.md:L7-L8
Useful? React with 👍 / 👎.
| surface = request.get("surface") | ||
| policy = {"max_sensitivity": request.get("sensitivity"), | ||
| "allowed_surfaces": request.get("allowed_surfaces")} | ||
| if not visible_on_surface(request, surface, policy): |
There was a problem hiding this comment.
Intersect delivery ownership with the current instance policy
When a Discord request was prepared while the profile allowed Discord and the operator later narrows instance.config.json to allowed_surfaces: [] (or lowers max_sensitivity), dispatch still invokes the adapter because this policy is reconstructed solely from the stale prepared row. All ordinary disclosure readers honor the current profile policy, but _current_delivery_owner never loads or intersects it, so an explicit deny-all configuration does not stop an already prepared outbound effect. Revalidate the request and current subjects against the current instance visibility policy before calling the adapter.
AGENTS.md reference: AGENTS.md:L7-L8
Useful? React with 👍 / 👎.
Problem
Sensorium needs to distinguish producer material from transport wrappers. Wrapper IDs and thematic similarity cannot establish that observations describe the same material. Replay, retained ownership and disclosure must agree, including when a prepared delivery survives a stricter source policy.
Changes
How it works
flowchart LR R[Raw observation] --> V[Validate producer identity and retained joins] V --> M{Same material revision?} M -->|Yes| P[Replay without new material effects] M -->|No| A[Fresh admission or eligible-owner coalescing] P --> C[Canonical source and policy] A --> C C --> D[Source-bound readers] C --> E[Current delivery-owner check] E --> F[Dispatch under stable owner transaction]This explains the source contract, not a deployed host integration.
Verification
Candidate:
bd98a400798f2b90a0e568d77b33ddb2f9348c50.Limitations
Source-only contribution. Optional companion-host/adapter and Wiki integrations remain unverified. Native sessions, finite workrooms, accounting migration and choice transport are documented proposals, not implemented host guarantees. Optional latent metadata bounds emitted output, not input scanning. No merge, installation or runtime activation is included.