Commit Graph

5482 Commits

Author SHA1 Message Date
Chinesezjc
4fbab36b5f Merge remote-tracking branch 'origin/ci/offload-coverage-to-vm-backup' into ci/offload-coverage-to-vm-backup 2026-07-27 16:26:26 +08:00
Chinesezjc
ebb5bf4c19 docs(ci): starting a new failover runner needs svc.sh, not just config.sh
config.sh registers the instance without starting a listener, so the
procedure as written left the new runner offline and added no capacity.
2026-07-27 16:25:45 +08:00
Chinesezjc
3cf2853b3f docs(ci): bootstrap procedure starts the listener service
config.sh only registers; the runner stays offline until svc.sh
install/start. Both language sides updated so emergency capacity
actually comes online.
2026-07-27 16:22:30 +08:00
Chinesezjc
0833c94286 Merge branch 'master' of /data_local/ci/mirror/deepseek-harness into ci/offload-coverage-to-vm-backup 2026-07-27 16:22:30 +08:00
Tianyi Cui
b5a23e45f6 Merge pull request #735 from deepseek-harness/worktree/fix-ci-timing-flakes-20260727
test: stabilize timing-sensitive terminal checks
2026-07-27 16:19:08 +08:00
Chinesezjc
ce3b13bb08 ci: standby fetches full history; runbook — writer wording throughout, master-ref pinning incompatibility
- serial-linux-selfhosted checks out fetch-depth 0: depth 2 misses
  github.event.before on multi-commit or force pushes, failing the
  archive verifier on a valid tree. Full fetch is cheap against the
  VM's local mirror.
- Runbook (both languages): every remaining admin phrasing (problem
  statement, switch heading, alternatives, consequences) now says
  writer; and the 'composes with this mechanism' claim about a
  master-ref-pinned runner group is replaced with the truth observed
  live on 2026-07-27 — master-ref pinning blocks PR failover, and the
  shipped posture is repository-scoped all-workflow group access.
Static gate green locally: 32 passed, 0 failed.
2026-07-27 16:13:45 +08:00
Tianyi Cui
ab25c34ea0 Merge remote-tracking branch 'origin/master' into worktree/fix-ci-timing-flakes-20260727 2026-07-27 16:09:50 +08:00
imccyu
5f589da54d Merge pull request #706 from deepseek-harness/markdown-ui
feat: optimize chat ui
2026-07-27 16:08:48 +08:00
Chinesezjc
4b7f28026a Merge remote-tracking branch 'origin/ci/offload-coverage-to-vm-backup' into ci/offload-coverage-to-vm-backup 2026-07-27 16:08:16 +08:00
Chinesezjc
24d7211f09 docs(ci): stop claiming no PR-editable path reaches the standby pool
The standby lane itself is push-only, but under failover pull_request
jobs do reach these runners with the PR merge ref's workflow. The
workflow comment and the larger-runner note (both languages) now state
that plainly and name the actual boundary — repository membership
(private, forking disabled, Dependabot excluded) — matching the
runbook. Static gate green locally: 32 passed, 0 failed.
2026-07-27 16:02:56 +08:00
Tianyi Cui
5c4be796d1 Merge remote-tracking branch 'origin/worktree/fix-ci-timing-flakes-20260727' 2026-07-27 15:59:39 +08:00
Chinesezjc
0a3781216d Merge remote-tracking branch 'origin/master' into ci/offload-coverage-to-vm-backup 2026-07-27 15:59:17 +08:00
Tianyi Cui
c960e88cb8 Merge branch 'master' into worktree/fix-ci-timing-flakes-20260727 2026-07-27 15:58:44 +08:00
Tianyi Cui
9b8e6e6548 Merge remote-tracking branch 'origin/master' into worktree/fix-ci-timing-flakes-20260727 2026-07-27 15:58:37 +08:00
imccyu
52985d688d Merge branch 'master' into markdown-ui 2026-07-27 15:58:13 +08:00
Tianyi Cui
5be0118784 Merge pull request #674 from deepseek-harness/nih-imp-sse
refactor(llm-deepseek): replace hand-rolled SSE parser with eventsource-parser
2026-07-27 15:57:13 +08:00
Chinesezjc
7f05c95351 Merge remote-tracking branch 'origin/ci/offload-coverage-to-vm-backup' into ci/offload-coverage-to-vm-backup 2026-07-27 15:56:53 +08:00
Tianyi Cui
98877ca326 ci: drop recovered-runner fallback from retarget 2026-07-27 15:55:21 +08:00
Chinesezjc
e2eca69e9c docs(ci): writer-level trust boundary stated everywhere; serial note counts four references
- Sweep every remaining 'admin-only' claim (workflow comments, runbook
  lines 13/40, topology note, all zh pairs): the variable is
  writer-manageable, and the boundary against untrusted code is
  repository membership (private, forking disabled, Dependabot
  excluded) — stated identically at every site instead of only in the
  'who can flip' paragraph.
- Serial cross-platform reference note (both languages): master now
  runs four references — the three hosted OS legs plus the self-hosted
  standby drill, linked to the failover runbook.
Static gate green locally: 32 passed, 0 failed.
2026-07-27 15:54:59 +08:00
Tianyi Cui
77a85f9b1a Merge remote-tracking branch 'origin/master' into worktree/fix-ci-timing-flakes-20260727 2026-07-27 15:53:08 +08:00
Chinesezjc
cbb30226a0 Merge remote-tracking branch 'origin/master' into ci/offload-coverage-to-vm-backup 2026-07-27 15:50:35 +08:00
imccyu
228d503230 fix: code-mode fixture snapshot 2026-07-27 15:49:37 +08:00
Tianyi Cui
bfdaf7600b Merge remote-tracking branch 'origin/master' into worktree/pr674-retarget-20260727
# Conflicts:
#	docs/cookbook/adding-an-llm-adapter.i18n.yaml
#	docs/core-data-structures/llm-streaming.i18n.yaml
#	packages/llm/llm-deepseek/README.i18n.yaml
#	packages/llm/llm/README.i18n.yaml
2026-07-27 15:48:17 +08:00
Chinesezjc
d606ab6877 ci: standby archive base ref; runbook — dependabot exception, clean bootstrap, variable trust model
- serial-linux-selfhosted now fetches depth 2 and passes
  DSH_ARCHIVE_BASE_REF=github.event.before, running the same
  frozen-archive comparison as serial-linux instead of diffing the
  new manifest against itself.
- Runbook (both languages): documents the deliberate dependabot
  exception (queued-on-hosted during failover is expected, not a
  failed switch); corrects the emergency-capacity bootstrap to
  exclude .runner/.credentials when cloning a runner directory; and
  replaces the 'admin-only' variable claim with the accurate
  trust-model statement — repository variables are writer-manageable,
  which in this private fork-disabled repo with an all-workflows
  runner group is routing among members, not an escalation.
Static gate green locally: 32 passed, 0 failed.
2026-07-27 15:47:19 +08:00
imccyu
b8d7938498 Merge branch 'master' into markdown-ui 2026-07-27 15:44:30 +08:00
imccyu
0a7c8a284d chore 2026-07-27 15:44:10 +08:00
Tianyi Cui
d2edfcca2e Merge pull request #624 from deepseek-harness/worktree/llm-reasoning-effort
feat(llm): add dynamic model-specific reasoning efforts including off
2026-07-27 15:37:54 +08:00
Chinesezjc
caabf8f671 ci: dependabot stays hosted under failover; runbook matches shipped bounds
- All four failover selectors (three workers + the verdict job) and the
  paired env/cache expressions now exclude dependabot[bot]: under
  failover, dependency-supplied code keeps queueing for the hosted pool
  instead of executing on the persistent VM. A delayed Dependabot PR
  during an outage is an acceptable cost; dependency code on the
  privileged host is not.
- Runbook (both languages): records the shipped failover bounds
  (coverage 8, snapshots 12, sized for six instances) and documents
  that the verdict job follows the selector too — operators previously
  had no explanation for a verdict queued after all workers passed.
- Local static gate green: 32 passed, 0 failed (translation pairing
  519 pairs consistent).
2026-07-27 15:36:11 +08:00
Tianyi Cui
9c53cd7d07 test: stabilize timing-sensitive terminal checks 2026-07-27 15:33:36 +08:00
Tianyi Cui
f6de42a886 Merge remote-tracking branch 'origin/master' into worktree/pr674-retarget-20260727 2026-07-27 15:30:30 +08:00
Yichen Jiang
c3dfed668d Merge branch 'master' into worktree/llm-reasoning-effort 2026-07-27 15:30:00 +08:00
Chinesezjc
aedf7fbf34 docs(i18n): keep the runbook link target identical across the pair
The pairing gate requires link target #9 to be byte-identical between
the language sides; my earlier 'fix' pointed the zh side at the zh
runbook and broke the contract. Reverted to the shared target and
re-recorded the pairing hash.
2026-07-27 15:27:40 +08:00
imccyu
b241d4332c Merge branch 'master' into markdown-ui 2026-07-27 15:23:13 +08:00
imccyu
e14c2aea3d Merge pull request #497 from deepseek-harness/web2-todo
feat(gui): todo display — TodoPanel plan strip + dedicated todo_write tool row
2026-07-27 15:22:03 +08:00
Chinesezjc
fe246e4a0a ci: failover round — aggregate follows the selector, tighter shared-VM bounds
- all-checks-passed now resolves its pool through the same
  DSH_CI_FAILOVER expression as the worker jobs it aggregates.
  Pinned to the hosted pool it would leave the branch-protection
  verdict queued on the failed pool after every failover job passed —
  observed live during the 2026-07-27 outage as a required check
  looping against dead capacity.
- Coverage worker bound under failover drops 12 → 8 and snapshot
  concurrency 16 → 12: the pool now runs six always-on instances (the
  spare tier was retired), so worst case is 6 × 8 = 48 coverage
  workers on the shared 64-core VM.
2026-07-27 15:17:48 +08:00
Tianyi Cui
026366ac4a Merge pull request #722 from deepseek-harness/worktree/ci-status-aggregator-standard-20260727
ci: keep required status aggregator on standard capacity
2026-07-27 15:07:25 +08:00
Ubuntu
be80eb04ad ci: retrigger after runner-group policy fix 2026-07-27 14:45:54 +08:00
Tianyi Cui
ef8d82c65f Merge standard-runner fallback into status aggregator stack 2026-07-27 14:37:04 +08:00
Ubuntu
1a8225ee6c ci: retrigger after failover switch 2026-07-27 14:35:05 +08:00
Tianyi Cui
761eeb7c55 ci: restore standard runners for primary checks 2026-07-27 14:15:46 +08:00
Tianyi Cui
7ca13198de ci: keep required status aggregator portable 2026-07-27 14:05:32 +08:00
Yichen Jiang
21aeff3029 Merge remote-tracking branch 'origin/master' into worktree/llm-reasoning-effort
# Conflicts:
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml
#	docs/config-catalog.md
#	docs/core-data-structures/session.i18n.yaml
#	scripts/type-equiv.manifest.json
2026-07-27 13:35:10 +08:00
Tianyi Cui
73d2a787a7 Merge branch 'master' into nih-imp-sse 2026-07-27 13:13:57 +08:00
07akioni
0d2a8a3090 Merge branch 'master' into markdown-ui 2026-07-27 12:59:37 +08:00
07akioni
55fc87a7a0 fix: cr 2026-07-27 12:58:20 +08:00
Chinesezjc
5fa74343aa docs(ci): six always-on instances, no pre-registered spares
The spare tier is retired. Steady-state pool load is one serial standby
job per master push, so six always-on instances already are the
failover capacity; pre-registered offline runners are a silently
expiring guarantee (GitHub garbage-collects them after 30 days
offline). Incident-time extra capacity is a one-minute org-token
registration, now documented in the runbook.
2026-07-27 12:54:35 +08:00
Chinesezjc
710a3b1686 docs(ui-conversation): document the two todo registrations in the owning README pair
The todo row and the todo plan strip were registered without a contract in this
package's README, which still described only the bash sample. Both sides now
carry the two registrations: TodoRow's `todo_write` toolview key with its
attempted-write summary and non-ok dot semantics, and TodoDock's
`conversation.input.dock` entry at `order: -1` with the dock-owned selection,
empty-hidden panel, collapse behavior, and the composer-takeover consequence
that hides the whole dock. README.i18n.yaml re-recorded.
2026-07-27 12:20:17 +08:00
Chinesezjc
d2bb2a809b fix(web-todo): dock-owned selection, keyboard-openable row, documented tail todos field
Three ds-review-bot round-8 findings on the todo display surfaces.

TodoPanel took the whole `useSession` hook and cast the snapshot to reach
`todos`, which put slot plumbing and an unchecked cast inside the presentation
component. The panel now takes `todos: readonly TodoItem[]`; TodoDock does the
selecting, matching the QueueDock posture the dock slot already establishes.

The todo row carried `onClick` with no keyboard route, so its details panel was
mouse-only. It now takes ToolRow's route verbatim: `role="button"`,
`tabIndex={0}`, and an Enter/Space handler that claims the event. The row stays
a `<div>` because a `<button>` flattens its inline spans.

`session.history`'s tail-only `todos` field was documented at the TS signature
but not in the apiproxy README pair, and the Agent Note claimed the feature
added no new wire vocabulary. Both README sides now state the tail/omission
semantics (an omitted field on a tail response is the empty plan, not unchanged
state), and the note records the one added field instead of denying it.

Tests: TodoPanel specs render the plain list; new TodoDock specs cover selection,
live follow, rollback-to-empty, and the registration shape; a new row spec pins
Enter/Space activation and non-activating keys.
2026-07-27 12:08:46 +08:00
07akioni
3ee2982f85 optimize chat ui 2026-07-27 12:04:12 +08:00
Chinesezjc
8ebdad5076 reset the plan when a tail history response omits the todo projection
An omitted `todos` on a tail request was treated as "no projection carried"
and preserved the prior value. Every installWindow caller is a tail request
(doOpen, its gap re-pull, repairGap; loadOlder prepends without it), which the
host answers with the full-log projection or omits only when the log holds no
todo/write — so the field's absence is the authoritative empty list. A live
write whose host crashed before persisting therefore left the rolled-back plan
on screen indefinitely; the assignment now clears it on the next open or
resync. Widened the parameter to an explicit `| undefined` so the two meanings
cannot be conflated again, and updated the JSDoc at both declaring seams plus
the bilingual README/note pair.
2026-07-27 11:41:26 +08:00