Orchestrata Ultimate › Tasks
Tasks — open work items
142 open deferred-work items and 422 completed, from context.json in the project checkout. Priorities are normalised: critical is P0, high is P1, medium is P2, low is P3; items without a priority are Unprioritised. P1 (including high) open: 18.
Prose pending.
Summary
| Priority | Open | Done | Total |
|---|---|---|---|
| P0 | 0 | 4 | 4 |
| P1 | 18 | 138 | 156 |
| P2 | 47 | 129 | 176 |
| P3 | 24 | 38 | 62 |
| P4 | 2 | 2 | 4 |
| Unprioritised | 51 | 111 | 162 |
| All | 142 | 422 | 564 |
P1 — 18 open
Raw labels: P1 11, high 7.
| Opened | Item | Notes |
|---|---|---|
| 2026-07-04 | Spec-gap remediation: verify implementation against all specs 000-105; close real gaps | |
| 2026-07-05 | VERIFY coverage in isolation before declaring the coverage task done: [tool.coverage.run] parallel=true means concurrent test-writer agents' .coverage.* files can cross-contaminate each other's --cov reports (infra_config agent empirically saw _git.py bleed into its report). After ALL waves finish, run 'coverage erase' then a CLEAN sequential coverage over the committed modules' test files (isolated COVERAGE_FILE, no concurrent agents) to confirm each committed module is GENUINELY >=90%. Re-address any that were contamination-inflated. | |
| 2026-08-02 | T1b: false_confidence via three witnesses (coverage --cov-context=test regen + attribute_traces_runtime + AST call-graph/branches); diff=missing | rides T1 traces/entrypoint facts; needs ~8min per-test coverage regen (current .coverage has no contexts) |
| 2026-08-02 | T1c: suite consolidation/minimization report on the coverage matrix (CLP(FD) set-cover via schedule_tests + pyramid inversions + redundancy-vs-false-confidence); TIER not delete; drop-safety by mutation-kill | user-approved 2026-08-02; rides T1b matrix; factory/evidence/mutation.py is the criterion |
| 2026-08-09 | REGENERATE plans/cov_baseline.json before any further coverage-wave work — the current P1 item is sized against a fictitious number. Audited 2026-08-09: the baseline is a 2026-07-08 snapshot and shows 370 src files under 90% coverage (agents 40, session 39, kernel 32, core 27, orchestrator 27, verification 25, cxp 24, knowledge_graph 24, postman 21, gateway 18) — NOT the 103 the backlog item claims, at any statement-count threshold tested (0/5/10/20/30/50). The '103' does not come from plans/test_coverage_plan_revised.json either: its total_untested=104 is a METHOD-level count across 305 modu… | |
| 2026-08-09 | Coverage back-fill (RE-SIZED 2026-08-09, replaces the '103 src files' item which was fictitious): plans/cov_baseline.json is a 2026-07-08 snapshot measuring 632 files, of which 370 src files are <90% statement coverage — not 103, at any threshold tested (0/5/10/20/30/50). The separate '104' in plans/test_coverage_plan_revised.json is a METHOD-level count across 305 modules, a different unit. BLOCKED-BY the cov_baseline regeneration item — do not schedule waves against the stale baseline. The cited evidence file scratchpad/cov_worklist.py no longer exists on disk. | |
| 2026-08-10 | KG requirement tiers are UNPOPULATED and non-canonical in the operational graph (measured 2026-08-10 against orchkg): 14 :Requirement nodes, ALL with 'unscoped:001:US-001:REQ-...' or bare 'REQ-008-023' ids and ZERO carrying project_id; 1 :Spec ('unscoped:001'); ZERO :RequirementItem nodes. The canonical writer (session/kg_sync/_stage_specs_traces.py) emits BOTH a project-qualified id (f'{pid}:{...}') and a project_id property on all three tiers, so nothing in production was written by it. Consequence: every reader that scopes by project_id — GetRequirementsTool._collect_traced_item_ids, resol… | |
| 2026-08-12 | No shared finding/evidence vocabulary in core/ — two finding-shaped models now exist with no common ancestor | RAISED BY THE USER 2026-08-12: 'aren't data structures and models supposed to be shared?' Correct on principle. My coupling argument for not reusing factory.detectors.models was WRONG and is retracted - declining to import from a self-cont… |
| 2026-08-21 | Wire the deception-audit quartet (posttool_auditor -> deception_detector -> stop_auditor -> stop_auditor_subagent); SubagentStop is registered in NO settings file, so subagent claims are unaudited | 942 lines already written, zero tests in tests/claude/. Tests must come first. Decide user-level vs project-level scope. |
| 2026-08-21 | P2: project-level .claude guards are silently inert when session cwd is outside the repo | Demonstrated this session: all 24 repo guards (force-ast-toolkit, no-xdist, no-mocks, design-before-build) never fired because cwd was /home/mohamed. MVP is a SessionStart hook that ANNOUNCES the inert guard set. |
| 2026-08-21 | Wire PostmanGovernanceManager into RoutingEngine, replacing the hardcoded _check_governance if-chain (Constitutional Article II violation) | 8 Prolog authority predicates + the full async manager are built and never constructed in production; router.py:123 hardcodes the rules instead. Runtime-built predicate names make these query sites invisible to the AST boundary gate. |
| 2026-08-21 | ConstitutionalEnforcer is gated on policy_audit_mode, a constructor default no configuration can reach | Make it env-driven (GOVERNANCE_MODE=off|audit|enforce) and construct it on the real dispatch path. Today no production site passes True, so the 12 articles are never constructed there at all. |
| 2026-08-21 | Suite tail: tests/scripts/test_gen_brief_pack.py is 276.8s — the largest schedulable atom (40% of one lane's ideal budget on 8 lanes). Split or cache its AST/refs fixture; measured from .cache/test_durations.json 2026-08-21. | |
| 2026-08-21 | DEFECT: plan_schedule() dies with janus PrologError 'Stack limit (1.0Gb) exceeded' on the real 1,674-module duration cache. test_schedule.pl posts W*N reified (Var #= WorkerIdx #<==> Ind) constraints plus W scalar_product_eq propagators spanning N terms; crash frame is clpfd:sum_finite_domains over a 1,538-length list. Contract admits only ValueError/feasible=False, so callers cannot handle it. Measured tractable: N=25 in 7.35s, N=50 >90s, N=1674 crash. Guard the entry point + decompose (exact solve on the heavy tail, LPT the rest). | |
| 2026-08-23 | CI jobs on the private registry image fail: incusd runs skopeo as ROOT and root has no registry.gitlab.com login (403 on ci:latest). Public-image jobs (vizint-*) pass, so the executor deployment is sound. | Fix A (one command, credential-gated, needs Mohamed to name it): sudo skopeo login registry.gitlab.com. Fix B (no credential): make the project container registry public. Fix C (no credential, redesign): build docker/Dockerfile.ci on the r… |
| 2026-08-27 | Pyright debt: 410 errors remain, ALL in tests/ (342) and claude/ (68) — src and scripts are at ZERO. Close them out and make CI strict. | RE-SIZED 2026-08-27 by direct measurement (pyright_ratchet --source X --max 999999, four runs): src=0, scripts=0, tests=342, claude=68. The original programme's hardest arms are DONE — the provider-protocol reconciliation, the interfaces-v… |
| 2026-08-27 | Phase 3 codegen: the enums lane is BUILT but ORPHANED — specs/codegen/enums.json has zero non-test references, so no gate ever runs gen-enum --check against it. Arm that lane, then extend the census to the remaining pattern families. | RE-SIZED 2026-08-27 by measurement. What EXISTS: specs/codegen/enums.json (2,181 bytes, authored 2026-07-14) and the generator with its drift arm, serialize_codebase_ast.py gen-enum --spec-file --check. What is MISSING: refs 'enums.json' r… |
| 2026-08-27 | 40% of spec requirements (2,224 of 5,561) have ZERO @traces, and 4,711 traced symbols are unreachable from any entrypoint. Determine the orphan cause before the next citation wave. | RE-MEASURED 2026-08-27 via 'trace_intel.py report': entrypoints=256 (229 narrated), spec_requirements=5561, untraced_reqs=2224, traces=8927, orphans=4711, unspecced=387, specless_usecases=18. Movement since 2026-08-12: untraced 2428->2224… |
P2 — 47 open
Raw labels: P2 38, medium 9.
| Opened | Item | Notes |
|---|---|---|
| 2026-07-08 | Create a Docker/compose deployment of the stack (Neo4j, Memgraph HA+controller, Redis/Valkey, app) with volumes, healthchecks, network — portable alternative to Incus. | Informed by the e2e deploy research. |
| 2026-07-08 | Research Redis/Valkey (Sentinel HA) cluster as a system-wide agent service bus with named queues/streams so Claude, Kimi, DeepSeek (codewhale), OpenCode can communicate. Reuse existing cxp + postman (already route inter-agent msgs over Redis); design queue topology, delivery/acks, external-agent attach/auth. | Composes with the Valkey/Sentinel HA cluster + existing CXP/Postman. |
| 2026-07-08 | Create /to_kimi, /to_opencode, /to_codewhale outbound channels/commands so Claude sends messages TO those agents over the multi-agent service bus (#9). Each publishes to the target's inbox queue/stream on the Redis/Valkey bus, reusing existing cxp + postman. Expose as slash commands and/or session_cli.py subcommands, wired through the session CLI so cross-agent dispatch is tracked. | Outbound side of the #9 service bus; depends on its queue topology + external-agent attach/auth. |
| 2026-07-12 | Prolog governance wiring for native tools: may_stop_task/2 (069), may_access_mcp/3 (071); replace in-process authz stand-ins | |
| 2026-07-12 | session.facts gateway bridge: FactEmitter/session_fact_hook (kernel-side) -> gateway broadcast transport | |
| 2026-07-21 | Purity sweep: audit the Minimal* test-class family (12+ classes) — separate legitimate minimal Protocol/ABC implementations from infrastructure capture-doubles (MinimalClient in test_search.py was one, deleted 2026-07-21); extend audit_test_purity.py heuristics if a pattern emerges | |
| 2026-07-21 | Wire GDS PageRank centrality (CALLS graph, Function/Method labels) into the SPEC-106 context-pack relevance scorer — GDS 2.13.2 installed+evaluated 2026-07-21 (projection 1.43s, pagerank 0.33s); also note CodeFunction nodes carry no CALLS edges (call graph lives on Function/Method — possible sync gap worth auditing) | |
| 2026-07-21 | Grow wiki RAG goldset to ~100 queries + CI ratchet via wiki-rag-eval; decide rerank default from that run | |
| 2026-07-21 | Hybrid BM25+vector retrieval for wiki RAG fused via existing RRF machinery | |
| 2026-07-21 | Wiki RAG embedding cache by chunk-content hash for incremental ingest | |
| 2026-07-21 | BDD plan Phase 2 (plans/bdd-runtime-tracing-plan.md): run_tests.py --attribute with COVERAGE_CORE=ctrace pinned in batch env; separate cadence, never default lane | Re-added: accidentally marked complete-work by an index-shift mistake in session 244 (Phase 0/1 builder) -- Phase 2 was NOT done, still open. |
| 2026-07-24 | Concurrency hardening follow-up (B4a.2 residual): adversarial byte-race on one identical module path synced by two threads simultaneously still shares the pre-qualification MERGE window; harden if B9 ever dispatches truly overlapping-module concurrent syncs. | |
| 2026-08-02 | T2: contract/security reachability proofs (violates_audit, ungoverned_decision) for D1-D7 | |
| 2026-08-02 | T3: clone/consolidation via body_hash body_clone + structural_twin (module-count reduction, DP2) | |
| 2026-08-09 | Postman topic/subscription persistence (the un-done half of the old P2.22 item, whose Prolog half landed in 1c9e71b4 2026-07-12 and was re-verified 2026-08-09). TopicRegistry and SubscriptionManager hold registrations in in-memory dicts, so every topic and subscription is lost on Postman restart. Needs a real design call before any build: storage backend (Redis vs operational KG), TTL/eviction policy, and migration for the existing in-memory callers. | |
| 2026-08-09 | DECISION (Mohamed): Postman Prolog governance is AUDIT-ONLY. _make_decision queries postman_governance.pl and records prolog_verdict/prolog_agrees in the audit log, logging divergence, but the Python AGENT_PERMISSIONS/TOPIC_OWNERS/QUEUE_OWNERS tables remain authoritative — the rulebase never overrides them. Deliberate staged rollout per 1c9e71b4, same shape as the kernel dispatcher's policy audit. Open question recorded at that commit and still unanswered: should the Prolog verdict become ENFORCING? Note SPEC-007 KP#1 says Prolog decisions are final, which argues yes; two sources of truth for… | |
| 2026-08-09 | Prolog tabling strategy: Phases C and D only. Audited 2026-08-09. Phase A DONE — kg_relevance.pl carries exactly the 7 ':- table ... as incremental' directives the plan specifies (lines 48-54), landed in 6e22c438. Phase B partially covered by test_relevance.py:268 test_refine_is_deterministic_across_calls. REMAINING: Phase C instrument timing, Phase D benchmark at 100/500/1K nodes — neither exists; scripts/benchmark_context_pack.py does not parametrize node counts for kg_relevance. | |
| 2026-08-09 | Wire trace-lint into the RUL-008 gate battery + settle class-vs-method @traces granularity. Measured 2026-08-09: serialize_codebase_ast.py trace-lint reports real errors and is NOT in scripts/gates.py — a lint that finds defects but never runs (RUL-023 built-not-wired). Its 8 spec-mismatch errors are FIXED (commit follows: four @traces decorators claimed one spec while citing another's reqs; split per spec, since @traces stacks). REMAINING blocker to wiring: 1 error, tools/worktree_tools.py:401 EnterWorktreeTool 'shotgun: 36 reqs (>25)'. Not mis-attribution — Exit correctly owns REQ-064-023..… | |
| 2026-08-09 | Projection-completeness guards cannot be wired as specified — the API assumes one rulebase, production merges six. Investigated 2026-08-09; supersedes the old 'wire required_predicates + assert_projection_complete into 3 call sites' item, which described a shape none of those sites have. FINDINGS: (1) governance/prolog_gate.py PrologGate.load_rules (45-79) consults SIX files into ONE janus engine as a merged corpus (governance/constitutional/agents/ethics/pam_rules/completion.pl); required_predicates parses a SINGLE file's AST, so running it against any one member misclassifies a sibling file… | |
| 2026-08-09 | Codegen templates: gen-traces, gen-adapter and the KG node/edge writers are the ones still missing. Audited 2026-08-09. PRESENT per --help: gen-tests, gen-dto, gen-enum, gen-volk, gen-protocol, gen-skeleton, gen-facade, gen-serde, add-trace, check-traces, trace-audit, trace-lint. ABSENT: gen-traces (the plan's own 'biggest single lever' — an IDEMPOTENT stamp/verify codemod for @traces, distinct from the existing insert-only add-trace), gen-adapter, gen-wrappers, gen-exceptions, gen-tool, and any KG node/edge-writer generator. git log -S across all branches shows only planning-doc commits (23d… | |
| 2026-08-09 | Wire session-store context into the intent normalizer (the un-done half of the old intent-phrasing item). Audited 2026-08-09. DONE: prompt-variant measurement against tests/orchestrator/data/intent_corpus_raw_turns.json landed in b1ffd7ef, hitting the stated rewrite ceiling 29/76. REMAINING: the last-2-turns context source is never populated. IntentNormalizer.normalize, IntentClassifier.classify_async and IntentBroker.process_text all already accept an optional 'context: Sequence[str]' parameter, but code_intel.py callers finds ZERO call sites passing it — the parameter surface exists and not… | |
| 2026-08-09 | llm/client.py coverage (RE-MEASURED 2026-08-09, replaces the '69% / needs live-CLI slow tests' item): measured 86% (300 stmts, 41 missed) from the FAST tier alone — tests/llm/test_client.py + test_client_extended.py, 73 passed / 2 deselected / 0 failed in 10s. The remaining 41 statements are error paths in call_llm/call_reasoner/call_with_tools, closeable without any live-CLI slow-tier run. The previously-cited failing test 'test_call_llm_resolves_volk_model_when_not_overridden' does not exist under that name anywhere in the tree and no failure reproduced. | |
| 2026-08-09 | D12 persistence, remaining halves (P1 CLOSED 2026-08-09 — verified: refs GraphDatabase shows ONE production import, core/graph_factory.py:13; the 3 production Redis imports are TYPE_CHECKING-only with injected clients; architecture_checker.check_direct_driver_construction is the live gate). STILL OPEN: P2 converge the 6 KG writers into one — GraphSessionStore, knowledge_graph/sync.py and architecture_writer.py remain separate writers with independent merge-key logic, and architecture_writer.py has 0 importers. P3 aggregate repositories — core/base/repository.py defines only the BaseRepository… | |
| 2026-08-09 | Neo4j AUDIT LOGGER has no lazy redial (the last third of the old kernel-init-gates item; the other two thirds are DONE and verified 2026-08-09: deploy/systemd/orchestrata-kernel.service has ExecStartPre orchestrata-kg-ready, and pipeline_kg._kg_available_now:177-193 does a throttled re-dial of _init_context_injector). build_default_audit_logger (kernel/audit_bootstrap.py:50-68) makes ONE construction attempt, catches any exception and permanently returns None — its 2 production call sites (pipeline_audit.py:56, volk_registry.py:414) each call it once at construction and never again, so a grap… | |
| 2026-08-09 | Base-class adoption (counts REFRESHED 2026-08-09 from the current plans/ast-ultimate.json; supersedes the stale 408/1500): 455 of 1639 classes under src/orchestrata_ultimate inherit from nothing, EXCLUDING @dataclass-decorated classes which legitimately need no core.base parent (1018 bare including dataclasses). Worst packages: kernel 46, orchestrator 45, refactor 43, cxp 32, gateway 31, knowledge_graph 31. No allowlist file and no architecture_checker rule for base-class adoption exists, so nothing has been remediated — the raw count grew with the codebase while the ratio held. | |
| 2026-08-09 | DECISION (Mohamed) x2, from the W2 KG-identity item whose other halves are settled — (a) kg_design store_* API is CONFIRMED addressed: store_spec/store_design/store_session take an explicit project_slug, and store_user_stories/store_requirements scope transitively; (c) the pipeline_kg 'unscoped' literal is GONE (refs 'unscoped' = 0 repo-wide; sync_components_to_kg now best-effort no-ops when no project resolves). STILL NEEDING A RULING: (b) session/kg_context.KnowledgeGraphContext has no project notion on any of its 19 methods — retire it in favour of the unified ContextInjector, or retrofit… | |
| 2026-08-09 | SPEC-014 gaps, REQUIREMENT-BY-REQUIREMENT (re-audited 2026-08-09; replaces the '15 REQs' item, 8 of which are DONE). FIXED and wired, drop them: REQ-014-076..079 workflow.start/pause/resume/cancel — WorkflowHandler.handle_* all carry @traces, are in rpc.py's method registry, constructed in RPCHandler.init, control port wired at server.py:630, tested in tests/gateway/handlers/test_workflow.py. REQ-014-082..085 config.get path-scoping + SecretRedactor.redact + last_updated, and handle_set as a deliberate structured denial (_READ_ONLY_DENIAL). STILL OPEN: 074 handle_send returns {status,thre… | |
| 2026-08-09 | Wire the kg-explorer gadget into vizint-ui/app.js (all that remains of the old vizint item; re-audited 2026-08-09). DONE, dropped: governance.events publisher (gateway/handlers/governance.py:293 publish_decision_event, called at :210/:223, tested end-to-end); kernel.events forwarder (server.py _init_kernel_events_forwarder:646 / _consume_kernel_events:874 / _pump_kernel_events_once:188 / _decode_kernel_event:239, tests/gateway/test_kernel_event_forwarder.py); NotificationCenter registration (app.js:122-127). REMAINING: vizint-ui/gadgets/kg-explorer/ exists on disk but 'kg-explorer' appears no… | |
| 2026-08-09 | Pipeline resume: persist the ORIGINAL INTENT TEXT (all that remains of the old resume item; re-audited 2026-08-09). DONE, dropped: per-stage checkpointing (pipeline_runner.py _run_stage:818-1044 calls _save_stage_checkpoint -> checkpoint.save_stage, contra the item's doc/code-mismatch claim) and true stage-skipping resume with work_type persistence (commit 61701a15 — resume() reads stored_work_type, reconstructs synthetic RESOLVED StageResults in router order and starts _execute_stages at the first non-checkpointed stage). REMAINING: resume() hardcodes PipelineResult(intent='resume'); 'origin… | |
| 2026-08-09 | SPEC-028 default-profile divergence (RE-MEASURED 2026-08-09; the old item's values had drifted again). TEST-028-017 in specs/028-llm-client/checklists/testing.md:27 is still unchecked and expects default U:Cx -> claude/claude-sonnet-4-5. Actual configs/spike-profiles.yaml 'default:' now assigns U:Cx -> openrouter/minimax-m3 — NOT deepseek-v4-pro as the old item claimed (that is the separate 'deepseek:' profile). 14 profiles now exist including a new claude-hybrid. 'claude-sonnet-4-5' appears nowhere in src/ or tests/, and no test enforces TEST-028-017. DECISION NEEDED: is the spec or spike-pr… | |
| 2026-08-09 | Empty-content LLM responses are never retried (dogfood F3, root-caused 2026-08-09). providers/adapters/deepseek_adapter.py:83-84 does content = message.get('content') or '' and captures the reasoning model's reasoning_content ONLY into metadata (line 96) — never as a fallback when content is blank. Neither llm/client.py _execute_with_retry:565-694 nor providers/provider_manager.py execute:258-309 retries on an empty ProviderResponse: _should_stop_retrying keys off a raised exception, and an empty response is a normal return value. No code path anywhere checks response.content for emptiness. F… | |
| 2026-08-09 | Provider starvation: rate_limit_tpm defaults are never overridden (dogfood F16, re-verified 2026-08-09 — the planned fix was never merged). core/protocols/providers.py:184-194 defaults ProviderConfig.rate_limit_tpm to 100_000; llm/client.py _build_deepseek:216-236 and _build_openrouter:258-312 both construct ProviderConfig without passing rate_limit_tpm, so both inherit 100K. provider_manager.py execute:258-309 then raises ProviderError('No eligible provider found...') on an empty fallback chain instead of waiting for the TPM window to reset; no 'resets in' message exists anywhere in the tree… | |
| 2026-08-09 | Cron scheduler daemon (068) — store is ready, daemon is not, and the process model is undecided. tools/schedule_cron_tool.py:511 ScheduleCronStore is pure Redis-backed CRUD (save_job/get_job/list_jobs/save_execution); no CronDaemon or CronScheduler symbol exists anywhere, nothing reads due jobs and executes them, and there is no missed-job recovery. DECISION FIRST: in-process asyncio loop inside the kernel vs a standalone scripts/ daemon, and what the missed-job policy is on restart. Then build. | |
| 2026-08-09 | Plugin SDK: IProviderRegistry, Prolog rules, PluginAudit (re-audited 2026-08-09; boot wiring and IToolRegistry are DONE — kernel/cli_main.py:452 _boot_plugin_system constructs a real PluginManager, wires ToolRegistryAdapter(default_registry()) as IToolRegistry, calls initialize/load_plugin/start and appends a component, gated behind ORCHESTRATA_PLUGINS_DIR with a real test at tests/kernel/test_cli_main_plugin_boot.py). REMAINING: PluginManager.init accepts provider_registry but _boot_plugin_system never passes one and no ProviderRegistryAdapter exists anywhere; plugin Prolog rule loading… | |
| 2026-08-10 | SPEC-022 (Terminal UI) is UNIMPLEMENTED — REQ-022's 39/39 UNLINKED is an implementation gap, not a tagging gap. Measured 2026-08-10: AST 'symbols --pattern TUI|Textual|tui' returns nothing in src/ or scripts/; no textual/blessed/urwid/prompt_toolkit in pyproject.toml; 'find -type d -name tui' returns only ./specs/022-tui-interface. vizint-ui is a BROWSER UI (playwright + vitest), so tagging it against SPEC-022 would be a false claim. Decision needed: build the TUI, or mark SPEC-022 descoped in the spec header. This CORRECTS decision 4's backfill item, which assumed SPEC-022 was a tagging ga… | |
| 2026-08-15 | KG provenance edge writers missing (remainder of SPEC-008 gaps 440): REQUIRES/WORKED_ON/WORKED_ON_BY/MADE_BY/ASSIGNED_TO/DERIVED_FROM have ZERO writer call sites in src/ outside schema/enum/test files; SUPERSEDES has one writer (architecture_writer.py:1483 link_supersedes) but that class is only imported by scripts/, unreachable from production paths. Either write real producers or descope the edges from the canonical schema. | |
| 2026-08-15 | Residual borrowed-namespace spec ids (remainder of items 444/480 after e2a1e391): spec-003 still borrows the 006 namespace, spec-021 still borrows 004; 4 residual cross-spec-ambiguous ids remain per e2a1e391's own count. Renumber into their own namespaces and re-point citations by ORIGIN. (The uniqueness gate half is already filed separately.) | |
| 2026-08-16 | Prod orchkg data-quality sweep: hundreds of null-id 'claude-cli-adapter-*' Project nodes (adapter-run pollution), several LRU-prompt project subtrees, and 70 orphaned Parameters under the legacy 'orchestrata-ultimate-architecture:' slug — unreachable islands violating session-254 root-connectivity; extend purge_stray/repair_orphan tooling, ontology-first per the GIGO ruling | Found 2026-08-16 while fixing the multi-label cardinality collapse; evidence: tool-results/bi2t1mqe7.txt |
| 2026-08-21 | intercept_bash matches its write patterns inside QUOTED STRINGS and promises a scratch escape three classes do not honour | Two separate defects, both measured today. (1) A grep pattern and a --notes string were blocked because they CONTAINED a write-pattern literal. (2) The block message says 'say so and re-run' but the /tmp/claude- affordance was only impleme… |
| 2026-08-21 | symbols prints file paths but source requires root-relative qnames | symbols emits src/orchestrata_tools/test_analyzer/matcher.py:143; source needs test_analyzer.matcher.TestMatcher._compute_matches. The obvious full-package translation FAILS, which pushes callers back to Read and violates the AST-first man… |
| 2026-08-21 | Make intercept_bash quote-aware so a write pattern inside a quoted string or heredoc stops matching | Eight blocks this session were argument TEXT, not writes: a grep pattern, two --notes strings, two commit messages. The quote-scanning logic already exists in test_run_context._segments and can be reused. Keep matching inside sh -c/eval, w… |
| 2026-08-21 | Articles VIII/IX/X are bare 'true.' and their detectors (resource_efficient/2, respects_dignity/2, protects_rights/2) have no deny clause at all | Articles IV/V/VII/XI were repaired + human-ratified 2026-07-24 to be deny-capable; VIII/IX/X were left unconditional. Wiring their detectors as-is would be theatre — each needs a deny condition, the shape destructive_change/1 gives Article… |
| 2026-08-21 | PrologBridge.GOVERNANCE_PREDICATES is a 30+ entry routing table that is the ONLY mention of most governance predicates | can_hire_volk, can_fire_volk, session_valid, intent_constraints, priority_allocation, resource_allocation_fair, escalation_path_valid appear nowhere in Python except this module-prefix table. A routing-table entry is a declaration, not a c… |
| 2026-08-21 | 45% of suite cost is module setup, not tests: per-test medians sum to 3029s but the per-module cache sums to 5530s. Attribute and reduce module-level import/fixture cost (fixed per-pytest-process floor measured at ~1.5s). | |
| 2026-08-23 | Service containers still receive job variables via 'incus launch -c environment.*', which persists them into instance config | Not covered by e87088e3, which fixed the job container's exec path only. container_launch_env_args in deploy/gitlab-runner/incus-executor/_common.sh. Exposure is narrower (launch argv is brief; instance config is root/incus-admin readable,… |
| 2026-08-26 | ship's deploy phase does unconditional full-bootstrap work that does not scale with the diff — the same defect class the affected-test escalation fix just removed from the gate | Measured 2026-08-26 on commit 66f18509d, which touched only context.json, context.md and context.history.md. Gate: 3s, 1 module, 5 tests — correctly bounded. Deploy: roughly 10 min, all of it unconditional — kg_schema.apply, sync_ast_to_gr… |
| 2026-08-27 | Capability integration: only the subagent-brief arm is left — gen_brief_pack.py serves AST refs/who-imports but never code_intel, trace_intel or source, so delegated agents get structure without blast radius, traceability or exact bodies. | RE-SIZED 2026-08-27, dropped P1 to P2 because most arms have landed. DONE: the ast-toolkit and test-loop skills both exist under .claude/skills; CLAUDE.md carries the 'Deterministic-first for code intelligence' and 'History is a query too'… |
P3 — 24 open
Raw labels: P3 21, low 3.
| Opened | Item | Notes |
|---|---|---|
| 2026-07-05 | SPEC-103 TST-103-004: run the on-demand real-DeepSeek refactor integration check manually (project doctrine forbids skipped tests, so it is not in the automated suite). Confirms a real 'add type hints' refactor edits in place + run_check passes. | Manual/on-demand; needs a DeepSeek API key + network. |
| 2026-07-05 | DECISION: does the strict no-skip doctrine allow (a) os.geteuid()==0 root-bypass guards for file-permission ENFORCEMENT tests (5 sites), and (b) the conftest gRPC-kernel availability guard / should the gRPC kernel always auto-start like Redis/Neo4j? Resolve before mass-touching these. | Surfaced by the purity test-review. |
| 2026-07-06 | D10 execution addendum (W5.3): fold into the SPEC-028 sentinel+model-table task — get_volk_model(config.py:272) lacks the reasoning:bool param REQ-028-027 expects; reasoning tier lives in separate escalate_to_reasoning(config.py:324) via call_reasoner(client.py:663). Spec rewrite must document the actual two-function contract or the param gets added | |
| 2026-07-08 | Research cloud-init + Terraform for provisioning the stack on cloud/VM infra (vs local Incus): providers, IaC layout, secrets, security groups. Output: recommendation + skeleton. | |
| 2026-07-12 | INVESTIGATE orphan container 'gatekeeper-neo4j' (STOPPED) — not part of the operational Neo4j cluster (neo4j-db + node-2/3/4); determine if decommissionable. | |
| 2026-07-12 | Tool hardening batch: uv add mcp + official ClientSession swap (071); OAuth2 token cache + DNS-rebinding guard (067); Redis-persisted task store + audit (069); persistent LSP session backend (065) | |
| 2026-07-12 | tests/gateway/test_handlers_behavioral.py: T10 — Redis/Neo4j operations without test_id fixture scoping (pre-existing, file-wide fixture refactor) | |
| 2026-07-12 | Matcher gap: TestMatcher.find_untested_methods cannot map action-dispatch tools (execute(action=...) switch) to their tests — 27 false 'untested' methods from the tool wave; teach it action-dispatch, then re-tighten test_orchestrata_tools ratchet 80→~40 | |
| 2026-07-18 | Capture from-import asnames in orchestrata_ast (from x import y as z loses z): needs names entry shape decision (str vs dict) — same model-reshape territory as the end_line/complexity dataclass promotion | session 242; deliberate deferral, model shape ripples to schema+loader+consumers |
| 2026-07-18 | Neo4jSyncer local name index collides on same-bare-name methods across classes in one module (_build_local_name_index overwrites) — pre-existing resolution imprecision | documented limitation, session 242 |
| 2026-07-18 | Orphan cascade residue in KG: 179 Specification + 906 Task nodes survive DETACH DELETE of parents — decide reclamation policy + extend sweeper | found by pollution-sweep agent session 242 |
| 2026-07-21 | Sweep 14 leaked test RequirementItem nodes (proj__TEST_* ids) from primary Neo4j — check sweep_if_polluted covers RequirementItem label | |
| 2026-07-26 | ~2,677 CXPPackets attributable only to test-pollution/HUMAN agent strings after Thread backfill | Found during thread-ontology backfill design/build (plans/thread-ontology-design.md S10d/§3 residue). After backfill_thread_links.py runs, these packets get IN_THREAD (not isolated) but no BY_VOLK/TO_VOLK: HUMAN (correct, not a Volk), TEST… |
| 2026-08-10 | SPEC-017 has 40 of 70 requirements still UNLINKED after the 2026-08-10 backfill, and they are UNIMPLEMENTED, not untagged. Measured against vizint-ui/gadgets/calendar/: no auto-scroll to current time (008), no event detail popover at all (009-012 — clicking emits calendar:event.selected on the bus and nothing renders), no 5-min auto-refresh / manual refresh button / footer sync timestamp (013-015), no Google OAuth popup flow (016-019 — GoogleCalendarProvider.authUrl builds the URL but nothing opens it and GOOGLE_TOKEN_KEY is only ever removed), no multi-account or per-calendar toggles (026-02… | |
| 2026-08-15 | SPEC-110 gaps surfaced by the evidence-based checklist restoration: REQ-110-025/027 observers exist standalone but workspace.run()/commit() never compose them (built-not-wired, RUL-023); REQ-110-031/032 analysis passes (BlastRadius/BreakingChange/Complexity/Coverage/Abstraction/Coupling/DeadCode) do not exist; REQ-110-033..035 40-check review engine unbuilt and textually stale post-ctok — spec amendment or build decision needed | |
| 2026-08-15 | intercept_bash.py delete guard has no authorization seam: the categorical delete-block regex cannot be cleared even by explicit user authorization (four grants during backlog 492), forcing script-wrapping workarounds; it also fires on prose mentioning delete commands in CLI arguments (blocked this very add-work note on first try). Add a narrow allowlist seam (path-prefix allowlist checked against resolved delete targets) in canonical claude/hooks/intercept_bash.py plus tests/claude/test_intercept_guards.py coverage; DECISION: what form of user authorization clears a delete guard | |
| 2026-08-15 | DECISION (surfaced by the 513 isolation work): test_kg_schema::test_check_against_real_shared_graph_conforms depends on the canonical Thread.id/Session.session_id/Project.slug unique constraints ALREADY existing on each per-worker DB — today that precondition is satisfied only as a side effect of test_backfill_thread_links' scoped DDL, so a genuinely fresh worker DB could fail it. Fork: (a) bootstrap canonical constraints at infra-provisioning time (deploy/orchestrata-test provisioner applies kg_schema DDL to all orchkg_w* DBs), or (b) let the conformance test self-apply a scoped subset — whi… | |
| 2026-08-16 | Supervised full regeneration of tests/generated_* under the fixed smoke template (asyncio.wait_for bound + serve-substring exclusion) — 268 files; regen per package, review diffs, run each regenerated package targeted before commit | |
| 2026-08-16 | AST toolkit gen-stub subcommand (item 446 #11, split from completed 523): emit .pyi stubs from _func_signature/_class_signature, complementing 'untyped'. Design input settled by the 2026-08-16 builder pass: needs (a) naming convention <module>.pyi beside or under --output dir, (b) emission format = class/def signature lines with '...' bodies reusing _func_signature/_class_signature exactly as 'interface' does, (c) dry-run default + --apply like other generators, (d) docs/ast-toolkit.md + skill entry. Only source: plans/ast-codegen-audit.md:27 (M-sized). Brief a builder with those four settled… | Builder a578bd stopped correctly per brief: gen-stub absent from docs/ast-toolkit.md and the skill file. |
| 2026-08-16 | GatewayConfig.heartbeat_timeout is a DEAD config field (default 90, unused everywhere) now that FR-014 uses heartbeat_interval+heartbeat_max_misses — decide repurpose/deprecate/remove; three test files assert its literal default | |
| 2026-08-16 | Rename _Fake*-prefixed duck-typed test helpers (tests/gateway/test_protocol_ws_integration.py _FakeRPCHandler/_FakeConnections + same idiom in test_protocol.py/test_pubsub.py) — they are real minimal implementations, not doubles, but the Fake prefix collides with the no-doubles vocabulary and pyright flags their assignment sites; rename to _Minimal*/_Recording* and type the seams | |
| 2026-08-21 | Delete the 7 duplicate unregistered hooks (~2100 lines) after code_intel.py unused confirms | block_file_tools, read_throttle, session_context_hook, enforcement_hook, instruction_enforcer_hook, log_operation, sync_context_md. Two of them read CLAUDE.constraints.json, which does not exist on this machine. NEEDS USER APPROVAL. |
| 2026-08-21 | Give session_cli --priority a canonical choices= set and normalize the legacy vocabularies | 542 items carry 7 spellings plus 162 unset because the field validates nothing. Normalize critical->P0, high->P1, medium->P2, low->P3 rather than rejecting, so existing callers keep working while the register converges. |
| 2026-08-26 | AST-toolkit guard is over-broad: it refuses any Bash command whose TEXT contains an indexed .py path, including legitimate EXECUTION and plain echo, not just text-scraping | Hit repeatedly this session. Running the hook to observe its live output was refused, and so was an echo naming the file, because the matcher reads the raw command string rather than distinguishing a reader (cat/grep/sed/head/tail) from an… |
P4 — 2 open
Raw labels: P4 2.
| Opened | Item | Notes |
|---|---|---|
| 2026-07-05 | Minor: claude_code_driver.py AND claude_api_driver.py both read the SAME env override ORCHESTRATA_CLAUDE_TIMEOUT_SECONDS (defaults 900 vs 1200 respectively). Setting it collapses both to one value, losing their distinct defaults. Rename claude_api's to ORCHESTRATA_CLAUDE_API_TIMEOUT_SECONDS for independence. (aider=ORCHESTRATA_AIDER_TIMEOUT_SECONDS, qwen=ORCHESTRATA_QWEN_TIMEOUT_SECONDS are already distinct.) | |
| 2026-08-26 | Two of my own process probes silently reported the wrong answer across a privilege or naming boundary | kill -0 PID on another user's process fails EPERM, not ESRCH, so a wait loop reported CI_DONE while CI was alive. pgrep -f 'deploy/ship[.]sh' missed the real process name (bash /usr/local/bin/ship) and reported SHIP_EXITED mid-run. Both ar… |
Unprioritised — 51 open
Raw labels: none 51.
| Opened | Item | Notes |
|---|---|---|
| 2026-07-06 | Generate specs/099-*/requirements.md (REQ-099-NNN from spec.md) — SPEC-099 @traces are dangling (no requirements.md); apply the same factory convention used for SPEC-072 | |
| 2026-07-06 | gen-skeleton v2: (1) FIX bug — emit @property with self._x backing when the contract marks a member as property, not 'self.x = x' into a base-class @property (caused AttributeError in ToolSearchTool.metadata, worked around by the builder); (2) deferred TODOs — multi-module routing, derive dataclass fields from spec, full Command-boilerplate, test-stub emission from testPlan | |
| 2026-07-06 | [P2] JS traceability ruling (W5.3): specs 017+022 are vizint-ui JS gadgets — check-traces scans Python only, so ~16 implemented REQs show untraced forever. Ruling: add lightweight JS trace-comment convention (// @traces(spec=..., reqs=[...])) + extend check-traces to scan vizint-ui/*.js, apply the 16 mappings from plans/evidence/w5-tail-classification.md; alternatively descope with spec-header notes. Also file real UI gaps: command palette (022-US-007 x4), yellow token-expiry tier (017-028), multi-account (017-026), cxp-feed identity fields, session end/archive action. [RESTORED: wrongly comp… | |
| 2026-07-06 | [P3] Dogfood F7: generated-project pyproject.toml uses the raw task sentence as the package name (invalid PEP 508) so 'uv run' fails inside every generated project — slugify the project name in the scaffold generator (codedirector scaffold / project bootstrap) | |
| 2026-07-06 | [P2] Dogfood F9: no NL-intent→work-type mapping surface — 'analysis' work type is requirements-decomposition (Cx→BA→Cp, no authored deliverable); asks for a written analysis/study must route to 'documentation' (U:Do). Wave-3/E intent-classification consolidation should map deliverable-shaped asks to the right WorkType; also BA PROJECT_TYPE classifier lacks analysis/doc types (said 'refactor' twice) | |
| 2026-07-06 | [P2] Dogfood F10: orchestrator artifact extractor wrote empty artifact-task_summary-U:Cx.md and artifact-user_stories-U:BA.md in run 3c while stage responses were 4.8K/5K chars — extractor section-format drift vs current volk prompt output formats; audit ArtifactStore extraction patterns per stage | |
| 2026-07-07 | [P2] Dogfood F16: single-provider starvation — with an explicit model pinned (deepseek-v4-pro), breaker-open leaves ZERO fallback candidates; client's empty-response retries feed the breaker, then 'No eligible provider' crashes the volk and shuts down the kernel run. Also root-cause WHY deepseek-v4-pro returns empty content on Ar's large design prompts (client already retries empties — known quirk since run 1/F3). Evidence: run-5 crash + router.route | |
| 2026-07-09 | Phase B: unify orchestrata_tools.models.ast_models with orchestrata_ast.models (two parallel dataclass models of one JSON contract) | |
| 2026-07-10 | CLIPS C1 pilot: event-stream watchdog (clipspy, .clp rules) over kernel/gateway event facts — retry storms, stage stalls, escalation loops; gated on Prolog P1 landing; Prolog stays authoritative for policy (plans/prolog-utilization-plan.md § Extension) | |
| 2026-07-13 | Reconcile governance.events (gadget-hardcoded, now real) vs governance.decisions (SPEC-014 canonical, subscribe-only) topic naming — one topic or documented alias | |
| 2026-07-15 | DECISION NEEDED (SPEC-014 ERR-011): EthicalBoundary's five detectors are fail-OPEN (broken/absent Prolog engine passes all ethical checks incl. harm) — spec wants fail-closed deny on engine-unavailable. Flipping the posture changes production behavior; user decision. Found by adversarial review 2026-07-15; comment in governance/ethical.py now states reality. | |
| 2026-07-21 | orchgraph fork: check for upstream 3.x concurrent skiplist index-build patch (our fork measured 2514ms CREATE INDEX ON :Label(id) = whole-store scan under storage access; upstream says '(almost) fully concurrent' now) | |
| 2026-07-21 | Fix kg_sync sync_traces stage: writes legacy {pid}:{relpath}::{qualname} entity ids + {pid}:REQ req ids -> silent no-op on ruling-2 graph; re-point at qualified_name matching (like scripts/sync_traces_to_neo4j.py) or retire the stage | |
| 2026-07-21 | Decide fate of 228 legacy bare-id Requirement nodes (pre-canonical writer; canonical corpus now on project-qualified Requirement/RequirementItem) | |
| 2026-07-21 | BDD plan Phase 3 (plans/bdd-runtime-tracing-plan.md): EXECUTED grade in generate_rtm_evidence.py; provenance static|runtime|both on sync_traces_to_neo4j.py TRACES_TO; add_traces_from_evidence.py --runtime for RUNTIME-CANDIDATE writes | |
| 2026-07-21 | BDD plan Phase 4 + decisions D1-D5 (plans/bdd-runtime-tracing-plan.md §User decisions): BLOCKED on user — RTM semantics, citation-expansion funding, CONTRADICTED policy, cadence/ratchet, @traces-on-tests canon | |
| 2026-07-21 | W8 legacy Requirement migration (mapped): 49 retired-scheme nodes (REQ-NNN-USx-yyy) tagged legacy_scheme=true carry 51 inbound edges (40 UserStory HAS_REQUIREMENT, 5 ADR JUSTIFIED_BY, 5 TRACES_TO, 1 DEFINES_REQUIREMENT); build old->new id mapper joining spec+story number to canonical Requirement/RequirementItem, re-point edges, then delete. 33 edge-free ones deleted 2026-07-21. Trigger: next KG-hygiene builder slot (NOW-QUEUED in plans/master-execution-plan.md W8) | |
| 2026-07-21 | AmbiguityResolver wire-or-delete (REQ-003-US-003-012): class has zero production constructors; its Prolog tier queries undeclared resolve_ambiguity/3 (whitelisted in check_prolog_boundary.py with this item as the expiry trigger). Decide: wire into intent pipeline with real resolve_ambiguity rules, or delete the class + generated tests. | |
| 2026-07-21 | AdvancedEscalationHandler/MultiHopEscalationManager have zero production callers (P2 finding) — wire into escalation flow or fold into G-D4; also PolicyEvaluator._execute_routing_query timeout/exception branches still hardcode ALLOW (~556-565) — P3/P6 candidate (P2 fixed only the two no-result branches per brief). | |
| 2026-07-21 | Rebuild orchgraph release binary on an older-glibc base (debian 12): current tarball needs GLIBC_2.43 and cannot run on Ubuntu 24.04 (glibc 2.39) — confirmed live in release verification | |
| 2026-07-21 | install-infra.sh mix-and-match backends (REQ-108-013): per-service incus/docker selection via per-service .env derivation | |
| 2026-07-21 | Make the three append-only Neo4j event writers test-aware (gateway audit GatewayAuditEvent, session writer Session, CXP auditor CXPPacket): carry test_id (or MERGE on real identity) so suite runs stop accreting untagged events — graph grew to 818K nodes, 92.5% these three labels (260K Session vs ~251 real sessions). After the writers land: user-ratified retention rule + one-time purge of the existing 757K orphaned events, then re-measure suite wall-clock | |
| 2026-07-21 | httptools FT rebuild (Cython, build_ft_grpcio.py recipe) to restore uvicorn fast HTTP parsing and drop the h11 pins | |
| 2026-07-21 | tokenizers FT build (Rust/PyO3) or upstream watch — remove GIL_UNSAFE_MODULES quarantine for test_embedders.py when cp314t wheels exist | |
| 2026-07-21 | Memgraph HA: replica registered sync_mode=sync (design says ASYNC per shared-cluster notes) — every commit waits for replica ack; decide+restore ASYNC via coordinator, then re-benchmark write path on quiet host (post index-drop baseline pending) | |
| 2026-07-21 | test_test_executor line 22: pre-existing SKIP_SERVICE_START env passed to child test subprocesses violates the never-skip-infra ruling; remove it and retune the short-timeout rerun cases | |
| 2026-07-27 | Resolution merge-key drift (hub-link audit D3): canonical_schema.py:516 declares resolution_id as the Resolution merge key but orchestrator/graph_audit.py keys on a fresh uuid4() id — two writers, two identities, one label. Reconcile writers to the canonical key + migration for existing nodes | |
| 2026-07-27 | Enforce the KG connectivity invariant continuously (post hub-link repair): wire check_kg_connectivity.py into health_check.py as a hard gate at threshold 0 unreachable, and any orphan whose label has NO repair rule in the hub-link ruleset triggers a loud NEW-LABEL escalation instead of silent growth (758->8447 happened because the checker existed but nothing gated on it) | |
| 2026-07-27 | rtm/ directory disposition: 311 neo4j hits, Docker-based April test harness, zero external callers (P7-verified vestigial) — decide delete vs archive; recommend DELETE per garbage rule | |
| 2026-07-27 | Out-of-sweep neo4j env-var leftovers: vizint-ui/tests/helpers/real-gateway.js (NEO4J_URI/HOST/USERNAME) + claude-env/install-infra.sh (NEO4J_URI_GW1..7) — verify against live gateway env contract (KG_*), rename or delete dead refs | |
| 2026-07-27 | validate_ci.py hardcodes docker/docker-compose.yml must reference ${NEO4J_URI} (lines 109,123,128-129) and the compose file still uses it — decide compose-file vocabulary + update validator + test_validate_ci.py:403 as one cluster (P9-surfaced follow-up) | |
| 2026-07-27 | Fix every test that performs a git write against the live repo instead of tmp_path (audit in flight) | |
| 2026-07-31 | cli_client._rpc_call: unbounded knowledge queries can exceed websockets' default frame-size limit — decide max_size= bump on websockets.connect (builder finding, feat/orchestrata-cli) | |
| 2026-08-05 | Wire vizint-ui vitest into a gate: the real-gateway class (13 files) was silently red for days because no gate runs vitest (Python-only suite). Options: (a) run_tests.py post-phase step, (b) health_check entry, (c) pre-push hook addition. Decision needed on gate placement + time budget (~2-4 min); until wired, vizint regressions stay invisible | |
| 2026-08-05 | Concierge conversation-abandonment timeout (SPEC-032 design decision): an unanswered clarifying-question thread leaves U:Cx busy/in_progress until process restart (measured: stuck 1.5h on a vitest thread); needs idle-TTL or explicit conversation close | |
| 2026-08-05 | Post-epic deploy + acceptance: redeploy app-container kernel+gateway (deploy/orchestrata-test/) after SET-2 lands; acceptance = paired chat probes 2/2 delivered to their own gateways + cxp.send ack <1s (design doc deploy note) | |
| 2026-08-05 | canonical_schema drift scan: bound collect(properties(n)) memory on huge drift (currently materializes all matches before [0..3] slice) — re-reviewer residual, needs a single-snapshot bounded-sample query form | |
| 2026-08-05 | [P1] F-4 grace does not bound shutdown: cancelled rounds keep executing in asyncio.to_thread (submit_intent uncancellable, 11-21s measured); intent_failed sunk for work that then completes + memory unbound under a live round; needs cooperative cancel flag on PipelineRunner or documented grace semantics + shorter default | |
| 2026-08-05 | [P1] Drain-cleanup deadlock (found by F-5 abandon-branch test attempt): a background round that swallows its first CancelledError and outlives cancellation delivery deadlocks the test process (3x repro, 90s+ hang) — something in Postman queues / memory-bind finally / pipeline cleanup does not tolerate abandoned rounds. Investigate with the F-4 cooperative-cancel work; NOTE comment marks the removed test site in test_kernel_handler_ack_only.py | |
| 2026-08-05 | [P3] ReplyRouter leaked-lease immortality (reviewer NOTE 8): both sweep passes skip active_drains>0, so a drain lease leaked by an abandoned/never-finalized async generator makes its key immortal — same growth class F7 closes. Residual risk only (finally covers normal/break/GeneratorExit; DirectCXPServer acloses explicitly). Candidate: lease age ceiling or weakref liveness check. | |
| 2026-08-05 | DECISION (Mohamed): prod/test port collision — prod kernel wildcard-binds 0.0.0.0:50053 on the host while the test fleet uses the same port; any unprofiled client reaches PROD. Options: per-environment ports, prod loopback bind (breaks remote clients), or probe-side subnet assertion. | |
| 2026-08-07 | worktree_tools EnterWorktreeTool cites 36 reqs (only shotgun ERROR, >25) | src/orchestrata_ultimate/tools/worktree_tools.py:401. The other 12 shotgun findings are warnings in the 11-25 band. Over-citation defeats the trace join: a 36-req decorator makes all 36 requirements look implemented by this one class. Spli… |
| 2026-08-07 | cxp WS transport (ws_client/ws_server) is unwired — 0 import sites in src | Verified NOT caused by the grpc retirement: at HEAD ws_server.py was already the only src file naming WSServer, and neither deleted grpc module referenced them. Only tests exercise them. cxp/transport.py's cxp_transport() now knows exactly… |
| 2026-08-07 | SPEC-110 §15 observability: all FIVE codemod observers are unwired — nothing emits CodemodEvent | MetricsObserver, TracingObserver, DebugPanelObserver, GraphWriterObserver and the fifth all measure 1 def / 1 import / 0 USES. CodemodEvent is constructed ONLY inside observability/ itself (tracing.py:64) — grep for 'CodemodEvent(' outside… |
| 2026-08-08 | R1 (largest effect): add a speech-act dimension above WorkType — 32% of real user turns are status queries / process control / display requests / policy statements and have NO correct WorkType, so the 38.2% ceiling is a taxonomy artifact, not a parser limit | |
| 2026-08-08 | R2: freeze the 76-turn corpus as a regression floor only; mine 300-500 turns and get labels adjudicated by a party that did not write the rewrites (n=76 gives +/-10.2 pts; ~12 variants already scored against it, expected spurious gain 8-11 pts) | |
| 2026-08-08 | R3: calibrate the 0.9 / 0.5-0.7 tier confidences and the 0.34 gate (Platt scaling + cost-weighted Youden's J); FIX that 0.34 sits below the keyword tier's own 0.5 floor, so the gate cannot reject anything that tier emits | |
| 2026-08-08 | R4: raise the dispatch bar (dual-tier agreement + >=0.5 confidence + parse preview) and gate every irreversible volk tool call independently of upstream intent confidence — prompt-level rules are advisory, not enforceable | |
| 2026-08-19 | [P1] Constitutional evidence predicates never populated in production — atom supply blocks governance rule induction | Measured: pii_data, bias_report, audit_trail_exists have ZERO refs in src/ AND tests/. opaque_operation, active_plan, plan_step, human_issue_raised have ZERO refs in src/ and exist only in tests — tested-but-unreachable, AGENTS.md Hard Rul… |
| 2026-08-19 | [P2] Conversation-aware context injection: Prolog decides WHAT CLASS, existing Python fetches and packs | Two disjoint worlds today: Claude Code hooks (31 hooks, structural Prolog only, conversation awareness = a 5-min recency dump plus a 4-domain regex) and the kernel/volk pipeline (full SPEC-106 context_pack + kg_relevance.pl relevance-tier… |
| 2026-08-19 | [P1] NEXT PHASE: migrate scripts/ into orchestrata modules — code-related into codemod, rest into their owning module; scripts become thin CLI shims only | User direction 2026-08-19. Measured scope: 167 scripts, 82,386 LOC total. Distribution: 13 already <80 LOC (thin-shim pattern already achieved, e.g. parse_spec_requirements.py is a 36-line argparse shim with ZERO business logic over opensp… |
Recently completed (last 25)
| Done | Priority | Item |
|---|---|---|
| 2026-08-27 | P1 | 40% of spec requirements (2,224 of 5,561) have ZERO @traces coverage — and orphans are getting WORSE, not better: 4,711 traced symbols are unreachable from any entrypoint. |
| 2026-08-27 | P1 | 44% of spec requirements (2,428 of 5,489) have ZERO @traces coverage |
| 2026-08-27 | P1 | Capability-integration pass (post-T1-verify): wire code_intel/trace_intel/source into subagent briefs, ast-toolkit + test-loop skills, CLAUDE.md/LEVEL0 deterministic-first rule, advisory drift gates, project memory |
| 2026-08-27 | P1 | Phase 3: comprehensive code-pattern census + JSON-spec-driven generators, Haiku-extracted + verify-gated (plans/ast-codegen-audit.md). (1) Census ALL deterministic patterns across every package (extend audit w0kuij9g6 to full coverage). (2) One schema-validated JSON spec per pattern under specs/codegen/ (enums.json, adapters.json, traces.json, serde.json, exceptions.json, packets.json, volks.json...). (3) Deterministic generators consuming each spec + a --check drift gate. (4) Haiku does the extraction (code->JSON spec) — its sweet spot. (5) TEST = round-trip: Haiku spec -> generator -> must… |
| 2026-08-27 | P1 | Pyright-debt elimination program (user directive session 241): full-tree inventory -> classify into fix families -> automated codemods for recurring mechanical patterns (redis-keys cast sweep etc.) -> bounded structural fixes (mixin host Protocols, _require_ws, ast.AST narrowing) -> execute plans/provider-protocol-reconciliation.md (providers scope, settled) -> core-wide interfaces-vs-protocols migration (#28, canonical=protocols) -> drive pyright_ratchet baseline to 0 and make CI strict. |
| 2026-08-27 | P3 | Optional: admin RPC gateway.rotate_token wired to StaticTokenAuthenticator.rotate() — FR-006 rotation-without-restart is already satisfied via the Redis-stored token; this would add an authenticated management surface |
| 2026-08-27 | Unprioritised | USER DECISION + deadline: app-container Claude CLI token expires ~15:36 2026-08-05; durable fix = run deploy/orchestrata-test/claude-cred-mirror.py (refresh-token-stripped mirror) or claude setup-token in the container |
| 2026-08-27 | Unprioritised | USER DECISION: install the Claude credential mirror (deploy/orchestrata-test/claude-cred-mirror.py + a systemd --user path unit watching ~/.claude/.credentials.json) so the app-container kernel's access-token copy stays fresh — classifier blocked autonomous install of credential-sync automation; without it the container token expires (next ~2026-08-05 15:36) and kernel LLM calls fail with auth errors until re-mirrored (one-shot: python3 deploy/orchestrata-test/claude-cred-mirror.py). Alternative: claude setup-token in the container |
| 2026-08-27 | P1 | ROTATE: DEEPSEEK_API_KEY and OPENROUTER_API_KEY were readable via host ps on every CI job until e87088e3 |
| 2026-08-27 | Unprioritised | [P1] PostToolUse auto-fixer strips STILL-USED imports from a stale file view — broke 4 agents' work today |
| 2026-08-27 | Unprioritised | [P1] AST toolkit 'refs' has an ALIAS BLIND SPOT that invalidates every refs-based dead-code conclusion |
| 2026-08-27 | P1 | A recorded human override is inert beyond Article I — human_override_active/3 is asserted by production and read by NOTHING |
| 2026-08-27 | P1 | plans/analysis/ toolchain + plans/system-analysis-master.md (245KB) + 4 plan docs are UNTRACKED — a full analysis pipeline at risk of loss |
| 2026-08-16 | P1 | Gateway hardening, 4 SEPARATE sub-items (re-audited 2026-08-09; the old bundled item's 'subscription filters are dead code gateway-wide' premise was FALSE — evaluate_filters is called from PubSubManager.get_matching_connections:259, used in production by handlers/gateway.py:284 and protocol.py:135, covered by tests/gateway/test_subscription_filters.py). (1) AUTH: gateway/auth.py TokenAuthenticator does JWT only; no static pre-shared-token path and no HMAC anywhere in gateway/* (SPEC-014 FR-006/FR-007 unimplemented). (2) METRICS: http_surface.py:67 metrics() just calls generate_latest() on the… |
| 2026-08-16 | P3 | AST toolkit generator gaps (remainder of item 446): #8 'interface --kind abc' flag, #9 configurable --import-prefix on generators, #11 gen-stub subcommand — all confirmed absent from the CLI 2026-08-15. (#2 ParamInfo fields verified DONE; #4 except-parens is PEP 758 valid, not a defect.) |
| 2026-08-16 | P1 | Volk pipeline produces NO retrievable work product — the review artifact is discarded |
| 2026-08-16 | P2 | Two orphaned auto-generated RTM dumps now carry DEAD requirement ids: plans/rtm-traced-only.md (header 'Auto-Generated', 15377 traced reqs, 58 specs) and plans/requirements-traceability-matrix-detailed.md (header 'Generated: 2026-07-06T20:41:42', 4629 reqs). Measured 2026-08-10: NO script in scripts/ or src/ writes either file — grep for their names returns nothing — so they are frozen 2026-07-06 output with no regenerator. They hold 1798 occurrences of the SPEC-001 story-numbered ids (REQ-002-001 etc.) that the 001-kernel renumber retired, so every one of those rows now points at an id no sp… |
| 2026-08-16 | P2 | check_req_format.py lacks the cross-spec uniqueness assertion over definitional files (the one remaining half of the requirement-id grammar items 480/481, whose renumbering halves shipped in e2a1e391 + 94ca2fbe): no dedup/collision guard exists in the gate, so a future spec re-introducing an already-claimed REQ id would pass. Add an assertion that every REQ id is defined by exactly one spec's definitional files (requirements.md/spec.md/tasks.md/design.md). |
| 2026-08-16 | P2 | RUL-021 gate gap: check_worktree_envs.py did not flag the agent worktree (.claude/worktrees/agent-) running with a SYMLINKED shared .venv — the exact configuration RUL-021 prohibits and the one that poisoned ship bonr4xuj5's gate (shared editable install re-pointed by bare uv run in the worktree). Extend the gate to cover .claude/worktrees/ checkouts: a worktree whose .venv is a symlink to another checkout's env FAILS. Companion mechanical fail-fast already landed in tests/conftest.py (venv provenance guard). |
| 2026-08-16 | P1 | [413 ruling] Subnet renumbering migration: move env fleets to the env-octet scheme (prod=. .1., test=..2., dev gets its own). Scope: Incus network definitions + container IPs (prod orchgraph coordinators 10.92.53.160/.109/.198, data .128/.123, redis .10; test fleet 10.93.53.x), Raft coordinator re-registration (ADD COORDINATOR/REGISTER INSTANCE carry literal IPs), env/{dev,test,prod}.env, infra/terraform, deploy docs, systemd probe units, conftest prod-subnet guard, memories+wiki. REQUIRES design doc first (RUL-022) with cutover order (test fleet first, prod cluster last with replica re… |
| 2026-08-16 | P2 | [413 phase-4] terraform state reconciliation: prometheus-metrics container exists live but was never imported into infra/terraform state (plan says 'will be created' — an apply would name-collide; use import.sh / terraform import instead), and prolog x3 + redis show benign cloud-init user-data drift after the subnet sweep (inert for running containers, applies on recreation). Bring plan to zero-diff: import prometheus, then verify plan shows 'No changes'. |
| 2026-08-16 | Unprioritised | Session raw-id divergence: a session resolvable only via raw id in session.get is MERGEd/closed under the qualified key by handle_close — get and close can act on different nodes (pre-existing on close side; widened by the round-trip fix) |
| 2026-08-16 | Unprioritised | [P3] Tighten PluginVolkRegistryProtocol.get_volk return (reviewer NOTE 11): Any|None leaves rv.handler unchecked at pipeline.py's projection site; add a RegisteredVolkProtocol carrying handler (+capabilities) and return that instead. |
| 2026-08-16 | Unprioritised | [P2] F-6 kernel terminals (intent_failed/intent_no_reply) carry assistant_status only in payload; gateway cxp.status surfacing (handlers/cxp.py:347) reads top-level only — polling callers cannot detect kernel terminals; set both like _build_unavailable_reply |
| 2026-08-16 | Unprioritised | Playwright two-phase config: phase-1 failure skips all reply-dependent specs (skipped-as-green); revisit dependencies after app-container redeploy |
Recent sessions (last 15)
| Seq | Date | Model | Length | Purpose |
|---|---|---|---|---|
| 271 | 2026-10-18 | Claude Opus 4.8 | 13h 7m | Spec-gap remediation: verify implementation against all specs 000-105; close real gaps |
| 270 | 2026-09-09 | Claude Opus 4.8 | 2h 35m | Remediation workflow Phase 0: unblock & hygiene (lint/format, REQ-000-004 checker fix, test-review ERROR sweep, deploy-script minors) |
| 269 | 2026-08-26 | Claude Opus 5 (1M context) | 21h 36m | test-run-context hook: a foreign CI run was counted as this checkout's own authoritative run, failing a ship |
| 268 | 2026-08-25 | Claude Opus 4.8 | 0h 41m | RTM traceability swarm: add missing @traces/docstring citations across all test modules so rtm-evidence reflects actual test coverage |
| 267 | 2026-08-21 | Claude Opus 5 | 9h 30m | P1 atomic generated-artifact writes: close the truncate-under-mmap SIGBUS class, plus the matcher/guard/JSON-channel defects found while shipping |