Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
156 commits
Select commit Hold shift + click to select a range
951c921
refactor(telemetry): consolidate BICAMERAL_TELEMETRY into csv flag li…
silongtan May 7, 2026
6df57d9
docs(telemetry): point stale env-var refs at canonical BICAMERAL_TELE…
silongtan May 7, 2026
012ff29
Merge origin/dev into 192-telemetry-csv-flag
silongtan May 8, 2026
6605f24
ci(m2): flip M2 grounding-recall gate warn → hard after stable baseli…
silongtan May 9, 2026
4c0529d
fix(eval): bounded retry + per-case eval_error so transient API timeo…
silongtan May 9, 2026
9575df5
Merge pull request #288 from BicameralAI/280-m2-gate-flip-hard
silongtan May 9, 2026
42b05d1
feat(eval): M2 failure-mode enumeration for cross-functional design d…
silongtan May 9, 2026
28b7530
Merge pull request #293 from BicameralAI/280-failure-mode-enumeration
silongtan May 9, 2026
526035e
Merge remote-tracking branch 'origin/dev' into 192-telemetry-csv-flag
silongtan May 9, 2026
ece365b
Merge pull request #250 from BicameralAI/192-telemetry-csv-flag
silongtan May 10, 2026
3c9730f
feat(preflight): loud graph-expansion fallback signal (#243 Piece A)
silongtan May 10, 2026
d136637
feat(adapter): singleton + eager startup init for code-locator (#243 …
silongtan May 10, 2026
119cd89
Merge pull request #294 from BicameralAI/243-preflight-eliminate-fall…
jinhongkuan May 10, 2026
6d76c4f
docs(README): demo video section + relocate star CTA mid-doc
May 10, 2026
78bf4d0
docs(README): rewrite opener as two-paragraph spec compliance layer p…
May 10, 2026
4299752
Merge pull request #299 from BicameralAI/docs/readme-demo-videos
jinhongkuan May 10, 2026
0bc5356
test(sync_middleware): sociable rewrite of session-start banner tests…
May 10, 2026
9e2ecb9
Merge remote-tracking branch 'origin/dev' into feat/sociable-sync-mid…
May 10, 2026
b676b17
chore(test): satisfy ruff I001 import grouping in test_sync_middleware
May 10, 2026
e307635
Merge pull request #303 from BicameralAI/feat/sociable-sync-middlewar…
jinhongkuan May 10, 2026
0ee105f
feat(eval): M6 preflight retrieval recall eval — Phase A measurement …
silongtan May 11, 2026
61a0e66
Merge pull request #304 from BicameralAI/58-preflight-m6-recall-eval
silongtan May 11, 2026
2c96dca
fix(eval): disable ingest rate limit in M6 seeder to unblock baseline…
silongtan May 11, 2026
14188f8
Merge pull request #305 from BicameralAI/58-m6-seeder-fix
jinhongkuan May 11, 2026
690e5fa
docs(readme): refresh hero image with double-entry ledger diagram
May 11, 2026
78416b4
chore(skills): replace .claude/skills/bicameral-* mirrors with symlin…
silongtan May 13, 2026
4ea2338
Merge pull request #307 from BicameralAI/skills/symlink-canonical-mirror
silongtan May 13, 2026
f0d0aee
feat(ledger): add decision.updated_at + idx_decision_updated_at (#87 …
silongtan May 13, 2026
f9477fb
fix(ledger): v17→v18 migration tolerates legacy rows with NONE create…
silongtan May 13, 2026
ee24395
style(ledger): apply ruff format to schema.py + test_v18 (#308 CI fix)
silongtan May 13, 2026
812a734
feat(preflight): broaden dedup cache key for M7a/b/c (#87 Phase 4)
silongtan May 13, 2026
eb32e80
style(preflight): apply ruff format to Phase 4 owned files (#309 CI fix)
silongtan May 13, 2026
554011d
feat(preflight): dedup decision telemetry — #87 Phase 5
silongtan May 13, 2026
1d752cc
style(preflight): apply ruff format to Phase 5 owned files (#310 CI fix)
silongtan May 13, 2026
c045f9b
Merge pull request #308 from BicameralAI/87-ledger-updated-at-precond…
silongtan May 13, 2026
1690a30
style(preflight): ruff format leftover in _dedup_miss_was_revision_bu…
silongtan May 13, 2026
261e044
chore(ci): force CI synchronize on #309 after base-branch resolution
silongtan May 13, 2026
0cf574b
style(preflight): drop trailing blank line in dedup_v2 imports (#309 CI)
silongtan May 13, 2026
cacfb62
style(preflight): fix import-block normalization in telemetry tests (…
silongtan May 13, 2026
f5d0882
Merge pull request #309 from BicameralAI/87-preflight-dedup-key
silongtan May 13, 2026
62c30af
chore(ci): force CI synchronize on #310 after base-branch resolution
silongtan May 13, 2026
28255bc
Merge pull request #310 from BicameralAI/87-preflight-dedup-telemetry
silongtan May 13, 2026
0fb78b8
fix(preflight): repair get_ledger_revision SurrealQL — Phase 4 dedup …
silongtan May 13, 2026
6d0d5ac
Merge pull request #311 from BicameralAI/87-followup-ledger-revision-…
silongtan May 13, 2026
b3b5a1f
feat(ledger): v19 constant-time revision counter via DEFINE EVENT (#8…
silongtan May 13, 2026
5c9593f
Merge pull request #312 from BicameralAI/87-phase6-revision-counter
silongtan May 13, 2026
4b70964
fix(ci): SHA-pin test-summary/action in preflight-eval workflow (#272…
Knapp-Kevin May 14, 2026
91fad9a
feat(dashboard): #278 Phase 1 — source view + side-by-side navigation
Knapp-Kevin May 14, 2026
678e3cc
style: ruff format tests/test_dashboard_source_view.py (#278 Phase 1 …
Knapp-Kevin May 14, 2026
dfec895
feat(sources): #279 Phase 1 — pull-based meeting ingestion (sync-and-…
Knapp-Kevin May 14, 2026
fd4bc07
style: ruff check+format on #279 Phase 1 files (CI lint fix)
Knapp-Kevin May 14, 2026
64c0bd1
fix(types): mypy errors on #279 Phase 1 — handle_preflight topic arg …
Knapp-Kevin May 14, 2026
0593a30
style: ruff format events/sources/granola.py (#279 follow-up)
Knapp-Kevin May 14, 2026
c1ca92e
feat(remove-flows): #278 Phase 2 — bicameral.remove_decision + remove…
Knapp-Kevin May 14, 2026
80a4aba
ci: force CI re-run after retargeting to dev (#278 Phase 2)
Knapp-Kevin May 14, 2026
5f81244
feat(admin): #278 Phase 3 — raw SurrealQL admin panel
Knapp-Kevin May 14, 2026
35e5e98
feat(dogfood): #278 Phase 4 — design-partner dogfood instrumentation …
Knapp-Kevin May 14, 2026
49ac4cf
test(replay): #296 — replay determinism regression suite
Knapp-Kevin May 14, 2026
4071a3a
doctrine(governance): #205 Phase 1 — deterministic governance doctrin…
Knapp-Kevin May 14, 2026
ffa1b22
feat(team-sync): #279 Phase 2 — team-mode integration for sync-and-brief
Knapp-Kevin May 14, 2026
0d182bf
perf(skill): add tier-2 semantic relevance gate to preflight (#300)
devin-ai-integration[bot] May 14, 2026
0492de6
feat(timeout): #224 ledger-query timeout with Claude-hooks context su…
Knapp-Kevin May 14, 2026
a6e9392
docs(security): #215 Track 1 — declare MCP-transport trust boundary
Knapp-Kevin May 14, 2026
1df1fb7
Merge pull request #324 from BicameralAI/feat/215-trust-boundary-track1
Knapp-Kevin May 14, 2026
fd6059f
Merge pull request #323 from BicameralAI/feat/224-surrealdb-query-tim…
Knapp-Kevin May 14, 2026
4636de4
Merge pull request #322 from BicameralAI/devin/1778788021-p0-issues
devin-ai-integration[bot] May 14, 2026
c9eef31
docs(plan): plan-252 Layer 4 — portable JSON-Lines export/import (#252)
Knapp-Kevin May 7, 2026
644d339
docs(plan): plan-252 Layer 4 round 2 — Path B (meta-table DELETE-befo…
Knapp-Kevin May 7, 2026
9b482a8
feat(cli): bicameral-mcp ledger-export + ledger-import CLI (#252 Laye…
Knapp-Kevin May 7, 2026
b6ce37c
seal(#252 Layer 4): META_LEDGER entry #48 — JSONL export/import subst…
Knapp-Kevin May 7, 2026
0d55fed
chore: untrack plan-252-layer-4-export-import.md per c206ad4 policy
Knapp-Kevin May 8, 2026
ea0329a
Merge pull request #258 from BicameralAI/plan/252-layer-4-export-import
devin-ai-integration[bot] May 14, 2026
d10abd1
research(team-server): tier v1 compatible-component survey + META_LED…
Knapp-Kevin May 14, 2026
c41c2f6
feat(ideation): team-server tier v1 — structured ideation with operat…
devin-ai-integration[bot] May 14, 2026
3725449
feat(ideation): record R1 decision — MCP local + remote JSONL, no tea…
devin-ai-integration[bot] May 14, 2026
32a2c1a
fix(setup): resolve hooks dir for submodule .git pointer
May 10, 2026
a45b8f6
Merge pull request #326 from BicameralAI/fix/setup-hooks-submodule-po…
jinhongkuan May 14, 2026
9bb33fb
Merge pull request #325 from BicameralAI/research/team-server-tier-v1…
devin-ai-integration[bot] May 14, 2026
b6a8bf4
docs(ideation): reconcile post-R1 terminology + preserve architectura…
devin-ai-integration[bot] May 14, 2026
4346601
docs(ideation): add Section 9a — Known Limitations of the R1 Architec…
devin-ai-integration[bot] May 14, 2026
e01eb70
docs(ideation): consolidate known limitations to issue #215 as single…
devin-ai-integration[bot] May 14, 2026
2ad9da2
docs(research): R1 limitation & gap remediation strategies — all 24 i…
devin-ai-integration[bot] May 14, 2026
96369a2
feat(pii-archive): #221 Phase A — PiiArchive primitive + schema slot
Knapp-Kevin May 14, 2026
0ad094e
docs: resolve A6 — first-write-wins accepted as v1 conflict semantic
devin-ai-integration[bot] May 14, 2026
3540dd1
Merge pull request #328 from BicameralAI/devin/1778797415-reconcile-i…
devin-ai-integration[bot] May 14, 2026
bede359
Merge pull request #329 from BicameralAI/feat/221-gdpr-right-to-erasure
Knapp-Kevin May 14, 2026
eded238
ci: add workflow_dispatch trigger to schema persistence tests
devin-ai-integration[bot] May 14, 2026
8ebb120
Merge pull request #345 from BicameralAI/devin/1778802341-fix-123-wor…
devin-ai-integration[bot] May 14, 2026
1c5d971
fix(bind): use head_sha on ephemeral branches instead of stale author…
devin-ai-integration[bot] May 15, 2026
545d68f
feat(sources): #344 LocalDirectorySourceAdapter — capture decisions b…
Knapp-Kevin May 15, 2026
daf52ab
merge: include Group A bind changes (devin/1778802955-fix-bind-epheme…
devin-ai-integration[bot] May 15, 2026
5d2999c
fix(status): ephemeral stale-repair + ungrounded guard + backfill mig…
devin-ai-integration[bot] May 15, 2026
ebb63fb
style: ruff format ledger/adapter.py
devin-ai-integration[bot] May 15, 2026
efac56e
fix(ingest): auto-classify decision_level when caller omits it (#340)
devin-ai-integration[bot] May 15, 2026
e204545
fix(preflight): suppress noise on un-ingested code + ledger-awareness…
devin-ai-integration[bot] May 15, 2026
2f7a56f
Merge remote-tracking branch 'origin/devin/1778806157-fix-auto-classi…
devin-ai-integration[bot] May 15, 2026
747e3e9
Merge pull request #347 from BicameralAI/feat/344-local-directory-sou…
Knapp-Kevin May 15, 2026
637b77e
Merge remote-tracking branch 'origin/devin/1778806506-fix-preflight-n…
devin-ai-integration[bot] May 15, 2026
c82db5f
fix(ledger): prune orphaned ephemeral decisions after merge to author…
devin-ai-integration[bot] May 15, 2026
289b1f4
feat(notifications): #330 + #335 Phase 1 — ChannelAdapter foundation
Knapp-Kevin May 15, 2026
72bbd20
fix(infra): always-run schema CI, diagnose row probe, env-var truthy …
devin-ai-integration[bot] May 15, 2026
8df7856
Merge pull request #351 from BicameralAI/devin/1778807184-fix-ephemer…
Knapp-Kevin May 15, 2026
f91e4a5
Merge pull request #353 from BicameralAI/devin/1778808036-fix-infra-g…
Knapp-Kevin May 15, 2026
5b64987
Merge pull request #352 from BicameralAI/feat/330-335-channel-adapter…
Knapp-Kevin May 15, 2026
1829f39
feat(pii-archive): #221 Phase B-1 — ingest cutover + read-path centra…
Knapp-Kevin May 15, 2026
d59e01e
docs(test-audit): #357 Phase A — ledger sociable test coverage audit
silongtan May 15, 2026
80bb304
test(eval): #357 Phase B — de-mock preflight eval harness with real m…
silongtan May 15, 2026
2cd42b3
test(infra): #357 Phase C — regression-counter gate against new ledge…
silongtan May 15, 2026
513ee2a
test(eval): reference issue #358 in FF4 xfail message
silongtan May 15, 2026
5769663
style: fix ruff + mypy errors flagged on PR #359
silongtan May 15, 2026
d16345a
Merge pull request #359 from BicameralAI/infra/357-testing-ci-hygiene
silongtan May 15, 2026
5a67517
fix(e2e): #362 — reclassify Flow 3 'no cc rows + no verdicts' as advi…
silongtan May 15, 2026
1019083
Merge pull request #363 from BicameralAI/fix/362-e2e-flow3-regression
silongtan May 15, 2026
ee466b8
infra(symlinks): #357 sub-task 4 — Windows symlink materialization gate
silongtan May 15, 2026
87128a7
ci(perf): #357 sub-task 2 — file-backed SurrealKV perf gate for get_l…
silongtan May 15, 2026
49fdca9
style(perf): apply ruff format to test_ledger_revision_perf.py
silongtan May 15, 2026
553c15f
infra(pre-commit): #357 sub-task 3 — local ruff enforcement at commit…
silongtan May 15, 2026
62eba3b
Merge pull request #360 from BicameralAI/infra/357-subtask-2-perf-gate
silongtan May 15, 2026
95a6732
Merge pull request #361 from BicameralAI/infra/357-subtask-3-pre-commit
silongtan May 15, 2026
86ba088
fix(ci): use ASCII in Windows symlink check print messages
silongtan May 15, 2026
24d70db
Merge pull request #364 from BicameralAI/infra/357-subtask-4-windows-…
silongtan May 15, 2026
a8d2a65
test(preflight): #357 backfill — de-mock test_preflight_dedup_v2.py +…
silongtan May 15, 2026
c130606
Merge pull request #365 from BicameralAI/infra/357-backfill-preflight…
silongtan May 15, 2026
a580ed2
feat(setup): #368 worktree-polish — linked-worktree notice + origin/H…
May 15, 2026
2d47ca3
Merge pull request #356 from BicameralAI/feat/221-phase-b-ingest-cutover
jinhongkuan May 15, 2026
da58c2a
v22→v23 migration: backfill decision_level for legacy decisions
devin-ai-integration[bot] May 15, 2026
e69bfbe
fix: ruff format
devin-ai-integration[bot] May 15, 2026
552704b
fix: per-row UPDATE with try/except for legacy fixture compat
devin-ai-integration[bot] May 15, 2026
b5074d8
Merge pull request #371 from BicameralAI/devin/1778887249-backfill-de…
jinhongkuan May 15, 2026
8157665
feat(release): nightly channel for design partners + channel-aware bi…
May 16, 2026
6791006
fix(update): bind cache.get to a variable so mypy narrows correctly
May 16, 2026
d6d0f33
Merge pull request #374 from BicameralAI/feat/nightly-channel-update
jinhongkuan May 16, 2026
6b80705
feat(release): flip channel sources + CalVer nightlies
May 16, 2026
70d402f
Merge pull request #376 from BicameralAI/refactor/nightly-pypi-query
jinhongkuan May 16, 2026
dc4b875
fix(ledger): #358 — get_context_for_ready_decisions preserves decisio…
silongtan May 16, 2026
0406358
chore(nightly): bump RECOMMENDED_NIGHTLY_VERSION to 2026.5.16.dev15124
May 16, 2026
e74b2b1
Merge pull request #379 from BicameralAI/chore/bump-nightly-pointer-2…
jinhongkuan May 16, 2026
26f47d0
Merge pull request #378 from BicameralAI/fix/358-context-pending-read…
silongtan May 16, 2026
6931c2a
fix(setup): auto-detect nightly channel from .dev install version
May 16, 2026
772ff88
Merge pull request #381 from BicameralAI/fix/setup-wizard-nightly-cha…
jinhongkuan May 16, 2026
aaa039e
chore(nightly): bump RECOMMENDED_NIGHTLY_VERSION to 2026.5.16.dev024452
May 16, 2026
a02826e
Merge pull request #382 from BicameralAI/chore/bump-nightly-pointer-2…
jinhongkuan May 16, 2026
15d0c40
fix(schema): backfill bicameral_meta.decision_revision in v18→v19 + v…
May 16, 2026
a4a3ad6
docs(dev-cycle): require linked bicameral decision on org-member PRs
May 16, 2026
8c4bd47
style: ruff format the schema fix files
May 16, 2026
27a6500
Merge pull request #384 from BicameralAI/docs/dev-cycle-require-linke…
jinhongkuan May 16, 2026
2fbfa32
Merge pull request #383 from BicameralAI/fix/schema-decision-revision…
jinhongkuan May 16, 2026
65cf5cb
fix(server): move code-locator init off MCP stdio handshake (#380)
May 16, 2026
dac8f0f
Merge pull request #385 from BicameralAI/fix/380-codelocator-init-off…
jinhongkuan May 16, 2026
ebcfeb4
fix(ledger): include archive_key in input_span dedup index (v24) + sa…
May 16, 2026
6088e23
feat(remove_decision): default to hard delete, retire soft-delete tom…
May 16, 2026
f8e233c
chore(claude-mem): refresh auto-generated activity context after hard…
May 16, 2026
a90ce86
fix(upsert_input_span): bump MVCC retry ceiling 5 → 10 to absorb test…
May 16, 2026
9596352
Merge pull request #386 from BicameralAI/fix/380-codelocator-init-off…
jinhongkuan May 16, 2026
3eb50bb
release: v0.15.0 — PII archive, hard-delete remove_decision, schema v…
May 16, 2026
74377d3
Merge remote-tracking branch 'origin/main' into release/v0.15.0
May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions .claude/hooks/pre_tool_use_timeout_context.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/usr/bin/env python3
"""Claude Code PreToolUse hook — emit timeout posture before bicameral tool calls.

Fires before a ledger-touching tool runs. Reads the recent-timeout ring
buffer + current budgets and emits a one-line summary to stderr so
the Claude agent can reason about whether to fire the query at all,
choose ``timeout_class="drift"`` thoughtfully, or back off after
observed degradation.

**Always exits 0.** Hook is advisory; the server-side
``asyncio.wait_for`` wrap is the deterministic gate.

The hook reads stdin (Claude Code passes a JSON envelope describing
the about-to-fire tool) but does not parse it deeply — emitting the
posture line is universally useful before any bicameral tool, so we
skip envelope-shape coupling and just always print.
"""

from __future__ import annotations

import os
import sys


def main() -> int:
# Drain stdin so Claude Code's pipe doesn't backpressure.
try:
sys.stdin.read()
except Exception:
pass

repo = os.environ.get("CLAUDE_PROJECT_DIR") or os.getcwd()
if repo not in sys.path:
sys.path.insert(0, repo)

try:
from ledger.timeout_telemetry import recent_timeout_counts
except Exception:
return 0

try:
counts = recent_timeout_counts(window_seconds=600.0) # 10 min window
except Exception:
return 0

if counts.get("read", 0) == 0 and counts.get("drift", 0) == 0:
# Quiet path — no posture-changing signal to surface.
return 0

sys.stderr.write(
"[bicameral] recent ledger-query timeouts (last 10 min): "
f"{counts.get('read', 0)} read / {counts.get('drift', 0)} drift — "
"consider whether the next query may also be slow\n"
)
return 0


if __name__ == "__main__":
sys.exit(main())
76 changes: 76 additions & 0 deletions .claude/hooks/session_start_timeout_posture.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#!/usr/bin/env python3
"""Claude Code SessionStart hook — surface ledger-query timeout posture.

Runs once when a Claude Code session starts. Reads the bicameral
ledger-query timeout configuration + the recent-timeout ring buffer
and prints a one-line brief to stderr; Claude Code surfaces stderr
from hooks back to the model as a context fragment.

**Always exits 0.** Never blocks the session. If the bicameral package
isn't importable (e.g. running in a checkout without the venv), prints
a single warning and exits 0. The deterministic server-side timeout
wrap remains the source of truth regardless of whether this hook
runs at all.

Per #224 + the feedback-claude-hooks-for-mcp-context memory:
deterministic gate (asyncio.wait_for in ledger/client.py) is the
floor; this hook is advisory context enrichment for the Claude
agent only.
"""

from __future__ import annotations

import os
import sys


def main() -> int:
repo = os.environ.get("CLAUDE_PROJECT_DIR") or os.getcwd()

# Add the repo root to sys.path so we can import the bicameral
# package without a venv hop. Hooks run in whatever shell Claude
# Code launched — they have no guarantee of import context.
if repo not in sys.path:
sys.path.insert(0, repo)

try:
from context import (
_read_query_timeout_drift_seconds,
_read_query_timeout_read_seconds,
)
from ledger.timeout_telemetry import recent_timeout_counts
except Exception as exc:
sys.stderr.write(f"[bicameral hook] timeout-posture unavailable: {exc}\n")
return 0

try:
read_budget = _read_query_timeout_read_seconds(repo)
drift_budget = _read_query_timeout_drift_seconds(repo)
except Exception:
read_budget = 5.0
drift_budget = 30.0

try:
counts = recent_timeout_counts()
except Exception:
counts = {"read": 0, "drift": 0}

env_disabled = os.environ.get("BICAMERAL_QUERY_TIMEOUT_DISABLE", "").strip().lower() in {
"1",
"true",
"yes",
"on",
}
env_disabled_str = "on" if env_disabled else "off"

sys.stderr.write(
"[bicameral] query timeouts last 1h: "
f"{counts.get('read', 0)} read / {counts.get('drift', 0)} drift "
f"| budgets: {read_budget:.1f}s / {drift_budget:.1f}s "
f"| env-disable: {env_disabled_str}\n"
)
return 0


if __name__ == "__main__":
sys.exit(main())
1 change: 1 addition & 0 deletions .claude/skills/bicameral-bind
1 change: 1 addition & 0 deletions .claude/skills/bicameral-brief
1 change: 1 addition & 0 deletions .claude/skills/bicameral-capture-corrections
247 changes: 0 additions & 247 deletions .claude/skills/bicameral-capture-corrections/SKILL.md

This file was deleted.

1 change: 1 addition & 0 deletions .claude/skills/bicameral-config
1 change: 1 addition & 0 deletions .claude/skills/bicameral-context-sentry
Loading
Loading