Skip to content

feat(chat): realtime session-activity signals (Phase 3) - #6

Merged
maksymhryzodub-prog merged 1 commit into
mainfrom
feat/chat-history
Jul 16, 2026
Merged

maksymhryzodub-prog merged 1 commit into
mainfrom
feat/chat-history

Conversation

@maksymhryzodub-prog

Copy link
Copy Markdown
Contributor

Companion to the ranch chat-history feature. Reports every persisted user/assistant
turn to the Bridle hub so the ranch chat index updates live, without waiting for the
S3 reconcile interval. The runtime stays host-agnostic (no DB dependency).

Changes

  • IActivityReporter port in agent/session; SessionService.append emits a
    SessionActivity (user/assistant only, non-internal, non-transient) via a reporter
    wired at the composition root.
  • BridleRepository.reportActivity emits session_activity over the always-on
    agent↔hub socket (no-op when disconnected — reconcile is the safety net); routed via
    ChannelGateway / ChannelModule.
  • Tag synthetic loop-control events (continuation prompts + pre-cutoff partial assistant
    chunks) with data.transient=true so they're excluded from both the activity signal
    and the transcript reader (fix 8).
  • Version → 0.27.0.

Behavior / risk

Purely additive. No-op when bridle isn't connected; the append path is fire-and-forget
(wrapped in try/catch). No change to persistence or existing channels.

Verification

  • tsc clean; new session activity-emit spec (emits for user/assistant; skips
    tool/internal/transient); full runtime suite (73) green.
  • Live e2e: runtime connected to a local hub → session_activity reaches the ranch
    handler → chat index updates without Sync.

Report every persisted user/assistant turn to the hub so the ranch chat
index updates live, without waiting for the S3 reconcile interval.

- IActivityReporter port in agent/session; SessionService.append emits a
  SessionActivity (user/assistant only, non-internal, non-transient) via a
  reporter wired at the composition root to the bridle socket transport.
- BridleRepository.reportActivity emits `session_activity` over the always-on
  agent-hub socket (no-op when disconnected); routed through
  ChannelGateway / ChannelModule.
- Tag synthetic loop-control events (continuation prompts + pre-cutoff partial
  assistant chunks) with data.transient=true (fix 8) so they're excluded from
  both the activity signal and the transcript reader.
- v0.27.0 + session activity-emit spec.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@maksymhryzodub-prog
maksymhryzodub-prog merged commit a021951 into main Jul 16, 2026
@maksymhryzodub-prog
maksymhryzodub-prog deleted the feat/chat-history branch August 10, 2026 11:58
maksymhryzodub-prog added a commit that referenced this pull request Oct 26, 2026
…1.0 (CLEAN-158)

Phase 9 of the ECC harness principles (specs/001-ecc-agent-principles,
T085-T090), plus the third security-review fix set (US5/US6).

- CI: a separate `eval` job on main runs `bun run eval`; model-backed sets
  report "pending" without an LLM_API_KEY secret, a missed threshold fails
  the job, and the image build does not depend on it.
- Docs: guard/instinct/session/skill/task rows in the agent slice README,
  loop row in the runtime README; IMPROVEMENT_PLAN marks #4, #6, #10, #15
  as superseded by the CLEAN-150 phases; quickstart-results.md records what
  each scenario is covered by and which steps remain manual.
- Version 0.31.0.
- Security review: workers are bounded by effect, not by a name list —
  without tools.delegate.allowWrite they get read tools (plus per-call
  tools such as file/http whose write calls the loop refuses), so a new or
  MCP write tool is excluded by default; the verifier prompt fences tool
  output and the draft as data and a rewrite that balloons or adds a link
  the draft never had is dropped in favour of the draft marked unverified.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
maksymhryzodub-prog added a commit that referenced this pull request Oct 26, 2026
…1.0 (CLEAN-158)

Phase 9 of the ECC harness principles (specs/001-ecc-agent-principles,
T085-T090), plus the third security-review fix set (US5/US6).

- CI: a separate `eval` job on main runs `bun run eval`; model-backed sets
  report "pending" without an LLM_API_KEY secret, a missed threshold fails
  the job, and the image build does not depend on it.
- Docs: guard/instinct/session/skill/task rows in the agent slice README,
  loop row in the runtime README; IMPROVEMENT_PLAN marks #4, #6, #10, #15
  as superseded by the CLEAN-150 phases; quickstart-results.md records what
  each scenario is covered by and which steps remain manual.
- Version 0.31.0.
- Security review: workers are bounded by effect, not by a name list —
  without tools.delegate.allowWrite they get read tools (plus per-call
  tools such as file/http whose write calls the loop refuses), so a new or
  MCP write tool is excluded by default; the verifier prompt fences tool
  output and the draft as data and a rewrite that balloons or adds a link
  the draft never had is dropped in favour of the draft marked unverified.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
maksymhryzodub-prog added a commit that referenced this pull request Oct 26, 2026
…1.0 (CLEAN-158) (#31)

* chore(harness): polish — eval job in CI, docs, plan supersession, 0.31.0 (CLEAN-158)

Phase 9 of the ECC harness principles (specs/001-ecc-agent-principles,
T085-T090), plus the third security-review fix set (US5/US6).

- CI: a separate `eval` job on main runs `bun run eval`; model-backed sets
  report "pending" without an LLM_API_KEY secret, a missed threshold fails
  the job, and the image build does not depend on it.
- Docs: guard/instinct/session/skill/task rows in the agent slice README,
  loop row in the runtime README; IMPROVEMENT_PLAN marks #4, #6, #10, #15
  as superseded by the CLEAN-150 phases; quickstart-results.md records what
  each scenario is covered by and which steps remain manual.
- Version 0.31.0.
- Security review: workers are bounded by effect, not by a name list —
  without tools.delegate.allowWrite they get read tools (plus per-call
  tools such as file/http whose write calls the loop refuses), so a new or
  MCP write tool is excluded by default; the verifier prompt fences tool
  output and the draft as data and a rewrite that balloons or adds a link
  the draft never had is dropped in favour of the draft marked unverified.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix(security): refuse executable frontmatter in rule, instinct and skill files (CLEAN-158)

gray-matter evaluates `---js` / `---javascript` frontmatter as code. Rule
files are operator-authored, instinct files runtime-written and SKILL.md
files model-written via skill_write — all live in the agent directory, so
none may carry executable frontmatter. A shared safeMatter() refuses any
language tag on the opening fence and disables every non-YAML engine; the
three gateways use it, and a spec proves `---js` is rejected without
running.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(spec): manual acceptance checklist for the harness principles (CLEAN-158)

Seven sections mirroring the user stories, run against a live agent over a
channel. Marks which scenarios also have automated counterparts and which
exist only here (protected-rule override, tool_describe, instinct conflicts,
hard-limit compaction, quiet tool failures, verifier injection, worker
concurrency and history isolation, audit trail, frontmatter refusal).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(spec): link the manual acceptance checklist from quickstart results (CLEAN-158)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant