103 Agent Concurrent Processing Report

Lingtai-AI parallel triage of all open Issues · one daemon per issue · 2026-08-09 (Jason Telegram 2194 task)
Jason 2194 103 / 103 proposals complete 50 PR · 14 CLOSE · 39 COMMENT 23 issues closed Interactive Timeline
103/103
Proposal completion rate
50
PR actions
14
CLOSE actions
39
COMMENT actions
23
Closed (14+6+3)
260M
Subagent input tokens

1. Task Background: Jason 2194 Instructions

Jason (Telegram main:6859932159:2194) instructed: for the Lingtai-AI/lingtai (37) and Lingtai-AI/lingtai-kernel (66) repositories, run all open issues (103 total) with one daemon emanation per issue, all in parallel, producing for each issue a proposal for one of three actions: PR / CLOSE / COMMENT; when an issue is small with clear boundaries and can be correctly implemented and tested locally, use deepseek (the current default model) to write the PR directly; Fable audits the resulting PRs at a cadence of 5 PRs per batch.

2. Completion Status and Action Distribution

Final verification: all 103 / 103 issue directories have proposal.md on disk (37 lingtai + 66 lingtai-kernel); classification summary below (sources: PROPOSAL_INDEX.md / PR_CLASSIFICATION.md):

ActionCountDescription
PR50Each PR maps one-to-one to an issue; includes 4 lingtai repo PRs (#821–#824) and 46 lingtai-kernel PRs (#1253–#1299); #1269/#1279/#1283/#1298 are cross-repo PRs “filed on lingtai, implemented in kernel”.
COMMENT3917 kernel + 22 lingtai; mostly wrong-repo filings (route-to-kernel), owner decisions needed, already covered by an active lane (overlap-tracker), or fixed awaiting confirmation (fixed-confirm).
CLOSE147 kernel + 7 lingtai; all are “already fixed on main / superseded / owner adjudicated”.

2.1 50 PR Proposals (grouped by 11 theme buckets)

BucketPRIssueOne-line topic
1 · AED/recovery/lifecycle (10)#1270kernel-713AED zero-progress compaction caused a zombie state (11 days / 1,458 overflows / 34.9M tokens); adds a zero-progress guard.
1 · AED/recovery/lifecycle (10)#1293kernel-653Overflow recovery permanently deletes history on terminal-state failure; adds a prompt / no-delete guard.
1 · AED/recovery/lifecycle (10)#1295kernel-655AED loop error handling for _save_chat_history/_run_inquiry is asymmetric; wraps the turn tail.
1 · AED/recovery/lifecycle (10)#1259kernel-738llm_utils watchdog misjudges worker TimeoutError as “future not done” → false alarm + log storm.
1 · AED/recovery/lifecycle (10)#1294kernel-660Heartbeat loop lacks a top-level exception guard; transient I/O errors silently kill live threads (split-brain).
1 · AED/recovery/lifecycle (10)#1291kernel-730kernel_version nudge synchronously fetches PyPI/GitHub, blocking the 1s heartbeat past the liveness threshold.
1 · AED/recovery/lifecycle (10)#1262kernel-661_stop teardown is not robust; unwrapped steps can permanently deadlock .agent.lock.
1 · AED/recovery/lifecycle (10)#1299kernel-593LLM 429 has no backoff / Retry-After retry, 400 retried as-is; transient-error classification + backoff.
1 · AED/recovery/lifecycle (10)#1264kernel-1013Stateless Responses replay can overflow after /clear — context estimation misses metadata.
1 · AED/recovery/lifecycle (10)#1269lingtai-624 → kernelConcurrent refresh spawns duplicate relaunch watchers that deadlock each other and exhaust recovery.
2 · notification sync/taskcard (4)#1253kernel-657Notification sync errors are silently swallowed by except Exception: pass; adds observability.
2 · notification sync/taskcard (4)#1287kernel-659_sync_notifications TOCTOU race — missing _system_notification_lock between the run loop and heartbeat.
2 · notification sync/taskcard (4)#1278kernel-742Agent and refresh watcher race reading/writing .notification/system.json across processes.
2 · notification sync/taskcard (4)#1273kernel-987Telegram Task Card self-healing requires loaded-runtime drift diagnosis first.
3 · LLM adapter layer (6)#1254kernel-1238ClaudeCodeChatSession crashes with tools=None; fixes 3 contract tests.
3 · LLM adapter layer (6)#1277kernel-724_GatedSession proxy swallows attribute writes — pre_request_hook/metadata never reach the inner session.
3 · LLM adapter layer (6)#1272kernel-739get_adapter fast path iterates the adapter cache without a lock → dict changed-size race.
3 · LLM adapter layer (6)#1279lingtai-750 → kernelDetached daemon loses nested provider defaults; Responses provider is misrouted to Chat Completions.
3 · LLM adapter layer (6)#1261kernel-746SystemPromptManager.set_order() is a silent no-op — the rendering path ignores self._order.
3 · LLM adapter layer (6)#1263kernel-744Templates with literal braces plus kwargs make t() raise ValueError (format_map leak).
4 · MCP/tool family shell (3)#1292kernel-1251ToolFamily.handle() rejects whole calls because action-specific fields (e.g. file.edit's replace_all) sit at the envelope root.
4 · MCP/tool family shell (3)#1296kernel-1237Telegram send/edit rejects the model's own null values; _reasoning leaks into third-party MCP tools.
4 · MCP/tool family shell (3)#1265kernel-740HTTPMCPClient lacks the stale-session recovery and blank-error formatting that MCPClient already has.
5 · messaging plugins/filesystem mail (7)#1266kernel-715Unread counts never clear — Telegram counts the bot's own replies as unread; both plugins lack mark_read/watermark.
5 · messaging plugins/filesystem mail (7)#1271kernel-733WhatsApp ingest_webhook has no replay/dedup guard → Meta retries create duplicate inbox entries.
5 · messaging plugins/filesystem mail (7)#1258kernel-675MailService.listen() is not idempotent — a second call starts a second polling thread; the RuntimeError guard in lifecycle.py is dead code.
5 · messaging plugins/filesystem mail (7)#1280kernel-1063A corrupt outbox file crashes the polling loop; persistence sleeps automatically after recovering the corruption.
5 · messaging plugins/filesystem mail (7)#1281kernel-732The FS mail poller permanently and silently drops messages whose message.json fails to read/parse.
5 · messaging plugins/filesystem mail (7)#1286kernel-731FilesystemMailService.send() attachment failures leave orphaned partial inbox directories.
5 · messaging plugins/filesystem mail (7)#1274kernel-766FS mail _seen grows unbounded; the polling loop re-scans all history entries every 0.5s.
6 · security/redaction/token hygiene (5)#1260kernel-626Overflow artifacts store unredacted tool results in <workdir>/tmp/tool-results/ — a redaction gap.
6 · security/redaction/token hygiene (5)#1289kernel-631MCP outbound attachments/media can leak arbitrary local files (no workdir constraint).
6 · security/redaction/token hygiene (5)#1298lingtai-680 → kernelThe Telegram plugin logs unredacted Bot API tokens in httpx request URLs.
6 · security/redaction/token hygiene (5)#1283lingtai-812 → kernelTelegram Bot API tokens leak into MCP stderr and refresh event logs.
6 · security/redaction/token hygiene (5)#823lingtai-568 → lingtai PRChannel example configs are open by default, contradicting the README security statement (docs/examples only).
7 · config/schema/data format (8)#1284kernel-736schema/hydration drift: build_agent_config accepts manifest fields but validate_init reports them unknown and never type-checks.
7 · config/schema/data format (8)#1282kernel-737_check_type accepts bool for tuple-typed int fields — context_limit: true becomes a 1-token window.
7 · config/schema/data format (8)#1290kernel-725load_jsonc trailing-comma stripping corrupts string values containing ", ]"/", }".
7 · config/schema/data format (8)#1276kernel-759Hardens load_env_file/resolve_env: export prefix, quote stripping, silently missing api_key_env.
7 · config/schema/data format (8)#1256kernel-741When a preset's base_url lacks a URL scheme, check_connectivity silently probes localhost.
7 · config/schema/data format (8)#1285kernel-763Consolidates the scattered 2.0/3.0/10.0 heartbeat liveness thresholds into kernel constants.
7 · config/schema/data format (8)#1255kernel-750AgentSession.started_at format varies with the rebuild layer (ISO-8601 vs bare epoch strings).
7 · config/schema/data format (8)#1257kernel-729Retention reports treat UTC “Z” timestamps as local time; daemon ages skew by the host timezone.
8 · atomic writes/fsutil persistence (2)#1288kernel-756Completes the _fsutil migration for remaining fixed-tempname atomic writers (manifest, soul init.json, mail writes).
8 · atomic writes/fsutil persistence (2)#822lingtai-482 → lingtai PRGo TUI writes init.json/.agent.json non-atomically; config corruption risk on crash.
9 · provisioning/logging/ops (2)#1267kernel-758venv_resolve auto-provisioning installs an unpinned pip install lingtai → version skew.
9 · provisioning/logging/ops (2)#1275kernel-765File logging is dead code — setup_logging() is never called; diagnostic logs are lost.
10 · docs/manual (1)#1268kernel-344Improves discoverability of the log.sqlite query manual (docs only).
11 · TUI/portal (lingtai repo) (2)#821lingtai-487 → lingtai PRTUI agent startup leaks the parent-side agent.log file descriptor.
11 · TUI/portal (lingtai repo) (2)#824lingtai-671 → lingtai PRCurated stdio MCP loses parent-agent variables; the 10s startup watchdog misreports slow startups.

2.2 14 CLOSE Proposals

IssueClose reason (one line)
kernel-613TC-wake path 400/429 fully fixed on main (unpaired tool_calls / same-role run resolved).
kernel-710Provider 429 cascades superseded by owner decision — a five-point contract was adjudicated in-thread; PR #701 closed unmerged.
kernel-712Tool result byte limits: both load-bearing suggestions already implemented on current main.
kernel-714Symptom report against a superseded kernel — soul fire on main no longer drives the wake/injection path.
kernel-718Part 1 fixed by the persisted tool-result replay mechanism (PR #297, f02dd0dd) and wired into every ChatInterface.
kernel-728Write-path defect fixed by PR #966 (init.jsonc normalization, commit 92eeaaff).
kernel-754Race unreachable — run_agent_migrations removed from the boot/refresh path (92eeaaff).
lingtai-223All five suggested mitigations landed on the code-owning lingtai-kernel main.
lingtai-565Tape rebuild/reconstruction no longer rewrites .portal files without TopologyMu (current main).
lingtai-619Core fixed on main (max/ultra accepted with clear errors; omitted Codex thinking normalized to xhigh).
lingtai-643MallocStackLogging warning flood fixed on main (root cause located by TZZheng).
lingtai-725Official kernel update path is live — the confirm-gated /update checks the managed venv.
lingtai-771Dangling native references left by GUI-created presets fixed on current main.
lingtai-784Both deterministic preconditions (oversized palette frame, Bubbles virtual cursor) fixed on main.

2.3 39 COMMENT Proposals (classified summary)

3. Subagent Token Usage (taskcard data)

Per Jason 2208's requirement, Task Card shows the token usage of subagents (daemons), not the parent agent. Taskcard aggregate for this round of 103 concurrent daemons:

≈260M
Input tokens (in)
≈254M
Cache hits (cached)
≈3.9M
Output tokens (out)
Independent cross-check (token ledger + each daemon's token metadata): this batch of 106 daemon runs (103 issues + 3 catch-up/re-dispatches) totals ≈283M input, ≈276M cached, ≈4.1M output + ≈1.9M thinking — same order of magnitude as the taskcard snapshot; the parent-session snapshot (02:14Z) shows 14.4M in / 13.8M cached. Cache hit rate is about 97–98%; batch parallelism yields significant context-cache savings.

4. Failure Analysis (4 failures, all recovered)

Of the 103+ daemon runs, 4 did not close out per contract; each was verified individually (each daemon's run logs):

IssueOriginal daemonFailure typeElapsedRecovery
lingtai#672em-e708max_turns exhausted (max_turns exhausted before the daemon completed its tool chain)1019s (02:27Z)proposal.md was written before the failure (COMMENT-ROUTE action); deliverables complete.
kernel#655em-5fafmax_turns exhausted1232s (02:32Z)Re-dispatched em-c93c to complete: pushed branch fix/issue-655-dev4-20260809, opened PR #1295 (50 tests passing).
kernel#1237em-b86dmax_turns exhausted1742s (02:40Z)Re-dispatched em-0ee9 to complete: pushed the existing branch fix/issue-1237-dev4-20260809 (04b79c47), opened PR #1296.
kernel#713em-6417missing finish signal (missing completion MCP finish signal; terminal text: “test suite still running, waiting for wake”)493s (02:20Z)proposal.md + pr_body.md were written before the contract failure; deliverables complete.
Conclusion: all 4 failures were daemon lifecycle/contract issues (3× max_turns, 1× finish contract); none was a model-capability or data issue; all were recovered via “re-dispatched daemon” or “already on disk before failure”, ending at 103/103 proposals complete, with 2 failed issues closed out as PRs (#1295/#1296).

5. 429 / Rate-Limit Evidence Audit

A dedicated audit was run on whether the 103 concurrent daemons triggered heavy rate limiting:

Note: the main-log counts are cumulative historical figures (all daemons since 7-16), with no direct causal link to this batch; no rate-limit-caused failures were seen during this batch's 103 daemons' live runs. A few hard issues (e.g. kernel#664's PR path) were blocked by shell tool failures and are recorded in COMMENT for follow-up.

6. The 23 Closed Issues (as of report time)

Executed under Jason's authorization (Telegram 2248 / 2258) and verified one by one (actor=huangzesen, state=open before closing, fresh GET re-checked closed after):

14
CLOSE proposals executed
6
fixed-unconfirmed closed
3
closed with repro evidence
23
Total closed

6.1 CLOSE execution (14/14 successful, close-execution-receipt.md)

lingtai: #223, #565, #619, #643, #725, #771, #784; kernel: #613, #710, #712, #714, #718, #728, #754. Each has a closing-reason comment attached (e.g. issuecomment-5229807013).

6.2 fixed-but-unconfirmed closed (6/6 successful, fixed-close-execution-receipt.md)

lingtai: #144, #429; kernel: #193, #195, #422, #717. Each first posts a status comment (proposal-suggested comment + reporter confirmation/closing note), then closes.

6.3 closed with repro evidence (3/3 successful, repro-close-execution-receipt.md)

lingtai: #431 (Codex login state), #753 (ASLEEP won't wake), #754 (stale recovery prompt replay). All COMMENT + CLOSE, verified state_reason=completed.

7. Fable Audit Progress

Per Jason 2194's “5 PRs per batch” instruction, Fable audits were dispatched (lingtai #821–#824 + kernel #1253–#1291 etc., 41 PRs split into batches 1–9, report path fable-audit-batch-<N>.md). As of this report:

BatchPRs auditedVerdict
Batch 1First 5 PRs1 APPROVE + 4 REQUEST CHANGES
Batch 2#1254 #1255 #1256 #1257 #12581 APPROVE (#1254, 223 tests passing, closes #1238) + 4 REQUEST CHANGES (#1255 sqlite bad ts not handled; #1256 malformed IPv6 aborts the whole table + unsupported scheme still probes port 80; #1257 timezone tests leak libc TZ state; #1258 listen concurrency check non-atomic + contract not synced), P0 0 / P1 2 / P2 4
Progress: batches 1–2 done (2 APPROVE + 8 REQUEST CHANGES, 10/50 audited); batch 2's full audit report is archived in the Fable audit batch 2 attachments (identity/source check: authors and committers of all audited PRs are Huang Zesen <hzsbazinga@outlook.com>, GitHub-side actors are all huangzesen, no identity mismatch; the audit was read-only, no GitHub changes made). REQUEST CHANGES items will be handled via follow-up patches/tracking.

8. Squash-first Merge Strategy

The 50 PRs are grouped into 11 buckets by theme (PR_CLASSIFICATION.md); the core strategy is “plan merge batches by file-conflict surface first, then merge batch by batch”. Key points:

9. Methodology

Model: deepseek (Jason 2194 designated “current default model”, recorded in the daemon ledger as deepseek-v4-flash @ opencode.ai/zen/go/v1), used for writing PRs and all triage analysis
Canonical identity: GitHub actor = huangzesen (verified via gh api user --jq .login before every gh operation); git author+committer = Huang Zesen <hzsbazinga@outlook.com>
Isolated gh context: all gh/git operations run with export GH_CONFIG_DIR="$HOME/.config/gh-huangzesen"; never gh auth switch, never touches shared/global git/auth config
Isolated checkout: each issue gets an independent fresh clone at issue-<N>/kernel; never touches shared worktrees
Current-main verification: every proposal is verified against origin/main HEAD (df2b523d) for fixed/reproducible, with evidence down to file/line
Owner/overlap protection: when an active PR/lane exists, COMMENT points to the owner; never opens duplicate PRs
Audit cadence: Fable does read-only audits of 5 PRs per batch; close/comment/merge authority belongs to parent/Jason; sub-daemons only open their own PRs
Data sources: per-issue proposal records (PR_LIST · PROPOSAL_INDEX · PR_CLASSIFICATION · comment-decision-list · close execution receipts) · daemon run records · token ledger · Fable audit reports.
This report is published by huangzesen.github.io (added subdirectory 103-agent-parallel-20260809/; only added files, no existing repo content modified). Generated: 2026-08-09 UTC.