Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
320 commits
Select commit Hold shift + click to select a range
b94e0ad
fix(showcase-v2): popups no longer squeeze the page with scrollbar fl…
giveUphope Oct 8, 2026
9404298
feat(admin-console): hold the device queue on environment-level failures
giveUphope Oct 8, 2026
437bd1b
fix: unit tests no longer stream phantom sessions into the live console
giveUphope Oct 8, 2026
b79c423
test: audit-aligned coverage from subagent review of both suites
giveUphope Oct 8, 2026
cccd706
fix(admin-console): failure classes and auto-device queue holds
giveUphope Oct 8, 2026
17041ad
feat: queue pause/resume and visible queued-message chips
giveUphope Oct 8, 2026
552a63c
fix(admin-console): /api/status route was wired to the pause handler
giveUphope Oct 8, 2026
46e59b2
fix(console): persist never-started failed rounds and stack queue mes…
Oct 9, 2026
138695c
fix(showcase-v2): scope dock queue controls to the active thread and …
Oct 9, 2026
3a1facc
fix(showcase-v2): keep queued rounds out of the timeline until dispat…
Oct 9, 2026
8a0108c
fix(showcase-v2): auto-follow never crosses conversation threads
Oct 9, 2026
9739f32
fix(showcase-v2): a queued round is never promoted to running on sess…
Oct 9, 2026
cc6b20c
docs: add todo recording DSH migration decisions and integration sema…
Oct 9, 2026
299eb55
docs: pre-migration feature inventory locks worker/device/UI contract…
giveUphope Oct 9, 2026
078692a
docs: restructure DSH migration into three phases (D9)
giveUphope Oct 9, 2026
4068afd
docs: verify DSH plan against local 0.2.0-rc.2 source, correct 12 ass…
giveUphope Oct 9, 2026
bc609d4
docs: second anti-reinvention audit against DSH source (19 checks)
giveUphope Oct 9, 2026
c96499e
docs: third audit - turn execution shim (S10) and phase-1 scope trim
giveUphope Oct 9, 2026
d364b81
docs: survey mainstream harness invocation patterns, re-rank S10 routes
giveUphope Oct 9, 2026
b3f14f4
docs: record D10 product positioning and four user decisions
giveUphope Oct 9, 2026
2d7f697
docs: S10 ruled - plugin provides content only, queue/scheduling stay…
giveUphope Oct 9, 2026
11d71c3
docs: strip remaining wheel-reinvention under the content-only plugin…
giveUphope Oct 9, 2026
4d95bdc
docs: upstream implementation study (google/artemis) and plan re-base…
giveUphope Oct 9, 2026
51a1df2
docs: settle device binding model - shared physical device with full …
giveUphope Oct 9, 2026
2650643
docs: S11 single-layer execution router merges flash/pro into one layer
giveUphope Oct 9, 2026
d200f4f
docs: survey 'plain agent + external control' patterns, align S11 wit…
giveUphope Oct 9, 2026
9fbb44a
docs: rewrite todo.md as the consolidated R2-prime plan
giveUphope Oct 9, 2026
e87f4bd
feat(plugin): autogamer-device P0 skeleton - content-only DSH device …
giveUphope Oct 9, 2026
e27b02d
feat(plugin): pass install-flow and MCP spikes against real DSH; wire…
giveUphope Oct 9, 2026
ce7485a
feat(plugin): pass install + MCP spikes on live DSH; wire real py con…
giveUphope Oct 9, 2026
0d1f966
fix(plugin): declare Config schema - required for preset-scope child …
giveUphope Oct 9, 2026
8424b50
chore(plugin): keep spike auth artifacts out of the repo
giveUphope Oct 9, 2026
9d0afc9
test(plugin): conformance contract skeleton + P0 status in roadmap
giveUphope Oct 9, 2026
c8b49c8
chore(plugin): drop unparseable actionServerEnv block from live overlay
giveUphope Oct 9, 2026
c21c230
docs: note IAB browser wedge in the S10 manual verification step
giveUphope Oct 9, 2026
9a01547
docs: S10 live re-validation environment ready (server+proxy+mock run…
giveUphope Oct 9, 2026
9a32c8c
chore(plugin): gitignore local spike tokens and logs
giveUphope Oct 9, 2026
78e78b9
fix(plugin): speak native Schemastery for Config and repair screen-si…
giveUphope Oct 9, 2026
c602df6
docs: register the declared-surface-only rule (D15) and the S10 result
giveUphope Oct 9, 2026
c57877c
chore(plugin): ignore dsh config captures and keep the wire comparator
giveUphope Oct 9, 2026
1f05039
spike(plugin): bisect the empty tool plane on the AutoGamer preset
giveUphope Oct 9, 2026
355cee5
docs: revise R2' against the upstream plugin and preset contract
giveUphope Oct 9, 2026
46b9006
chore: add the markdown table ruler and narrow the wire parser's except
giveUphope Oct 9, 2026
844265d
docs: write the plugin contract rules and re-select the introduction …
giveUphope Oct 9, 2026
bdc9e3b
chore: cover the rules doc with the table ruler
giveUphope Oct 9, 2026
d28a773
docs: fill in rules R13-R19 and rewrite the plan against them
giveUphope Oct 9, 2026
ee075a2
docs(agents): map the DSH plugin track so the next session can find it
giveUphope Oct 9, 2026
0d10778
docs: make one numbering authority and prove it with a gate
giveUphope Oct 9, 2026
32eee36
docs: add an entry page, a glossary, and a status block; mark stale n…
giveUphope Oct 9, 2026
88ad8bd
docs(plugin): rewrite the package README, which had gone stale in fou…
giveUphope Oct 9, 2026
7a1c43d
docs: record plan-to-todo ledger habit in AGENTS.md and docs/todo.md
Oct 10, 2026
17fdfcb
docs: make incidental findings a todo-ledger obligation
Oct 10, 2026
759af78
docs: route fixed findings to changelogs, open ones to todo
Oct 10, 2026
628f433
docs(todo): G30 root-cause research - preset child import anchor is t…
giveUphope Oct 10, 2026
c01c8a9
fix(autogamer-device): G30 - effect teardown-as-callback disposed own…
giveUphope Oct 10, 2026
16240f0
docs(todo): real-device action server round green - screenshot captur…
giveUphope Oct 10, 2026
0fc7c47
docs(todo): realign the status page with S10-1/S5 green and reorder t…
giveUphope Oct 11, 2026
bfb63e3
fix(autogamer-device): G36 - screenshots reach the model through the …
giveUphope Oct 11, 2026
ead6734
docs(todo): record G36 model-side green and G37 closure, open G38, re…
giveUphope Oct 11, 2026
30e1289
feat(autogamer-device): observe the screen effect inside the tool (S1…
giveUphope Oct 11, 2026
6ae865d
docs(todo): register the confirmed route-A spec for S10-2 effect verd…
giveUphope Oct 11, 2026
66382c3
feat(mcp,autogamer-device): G39 route A - the effect verdict comes fr…
giveUphope Oct 11, 2026
d5aeb74
docs(todo): close G39 and mark S10-2 green with both verdicts observe…
giveUphope Oct 11, 2026
f6a5bbf
docs(todo): S10-3 gate blocking passes on two live sessions; S10-4 op…
giveUphope Oct 11, 2026
c273ea7
docs(todo): cross-reference G40 from the D2 and D4 premises they put …
giveUphope Oct 11, 2026
75d6132
docs(todo): retract G40 - busy-time enqueue is native, my probe was w…
giveUphope Oct 11, 2026
b9f1a5c
docs(todo): real-device quality spike verdict - direct plugin not yet…
giveUphope Oct 11, 2026
2e9f609
fix(autogamer-device): G41 + G42 - reported outcomes conclude the tur…
giveUphope Oct 11, 2026
5f8245d
docs(todo): record the G41/G42 fix round and open G43/G44 from what l…
giveUphope Oct 11, 2026
fb58781
docs(todo): G42 verified live on a clean T2 re-run; G41 still lacks l…
giveUphope Oct 11, 2026
d15d83a
docs(todo): spell out the G44 enforcement path from the declared surface
giveUphope Oct 11, 2026
0f48a0a
docs(todo): write the G44 enforcement spec so it can be implemented w…
giveUphope Oct 11, 2026
c5c8c3c
docs(todo): G44 precondition experiment 1 passes - agents and session…
giveUphope Oct 11, 2026
5312156
docs(todo): G44 enforcement is impossible from a preset child - turn …
giveUphope Oct 11, 2026
2bfd9b5
docs(rules): add R20/R21 and audit every host interaction for guesswork
giveUphope Oct 11, 2026
a082391
docs(rules): add R22 - docs first, spec committed, then code
giveUphope Oct 11, 2026
c8e1aba
docs(todo): G44 v2 spec - the official scope filter has a documented …
giveUphope Oct 11, 2026
fb70c05
feat(autogamer-device): G44 v2 - global session listener and bounded …
giveUphope Oct 11, 2026
37f496b
docs(todo): close G42, mark G41 as blocked-on-G44, and renumber the n…
giveUphope Oct 11, 2026
5ade68d
docs: rename to TODO.md / CHANGELOGS.md and move the changelog into d…
giveUphope Oct 11, 2026
c0ab6f7
docs: split closed gaps into CHANGELOGS, categorise it, and write the…
giveUphope Oct 11, 2026
ccdfcfe
feat(autogamer-device): G44 closed - turn/end needs {global:true}, an…
giveUphope Oct 11, 2026
3f6781a
docs(todo): G45 - flash contract never reached the model; spike premi…
giveUphope Oct 11, 2026
fb3f852
feat(autogamer-device),docs: G45 - deliver the flash contract via a p…
giveUphope Oct 11, 2026
48c3f51
docs(changelogs),rules: #15 - terminal state closed; retract G46 and …
giveUphope Oct 11, 2026
931b157
docs(todo): tick P0 - quality spike and terminal-state semantics both…
giveUphope Oct 11, 2026
bef7d5c
docs(autogamer-device): annotate currentInitiator with its declared s…
giveUphope Oct 11, 2026
b6810af
test(autogamer-device): lock the two guards the review found missing,…
giveUphope Oct 11, 2026
25b67f6
docs(todo): record the deferred test debt the review surfaced, so it …
giveUphope Oct 11, 2026
5f1b8a2
fix(scripts): G35 - derive the doc-gate default file set from the scr…
giveUphope Oct 11, 2026
d9dce5b
docs(todo): G31/D17 spec - move delivery onto install_bundle, with th…
giveUphope Oct 11, 2026
915c712
feat(autogamer-device),docs: G32 - bundle display metadata and icon, …
giveUphope Oct 11, 2026
c24ee20
feat(autogamer-device): D17 self-install row + bundle-relative skill …
giveUphope Oct 11, 2026
678a2fc
docs(changelogs): #18 - G31 closed, install_bundle proven end-to-end …
giveUphope Oct 11, 2026
22415b7
docs(todo): G47 spec - verify install_bundle rollback and packed file…
giveUphope Oct 11, 2026
c91ec75
docs(changelogs): #19 - G47 closed, install_bundle rollback and packe…
giveUphope Oct 11, 2026
136890c
docs(todo): G48 spec - prove a successful git install via a local git…
giveUphope Oct 11, 2026
a4a0f44
docs(changelogs): #20 - G48 closed, git installs proven with files ho…
giveUphope Oct 11, 2026
e63a531
docs(changelogs): #21 - G49 real attempt; retract my ssh claim, the w…
giveUphope Oct 11, 2026
403e73c
docs(rules): R25 - root causes need mechanism docs and one variable a…
giveUphope Oct 11, 2026
1d2b074
docs(changelogs): #22 - G49 root cause is the stale same-name junctio…
giveUphope Oct 11, 2026
6d05607
docs(todo): G50 route spec - tarball carries dist by construction; pr…
giveUphope Oct 11, 2026
6fa8cfc
docs(changelogs): #23 - G50 closed, the tarball route is end-to-end v…
giveUphope Oct 11, 2026
8bb38d3
docs(changelogs),rules: #24 + R26 + G51 - release published and insta…
giveUphope Oct 11, 2026
0706f4c
docs,autogamer-device: G51 closed - TLS prerequisite verified on DSH'…
giveUphope Oct 11, 2026
2beec71
fix(autogamer-device),docs: #26 - D17's switch must track the plugin-…
giveUphope Oct 11, 2026
dfd1f4e
docs(todo): refresh the next-steps row - D17/G31 are done, and G5 is …
giveUphope Oct 11, 2026
d523efb
docs(todo): G5 spec - three-tier real-runtime conformance, spec lands…
giveUphope Oct 11, 2026
1df20b5
feat(autogamer-device): G5 Tier 1 - assert the tool surface on a real…
giveUphope Oct 11, 2026
3507d5c
test(autogamer-device): G5 Tier 2 - fixtures are generated from their…
giveUphope Oct 11, 2026
0036eda
test(autogamer-device): G5 Tier 3 - the live conformance evidence pat…
giveUphope Oct 11, 2026
8e01190
ci: add a plugin-contracts job - the DSH contract tests never ran in CI
giveUphope Oct 11, 2026
685581e
docs(g5): record the landing, the de-mirrored attachment type (#27), …
giveUphope Oct 11, 2026
56a7996
test(autogamer-device): make the fixture-provenance guard actually de…
giveUphope Oct 11, 2026
77b47ba
fix(autogamer-device): the generated SSE fixture was asserting a fals…
giveUphope Oct 11, 2026
5232265
docs(g5): changelogs #28 for the false-fact fixture, and the claims i…
giveUphope Oct 11, 2026
1d24416
docs(g5): close G5 - CI plugin-contracts went green on both OSes; ope…
giveUphope Oct 11, 2026
61f23a1
docs(g54): G54 拿到第二个数据点——两次 push 都零 run
giveUphope Oct 11, 2026
442651f
docs: stop restating id ranges and current blockers in secondary docs
Oct 12, 2026
6e2bfb8
docs(todo): spec - 派生事实只有一处权威,且必须有机械看守
Oct 12, 2026
2ab17cb
feat(scripts): 派生事实只有一处权威,复述由门禁拦住、体量由脚本生成
Oct 12, 2026
63bd39c
docs(todo): G52 spec - 追问路径补进真实 runtime,附声明面核查与探针结果
Oct 12, 2026
4b29e54
feat(autogamer-device): G52 结案 - 追问路径改吃真实 turn/end,追问消息去手镜像
Oct 12, 2026
e1de835
fix(scripts): format check_dependency_sources.py (G55)
Oct 12, 2026
3287b6a
docs(todo): spec - G34/G38 input validation and internal error class
Oct 12, 2026
ce60a3c
feat(autogamer-device): G34/G38 结案 - 输入语义校验与内部错误分流
Oct 12, 2026
e722a52
docs(todo): spec - G57 createScope visibility discrimination probes
Oct 12, 2026
37ed30c
feat(autogamer-device): G57 结案 - scope注册本就生效,锁scope-keyed读法
Oct 12, 2026
56e7419
docs(todo): spec - G56 mock JSON-RPC framing fix
Oct 12, 2026
5f5982f
feat(autogamer-device): G56 结案 - mock补jsonrpc帧,真SDK握手通过
Oct 12, 2026
da6a6d3
docs(todo): G54 third push data point, fork-level switches excluded
Oct 12, 2026
e7f3589
docs(migration): refresh size table after G54 row update
Oct 12, 2026
caa1636
docs(todo): spec - G33 breaker refusal to guard plus concurrency attr…
Oct 12, 2026
c4df8e2
feat(autogamer-device): G33 结案 - 熔断拒绝迁guard,并发属性声明
Oct 12, 2026
945a472
docs(todo): spec - G53 lockfile resolved host rewrite
Oct 12, 2026
43e5425
feat(showcase-v2): G53/G55 结案 - lockfile官方域与格式关账,新立G58
Oct 12, 2026
b6abc4b
docs(todo): spec - breaker matrix key unification and release paths
Oct 12, 2026
ff876ba
feat(autogamer-device): G4 矩阵结案 - 键同源与四解除定稿
Oct 12, 2026
4928b1a
docs(todo): spec - P1 validator ladder, prompt-level checker, skills
Oct 12, 2026
94f0507
feat(autogamer-device): P1智能层离线片 - validator梯prompt级checker与skills
Oct 12, 2026
b6a1035
docs: G59 本机schema常驻失败与重装前置,dsh改取PATH
Oct 12, 2026
afa5dd7
fix(autogamer-device): review跟进D1-D3与覆盖锁, incident累积传输分类
Oct 12, 2026
fdcd615
docs(todo): spec - G43 spike reset script
Oct 12, 2026
4ed71a3
feat: G43/G58 结案 - spike复位脚本与仓级格式关账
Oct 12, 2026
36f5205
docs(todo): spec - G8/G10/G11/G13/G14/G24 closing round
Oct 12, 2026
49abc0f
feat: G43/G58 结案 - spike复位脚本与仓级格式关账
Oct 12, 2026
419b9df
feat(autogamer-device): G8/G10/G11/G13/G14/G24 联关 - 信号透传与在飞去重
Oct 12, 2026
4f7868a
docs(todo): spec - 偏差关账轮(三处被实测证伪的抄件与它的 EOL 根因)
giveUphope Oct 12, 2026
0151455
fix(docs): 偏差关账 - 体量测量与 checkout 换行符解耦,陈旧抄件按实测更正
giveUphope Oct 12, 2026
e4ab761
docs(g60): 量证「文档门禁双 exit 0」的失效范围 - 体量表自生成那次起就从未匹配
giveUphope Oct 12, 2026
d201253
docs(r27): 把 #45 的教训变成守则,并把 G60/G61 挂进下一步序列
giveUphope Oct 12, 2026
9479b38
docs(todo): spec - G60/G61 实施轮(用户已决:加 step 沿用 dispatch、仓库级 .gitattrib…
giveUphope Oct 12, 2026
03993bf
feat(ci,repo): G60/G61 结案 - 文档门禁进 CI,行尾成为仓库事实
giveUphope Oct 12, 2026
8776293
docs(g48): 更正 #47 一处勾早了的验收 - run-headless.cmd 的工作树副本是 LF
giveUphope Oct 12, 2026
7cbf8ee
docs(g54): 排查收窄到两个候选,并撤回「CI 侧全绿」这条无 run 支撑的表述
giveUphope Oct 12, 2026
40970a3
docs(g54): 撤回我自己刚做的无效推断 - 匿名页面看不到横幅不等于已 opt-in
giveUphope Oct 12, 2026
e53d8df
docs(g54): 预写回报的三种结果与各自既定动作
giveUphope Oct 12, 2026
ff4b702
docs(g54): 未推送提交数改成复测命令,不写死数字
giveUphope Oct 12, 2026
a311bb9
docs(g54): 两个候选都被削掉 - org 禁止被同上游 fork 否证,fork opt-in 被官方文本削弱
giveUphope Oct 12, 2026
e8c2204
fix(docs): 修塌掉的 G54 表格行,并把「判据命令本身要有牙」补进 R27
giveUphope Oct 12, 2026
8eecb39
docs(g54): 第六数据点成立 - 已确认落地的 push 仍零 run;账号级彻底排除
giveUphope Oct 12, 2026
ae08ca2
fix(autogamer-device): 离线 action 面补第 14 个工具 compare_ui_frames(#50)
giveUphope Oct 12, 2026
3fccb4f
docs(todo): spec - G62 离线 action 面(用户已确认),并登记 #50 的 ratio 过度陈述
giveUphope Oct 12, 2026
9022ab1
feat(mcp): G62 结案 - artemis mcp --type mock,让 py 实现本身离线可跑
giveUphope Oct 12, 2026
06da044
docs(todo): spec - G63 让 py 动作面 fixture 变成 CI 机器可验
giveUphope Oct 12, 2026
3d0a992
feat(ci): G63 结案 - py 动作面 fixture 由 CI 每次用 --type mock 重导比对
giveUphope Oct 12, 2026
93cc463
docs(todo): spec - G3/G28 设备调度 A 片(池闸门),roster 真来源另立 G64
giveUphope Oct 12, 2026
58cc969
feat(autogamer-device): G3/G28 A 片 - 设备池闸门(parking / claimed-only / 全…
giveUphope Oct 12, 2026
50f26b5
docs(todo): spec - G64 结案轮(py 只读 list_devices + 插件 roster 真来源),D8 登记第…
giveUphope Oct 12, 2026
eedcedf
feat(mcp,autogamer-device): G64 结案 - py 只读 list_devices 工具,插件 roster …
giveUphope Oct 12, 2026
0540523
docs(todo): spec - P2 admission A 片(可辨性 + 多设备切换),锁屏半边立为 G65
giveUphope Oct 12, 2026
7227199
feat(autogamer-device): P2 admission A 片 - 移植 py 提交门禁的第一道门(G65 留下半)
giveUphope Oct 12, 2026
3719aa8
docs(rules): 立 R28 - 调研结论当轮回写台账,被推翻的旧表述不许静默保留
giveUphope Oct 12, 2026
dc5ef6b
docs(todo): spec - G65 B 片(锁屏三态进 list_devices),并记下形状为何这么定
giveUphope Oct 12, 2026
0c322d5
feat(mcp,autogamer-device): G65 结案 - 锁屏三态进 list_devices,准入的 fail-clos…
giveUphope Oct 12, 2026
ee1734f
docs(todo): spec - G27-a 陈旧 {index} 守卫;并回写两处过度声称,余下保真差集立 G66
giveUphope Oct 12, 2026
0430d17
docs(todo): G27-a 实现前发现与 #40 正面冲突 - 停手改方向,G66 顺序更正
giveUphope Oct 12, 2026
e8030c9
docs(todo,registry): 立 G67 - {index} 按节点身份解析(活观察快照),并回写两条错话
giveUphope Oct 12, 2026
c4fb13d
feat(autogamer-device): G67 结案 - {index} 句柄按节点身份解析,stale 句柄不可点代码化
giveUphope Oct 12, 2026
1a92ce1
docs,chore(autogamer-device): #61 - README 的 Layout 抄件漏了三个模块,补回并加双向锁
giveUphope Oct 12, 2026
8b16c22
docs(todo): spec - G66 小项两桩(incident 关闭通知 + run_outcome 双轴锁)
giveUphope Oct 12, 2026
b3e3522
feat(autogamer-device): #62 - incident 的 CLOSED 通知补上,run_outcome 双轴补齐锁
giveUphope Oct 12, 2026
a551b30
docs(todo,registry): 立 G68 - #60/#62 复审轮的四处代码缺陷与一条安全口径不一致
giveUphope Oct 12, 2026
8178eb1
fix(autogamer-device): G68 结案 - 复审轮五条缺陷各自有锁,并更正 #60 一处半证声明
giveUphope Oct 12, 2026
eedef8f
test,docs: #64 - 复审轮的台账卫生四项(README 锁只看 Layout 块并复用共享遍历)
giveUphope Oct 12, 2026
ed776e3
docs,chore: #65 - 收回工具描述里比代码强的「即使屏幕移动也跟随」
giveUphope Oct 12, 2026
da28369
docs(todo): 记账 - 实现提交 7d79864 误加 Co-Authored-By 署名尾注,先记后抹
giveUphope Oct 12, 2026
337dbcf
docs: #66 - 抹除我误加的提交署名尾注并留证(只改 message,树内容 diff 为空)
giveUphope Oct 12, 2026
4201e66
docs(todo): 安全网分支 backup-trailer-fix 归用户自行处理,不代删
giveUphope Oct 12, 2026
bbf6f1b
fix,ci,docs: #67/#68 - push 确实产出 run(G54 前提被否证),并修掉那次 run 里唯一红的自建步骤
giveUphope Oct 12, 2026
9c9c968
fix,ci: #69 - ratchet 头一回被执行就红;把它从遮挡里救出来并按实测抬基线
giveUphope Oct 12, 2026
3fab0ee
docs: #70 - 本 fork 第一次整体绿的 push run,四处「等真 run 复验」一次闭合;dispatch 测试步的失败…
giveUphope Oct 12, 2026
98e5e48
docs(todo): spec - P4 物理收缩(dsh-plugin-contraction 分支;旧栈物理删除)
Oct 13, 2026
4fb1b56
docs(todo): D18 - 长期 TS 为主、py 仅库成熟度占优时保留;确认 P4 CLI 边缘项
Oct 13, 2026
2a65211
refactor(contraction)!: 物理收缩 py 侧为设备动作核心,移除智能栈/旧控制台/远程 SDK/部署形态
Oct 13, 2026
75680fe
test(plugin): 随旧控制台物理收缩移除 legacy SSE conformance,清理指向已删 py 栈的注释
Oct 13, 2026
caf93a7
docs(todo): P4 阶段 B 物理删除回写并勾选 Done 项,G18 fixture 同步,刷新体量表
Oct 13, 2026
e0e7556
docs(todo): 勾选 P4 Done 第 5/6 条(3 笔提交已落、未推送、pre-contraction 未动),刷新 TOD…
Oct 13, 2026
c084780
docs(todo): §零同步 P4 阶段 A/B 完成状态与收缩后测试基线(插件 191、py 551),旧控制台改为物理删除+pre…
Oct 13, 2026
b272a7a
refactor(contraction): 删孤立的 apps 包标记(两个控制台已在阶段 B 物理删除,父包 __init__ 成空壳…
Oct 13, 2026
8ac69dd
docs(todo): B.6 功能面双向审计结论与二次收缩裁定
Oct 13, 2026
85d6622
refactor(mcp): B.6 删除插件形态不可达的死驱动、in-process 动作通道与孤立 utils
Oct 13, 2026
fdf6581
feat(cli): helper smoke 接入 device_smoke 端到端观察冒烟
Oct 13, 2026
ea5e661
docs(todo): B.6 二次收缩结案勾选 + 测试面计数更新
Oct 13, 2026
5d2a94b
docs(todo): 清空旧待办,P4 阶段 A/B 归档为 #71,余部放弃
Oct 13, 2026
f7e9b68
docs(todo): 落 dsh-autogamer 新方案自足条目(Phase 0 核实先行)
Oct 13, 2026
0c046cf
docs(todo): 方案更名同步 autogamer 前缀 + Phase 0 浏览器半与后端核实回写
Oct 13, 2026
f2fc3b6
docs(todo): Phase 0 全部回写,六条硬冲突裁决完毕
Oct 13, 2026
70cc7af
refactor(plugin): 插件改名 autogamer-device 改为 dsh-autogamer
Oct 13, 2026
8327831
feat(plugin): P1 骨架矫正、预检与只读设备状态工具
Oct 13, 2026
0c71173
feat(plugin): P2 完整工具集与真映射
Oct 13, 2026
4635f80
feat(plugin): P3 浏览器半与 toolview 卡片
Oct 13, 2026
569c508
feat(plugin): P4 镜像 Host 半与触摸降级
Oct 13, 2026
2225c5c
docs,review(plugin): P5 前账实核对与留白总账
Oct 13, 2026
0adb7f5
feat(plugin): P5 rules 注入与收尾
Oct 13, 2026
9d6b143
ci: 修绿收缩后分支的 CI
Oct 13, 2026
d8a6d2e
ci: 补进漏网的 preflight 模块并锚定 gitignore
Oct 13, 2026
5c8119d
docs: #77 验收勾选,新 run 全绿
Oct 13, 2026
1dd8958
docs: #78 - 仓库卫生与主线定位结案;插件卸载契约落 §八,在办的 profile 交付形态立 G71
giveUphope Oct 13, 2026
6628fad
docs: Step 0 现场核实回写(R28),新立 G72/G73
giveUphope Oct 13, 2026
b68f41f
docs: Step 1 动作面实测回写 §零,新立 G74/G75/G76
giveUphope Oct 13, 2026
33c1aca
docs: G75 的 R20 查证落 §九——两个上游都没有设备身份口径,路线收敛为三条
giveUphope Oct 13, 2026
496b118
docs: Step 2 复审「可验的是否都验了」——补 6 项结论、更正 1 处自记、新立 G77/G78
giveUphope Oct 13, 2026
21ddf23
docs: G77 范围更正为两项(installedCheck + helperCheck),附真预检七项取证
giveUphope Oct 13, 2026
44f6501
fix(plugin): G77 结案 - 预检承认 project-venv 提供方形态(installedCheck + helper…
giveUphope Oct 13, 2026
aa9a4d6
fix(cli): G73 结案 - doctor 收尾不再提示已删命令,补一条吃已注册命令集的锁
giveUphope Oct 13, 2026
9b74072
docs,fix: Step 4 优先级调研落账(收回两条错判、新立 G80)+ #81 修掉门禁自测的哑弹变异
giveUphope Oct 13, 2026
c6dfcf6
docs: Step 5 回写(R28)——G71 profile 层修好、G59 定案、G79/G80 方案定稿
giveUphope Oct 13, 2026
ce4c648
fix(plugin): G79 + G80 结案 - 预检按配置设备问 helper,rules 注入暴露「为什么没注入」
giveUphope Oct 13, 2026
1da355c
docs: Step 7 取证 - G71 挂载层与注册表层经官方管理面确认,工具面一条仍未证
giveUphope Oct 13, 2026
c3421fa
docs: 更正 G71 范围——只修了 web profile,headless 仍挂旧名死链、desktop 未装
giveUphope Oct 13, 2026
88b2cc6
docs: Step 8 收束——进度快照与待裁清单落账(用户指示"先不动")
giveUphope Oct 13, 2026
1241376
docs: close G71 via official inspector evidence (changelogs #83)
giveUphope Oct 13, 2026
d4072fd
docs: re-ground G71 evidence on wire capture after mode research (Ste…
giveUphope Oct 13, 2026
972845d
docs: plan tool-cordis row for preset-autogamer (Step 11, R22 spec-fi…
giveUphope Oct 13, 2026
5d44cd9
feat(dsh-autogamer): mount tool-cordis in preset-autogamer (Step 11)
giveUphope Oct 13, 2026
8d4ac7a
docs: tick Step 11 offline done-means (vitest green, R6 clean; live p…
giveUphope Oct 13, 2026
e2bb743
docs: refresh size table after Step 11 entry
giveUphope Oct 13, 2026
3fb897d
docs: Step 11 live verification done - inspector on face, wire tools=14
giveUphope Oct 13, 2026
e505bb0
docs: plan G72 route 4 - branch-local provider restore (Step 12, R22 …
giveUphope Oct 13, 2026
a7b85fd
feat: restore mcp_server provider subtree from main (G72 route 4, Ste…
giveUphope Oct 13, 2026
0a26762
docs: Step 12 provider restore offline done (685 green, face matches …
giveUphope Oct 13, 2026
9af4bbe
docs: plan provider contraction to true reference surface (Step 13, R…
giveUphope Oct 13, 2026
6ef32f5
refactor: contract provider restore to true reference surface (Step 13)
giveUphope Oct 13, 2026
6d22a12
docs: Step 13 contraction done (37 files, all gates green)
giveUphope Oct 13, 2026
f640613
docs: spec D19 (TS full stack, py zero) + TODO migration flow
giveUphope Oct 13, 2026
da30a5c
docs: spec D20 (provenance zero: LICENSE only) + provenance flow line
giveUphope Oct 13, 2026
c733401
docs: record the git-history ruling (orphan branch ts-fullstack; this…
giveUphope Oct 13, 2026
421f3cf
docs: refresh size table after the archive ruling note
giveUphope Oct 13, 2026
b452344
docs(archive): record the 2026-10-14 branch rename (names superseded,…
giveUphope Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 0 additions & 15 deletions .dockerignore

This file was deleted.

5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ ANTHROPIC_API_KEY=
OPEN_ROUTER_API_KEY=
XAI_API_KEY=

# Custom endpoints: every node in config/artemis.jsonc (default/nodes/presets)
# accepts "api_base", "api_key" and "api_key_env". Priority:
# config api_base > OPENAI_BASE_URL below > provider official endpoint
# OPENAI_BASE_URL=http://127.0.0.1:1234/v1

# Google Cloud Vision OCR (Optional - for advanced OCR processing)
OCR_API_KEY=

Expand Down
18 changes: 18 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Line endings are a repository fact, not a per-machine default. Without this file the
# working tree depends on each clone's core.autocrlf, so byte-based checks disagree
# across machines (changelogs #45 measured it, #47 closes it).
* text=auto eol=lf

# cmd.exe has a known failure surface with LF batch files (labels / goto).
*.bat text eol=crlf
*.cmd text eol=crlf

# No EOL conversion, no diff.
*.png binary
*.jpg binary
*.ico binary
*.gif binary
*.mp4 binary
*.mp3 binary
*.apk binary
*.keystore binary
162 changes: 78 additions & 84 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@

steps:
- name: Check out repository
uses: actions/checkout@v4

Check failure on line 33 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 33 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:33: unpinned action reference: action is not pinned to a hash (required by blanket policy)

- name: Set up Python 3.12
uses: actions/setup-python@v5

Check failure on line 36 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 36 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:36: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
python-version: "3.12"

Expand All @@ -41,7 +41,7 @@
run: python scripts/check_dependency_sources.py

- name: Set up uv
uses: astral-sh/setup-uv@v6

Check failure on line 44 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 44 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:44: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
enable-cache: true
cache-dependency-glob: uv.lock
Expand All @@ -55,12 +55,66 @@
- name: Lint Python
run: uv run ruff check .

# Kept un-gated on purpose: these are the mechanical keepers of the "one derived
# fact, one authority" rule (changelogs #31, #45) and must run on every event that
# produces a run. They finally did: run 38296414103 (event: push, 2026-10-12) executed
# this step on both OSes and it passed - which is what closed the "never observed in a
# run" blank left by #46 (changelogs #67).
- name: Check documentation gates
run: |
uv run python -X utf8 scripts/check_doc_registry.py
uv run python -X utf8 scripts/check_doc_tables.py
uv run python -X utf8 scripts/check_doc_tables.py --selftest

# Both of these are pure-python and cheap, so they sit BEFORE the Node/pnpm block: a step that
# fails there aborts the job, and that is exactly how the ratchet stayed invisible for six weeks
# (changelogs #69) - the first CI run that ever reached this job died two steps later.
- name: Enforce quality ratchets
run: uv run python scripts/quality_ratchet.py

- name: Type-check protected core modules
run: uv run pyright --project pyright-core.json

# Node is needed only by the fixture generator below; the runner image is not the authority
# for which version it gets. Set up pnpm first so setup-node can wire the pnpm store cache
# (same order as the plugin-contracts job).
- name: Set up pnpm
uses: pnpm/action-setup@v4

Check failure on line 82 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 82 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:82: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
version: 10

- name: Set up Node.js
uses: actions/setup-node@v4

Check failure on line 87 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 87 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:87: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
node-version: "22.22.3"
cache: pnpm
cache-dependency-path: plugins/dsh-autogamer/pnpm-lock.yaml

# The drift check imports the plugin's OWN MCP client, and that client only exists in
# `dist/` - a build product, not repository content. Without these two steps the step below
# dies with ERR_MODULE_NOT_FOUND, which is exactly how it first failed on the runner
# (run 38296414103) while passing on any dev machine that happens to have a stale dist
# lying around (changelogs #68).
- name: Build the plugin for the fixture check
working-directory: plugins/dsh-autogamer
run: |
pnpm install --frozen-lockfile
pnpm run build

# G62 (changelogs #52) made the py action surface runnable with no adb and no device, so the
# plugin's generated fixture can be re-derived here instead of being hand-carried -- until now
# no CI job ran scripts/spike-mcp.mjs at all (changelogs #53). Its default mode is the drift
# check: any difference between the live listing and the checked-in fixture exits non-zero.
# Reproduce both halves locally before changing this step - the runner's view is the one
# without a build product:
# rm -rf plugins/dsh-autogamer/dist
# SPIKE_COMMAND="uv run artemis mcp --type mock" node plugins/dsh-autogamer/scripts/spike-mcp.mjs # exit 1, ERR_MODULE_NOT_FOUND
# npm --prefix plugins/dsh-autogamer run build # then the same command exits 0
- name: Check the py action surface against the plugin fixture
env:
SPIKE_COMMAND: uv run artemis mcp --type mock
run: node plugins/dsh-autogamer/scripts/spike-mcp.mjs

# Device, cloud, manual, and end-to-end suites require dedicated
# infrastructure and intentionally do not run on GitHub-hosted runners.
- name: Run deterministic Python tests
Expand All @@ -77,104 +131,44 @@
--cov=third_party
--cov-fail-under=60

frontend:
name: Frontend tests and production build
runs-on: ubuntu-latest
plugin-contracts:
name: DSH plugin contracts / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
defaults:
run:
working-directory: apps/showcase_ui

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22.22.3"
cache: npm
cache-dependency-path: apps/showcase_ui/package-lock.json

- name: Install locked frontend dependencies
run: npm ci

- name: Run frontend tests
run: npm test -- --watch=false --browsers=ChromeHeadless

- name: Build frontend for production
run: npm run build

package:
name: Build and smoke-test Python packages
runs-on: ubuntu-latest
timeout-minutes: 30
working-directory: plugins/dsh-autogamer

steps:
- name: Check out repository
uses: actions/checkout@v4

Check failure on line 150 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 150 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:150: unpinned action reference: action is not pinned to a hash (required by blanket policy)

- name: Set up Python 3.12
uses: actions/setup-python@v5
# Before setup-node, so setup-node can wire the pnpm store cache.
- name: Set up pnpm
uses: pnpm/action-setup@v4

Check failure on line 154 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 154 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:154: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
python-version: "3.12"

- name: Set up uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: uv.lock
version: 10

- name: Set up Node.js
uses: actions/setup-node@v4

Check failure on line 159 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 159 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:159: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
node-version: "22.22.3"
cache: npm
cache-dependency-path: apps/showcase_ui/package-lock.json
cache: pnpm
cache-dependency-path: plugins/dsh-autogamer/pnpm-lock.yaml

- name: Build frontend assets for the wheel
run: |
npm ci --prefix apps/showcase_ui
npm run build --prefix apps/showcase_ui
# The @deepseek-ai/* devDependencies are the real DSH runtime the
# conformance suite boots; no desktop install, no model, no device.
- name: Install locked plugin dependencies
run: pnpm install --frozen-lockfile

- name: Build client and Artemis distributions
run: |
uv build --package artemis-client --wheel --out-dir dist
uv build --package artemis --wheel --sdist --out-dir dist

- name: Install wheels in a clean environment
run: |
uv venv .smoke-venv --python 3.12
uv pip install --python .smoke-venv/bin/python dist/artemis_client-*.whl dist/artemis-*.whl
- name: Build the plugin
run: pnpm run build

- name: Smoke-test installed package and CLI
shell: bash
run: |
smoke_dir="$RUNNER_TEMP/artemis-wheel-smoke"
mkdir -p "$smoke_dir"
cd "$smoke_dir"
source "$GITHUB_WORKSPACE/.smoke-venv/bin/activate"
python - <<'PY'
from importlib.metadata import files, version

import artemis
from artemis.resources import get_bundled_config_path, get_bundled_showcase_dist

bundled_config = get_bundled_config_path("artemis.jsonc")
bundled_ui = get_bundled_showcase_dist()
assert artemis.__version__ == version("artemis")
assert bundled_config is not None and bundled_config.is_file()
assert bundled_ui is not None and (bundled_ui / "index.html").is_file()
assert not any("node_modules" in str(path) for path in (files("artemis") or ()))
print(f"Installed Artemis {artemis.__version__} with bundled runtime resources")
PY
artemis --version
artemis --help

- name: Upload distributions
uses: actions/upload-artifact@v4
with:
name: python-distributions
path: dist/*
if-no-files-found: error
retention-days: 7
- name: Run plugin contract tests
run: pnpm test
19 changes: 10 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@ share/python-wheels/
*.egg
MANIFEST

# Virtual Environments
# Virtual Environments (all anchored: unanchored names also match subdirectories
# case-insensitively on Windows, which once hid src/env/preflight.ts from git)
.venv/
env/
venv/
ENV/
env.bak/
venv.bak/
/venv/
/ENV/
/venv.bak/
/env/
/env.bak/

# Testing & Coverage
.pytest_cache/
Expand Down Expand Up @@ -76,9 +77,7 @@ dmypy.json
.settings/

# Node & Frontend (Showcase UI)
apps/showcase_ui/node_modules/
apps/showcase_ui/.angular/
apps/showcase_ui/.angular/cache/
apps/showcase_ui_v2/node_modules/
.npm/
npm-debug.log*
yarn-debug.log*
Expand All @@ -105,6 +104,8 @@ live_screenshot*.png
.env
.env.*
!.env.example
credential_bindings.json
endpoint_library.json
*.pem
*.key

Expand Down
4 changes: 2 additions & 2 deletions .quality-baseline.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"broad_exception_handlers": 754,
"broad_exception_handlers": 763,
"silent_broad_exception_handlers": 0,
"type_ignore_comments": 18
"type_ignore_comments": 16
}
Loading
Loading