stratagate-dsh 0.3.13 → 0.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/client.js +2 -2
- package/dist/plugin.js +63 -29
- package/dist/plugin.js.map +1 -1
- package/docs/npm-release.md +52 -0
- package/package.json +1 -1
- package/docs/validation/first-login-graph-warning-20261013/render-comparison.json +0 -58
- package/docs/validation/first-login-graph-warning-20261013/tests.after.json +0 -1
- package/docs/validation/issue119-after.json +0 -30
- package/docs/validation/issue119-before.json +0 -94
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# npm 暂存发布
|
|
2
|
+
|
|
3
|
+
目标是把大包上传、网络重试放在用户认证之前。当前仅走 npm;GitHub 恢复前不执行 PR、CI、Tag、Release、trusted publishing 或 Roadmap 同步。
|
|
4
|
+
|
|
5
|
+
## 前置条件
|
|
6
|
+
|
|
7
|
+
- 用户已验收候选并明确授权正式发布;本脚本不会代替验收、源码审查或相关测试。
|
|
8
|
+
- 正式源码已固定,版本和锁文件一致,正式 `.tgz` 已构建、校验并记录 SHA-256。不得用候选版本代替正式版本,也不重新打包覆盖原文件。
|
|
9
|
+
- 使用满足项目 engines 的 Node,及支持 `npm stage publish/list/view/download/approve` 的 npm CLI。
|
|
10
|
+
- 复用现有 npm 登录。只有登录确实不可用时才要求用户登录;发布认证与账号登录是两件事。
|
|
11
|
+
|
|
12
|
+
## 执行
|
|
13
|
+
|
|
14
|
+
使用 `scripts/release-npm.mjs`;所有路径参数可为绝对路径。以下 PowerShell 变量需替换为本次真实证据,不要复制历史临时 npm 路径或硬编码 registry IP:
|
|
15
|
+
|
|
16
|
+
```powershell
|
|
17
|
+
$releaseArgs = @(
|
|
18
|
+
'--artifact', '<已校验的正式包.tgz>',
|
|
19
|
+
'--sha256', '<审查时记录的SHA-256>',
|
|
20
|
+
'--evidence', '<本次独立证据目录>',
|
|
21
|
+
'--npm-cli', '<支持stage的npm-cli.js>',
|
|
22
|
+
'--userconfig', '<当前有效的npmrc>'
|
|
23
|
+
)
|
|
24
|
+
node scripts/release-npm.mjs @releaseArgs --action status
|
|
25
|
+
node scripts/release-npm.mjs @releaseArgs --action stage
|
|
26
|
+
# validating 时等待后再执行 stage,复用同一个 stageId,不重新上传。
|
|
27
|
+
# STAGE_VERIFIED 后,才进入需要用户在 Edge 完成认证的步骤。
|
|
28
|
+
node scripts/release-npm.mjs @releaseArgs --action approve
|
|
29
|
+
node scripts/release-npm.mjs @releaseArgs --action verify
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`status` 为默认操作,只查询远端、记录本地状态;已发布但尚未做完整下载核验时返回 `PUBLISHED_NEEDS_VERIFICATION`,执行 `verify` 下载核验即可,不再上传或认证。`stage` 上传或复用暂存包,并下载比对 SHA-256;`approve` 只批准已有、通过字节校验的暂存包,不会上传新包,批准成功后自动核验公开包。发布过程中保持进程运行,给用户实际返回的认证链接,禁止打开内置浏览器。用户确认完成后先检查原进程,不要另起一条 approve。
|
|
33
|
+
|
|
34
|
+
脚本保留 `npm-release-state.json` 和下载的暂存包,使用进程锁避免同一证据目录并发认证。记录不包含 npm token、OTP 或 npmrc 内容。脚本只调用官方 registry,不关闭 TLS 校验,也不更改系统代理或 DNS。
|
|
35
|
+
|
|
36
|
+
## 中断恢复
|
|
37
|
+
|
|
38
|
+
- 每次先查公开版本:同版本内容一致就核验并结束,不再上传或认证;内容冲突则停止。tag 不一致单独报告,不重新发布。
|
|
39
|
+
- 上传结果不明:先 `status`,远端存在匹配暂存包就复用。无远端记录时不自动再次上传;核实失败后才用 `stage --retry-upload`。本地没有记录时也会查询远端,避免跨进程重传。
|
|
40
|
+
- 认证或批准请求断线:先检查原进程、公开版本和 stage 状态。脚本保留 `APPROVAL_UNCERTAIN`,不自动再认证。确认确实未发布且需要重试后才用 `approve --retry-approval`。
|
|
41
|
+
- 原进程仍运行时等待原进程;不要创建新认证链接。失效链接只在实际重新发起必要认证时替换。
|
|
42
|
+
- 网络、权限、服务器校验失败时保留包和证据,先排查原因,不退回直接 `npm publish` 循环,不通过关闭二次认证来减少操作。
|
|
43
|
+
|
|
44
|
+
通常只需要最后一次发布认证;登录过期、认证链接过期或服务端明确要求时仍可能需要额外认证,不能保证永远只有一次。
|
|
45
|
+
|
|
46
|
+
## 本地验证脚本
|
|
47
|
+
|
|
48
|
+
```powershell
|
|
49
|
+
node --test tests/npm-release.test.mjs
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
测试使用模拟 npm 和 registry,覆盖恢复、重复上传防护、认证失败和字节冲突,不访问真实发布接口。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stratagate-dsh",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.15",
|
|
4
4
|
"description": "Recent conversations stay vivid. Older ones fade into summaries, not oblivion. StrataGate gives DeepSeek Harness six-layer, time-decaying memory, while lasting events and relationships settle into a knowledge graph. Bring your memories from other AIs with you—no need to start over.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"date": "2026-10-13",
|
|
3
|
-
"input": "overview: undefined (no workspace memory snapshot)",
|
|
4
|
-
"before": [
|
|
5
|
-
"div",
|
|
6
|
-
{
|
|
7
|
-
"className": "sg-memory-alerts",
|
|
8
|
-
"aria-live": "polite"
|
|
9
|
-
},
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
"button",
|
|
13
|
-
{
|
|
14
|
-
"key": "graph-incomplete",
|
|
15
|
-
"type": "button",
|
|
16
|
-
"className": "sg-memory-alert attention",
|
|
17
|
-
"aria-label": "知识图谱更新未完成 · 0/0 Events。查看详情。查看详情。"
|
|
18
|
-
},
|
|
19
|
-
[
|
|
20
|
-
"span",
|
|
21
|
-
{
|
|
22
|
-
"className": "sg-memory-alert-mark",
|
|
23
|
-
"aria-hidden": "true"
|
|
24
|
-
},
|
|
25
|
-
"⚠"
|
|
26
|
-
],
|
|
27
|
-
[
|
|
28
|
-
"span",
|
|
29
|
-
null,
|
|
30
|
-
[
|
|
31
|
-
"span",
|
|
32
|
-
{
|
|
33
|
-
"className": "sg-memory-alert-title"
|
|
34
|
-
},
|
|
35
|
-
"知识图谱更新未完成 · 0/0 Events"
|
|
36
|
-
],
|
|
37
|
-
[
|
|
38
|
-
"span",
|
|
39
|
-
{
|
|
40
|
-
"className": "sg-memory-alert-copy"
|
|
41
|
-
},
|
|
42
|
-
"查看详情。"
|
|
43
|
-
]
|
|
44
|
-
],
|
|
45
|
-
[
|
|
46
|
-
"span",
|
|
47
|
-
{
|
|
48
|
-
"className": "sg-chevron",
|
|
49
|
-
"aria-hidden": "true"
|
|
50
|
-
},
|
|
51
|
-
"›"
|
|
52
|
-
]
|
|
53
|
-
]
|
|
54
|
-
]
|
|
55
|
-
],
|
|
56
|
-
"after": null,
|
|
57
|
-
"bundled": null
|
|
58
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"numTotalTestSuites":4,"numPassedTestSuites":4,"numFailedTestSuites":0,"numPendingTestSuites":0,"numTotalTests":111,"numPassedTests":111,"numFailedTests":0,"numPendingTests":0,"numTodoTests":0,"snapshot":{"added":0,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0,"didUpdate":false},"startTime":1791874733227,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract registers its settings section through the DSH module loader","status":"passed","title":"registers its settings section through the DSH module loader","duration":18.384799999999927,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps Settings available when chat get setup fails","status":"passed","title":"keeps Settings available when chat get setup fails","duration":18.782500000000027,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps Settings available when chat event setup fails","status":"passed","title":"keeps Settings available when chat event setup fails","duration":3.2268000000000256,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps Settings available when chat inject setup fails","status":"passed","title":"keeps Settings available when chat inject setup fails","duration":3.4814999999999827,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps Settings available when chat register setup fails","status":"passed","title":"keeps Settings available when chat register setup fails","duration":3.9908000000000357,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract declares the supported DSH Conversation package and service contracts","status":"passed","title":"declares the supported DSH Conversation package and service contracts","duration":0.6525000000000318,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract parses and consumes only the StrataGate feedback deep link while preserving unrelated URL state","status":"passed","title":"parses and consumes only the StrataGate feedback deep link while preserving unrelated URL state","duration":3.059500000000071,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract prefers formal Settings navigation for same-origin Feedback links and falls back to the HTTP deep link","status":"passed","title":"prefers formal Settings navigation for same-origin Feedback links and falls back to the HTTP deep link","duration":4.646200000000022,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract accepts Feedback route state from the Settings host without reading localized DOM controls","status":"passed","title":"accepts Feedback route state from the Settings host without reading localized DOM controls","duration":5.357399999999984,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract opens a requested graph node through Settings navigation and reports failures","status":"passed","title":"opens a requested graph node through Settings navigation and reports failures","duration":3.3794000000000324,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract maps participants from node ids, deduplicates aliases, and keeps text-only pills inert","status":"passed","title":"maps participants from node ids, deduplicates aliases, and keeps text-only pills inert","duration":4.273300000000063,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract renders solid weight trajectories with a wider invisible hover target and collision-aware labels","status":"passed","title":"renders solid weight trajectories with a wider invisible hover target and collision-aware labels","duration":5.320899999999938,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps short-term status in the chat content flow and does not register a composer dock","status":"passed","title":"keeps short-term status in the chat content flow and does not register a composer dock","duration":3.79079999999999,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract binds display settings through the DSH 0.1.7 config form when available","status":"passed","title":"binds display settings through the DSH 0.1.7 config form when available","duration":2.56899999999996,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract defaults all chat status UI to visible and combines the master and child preferences","status":"passed","title":"defaults all chat status UI to visible and combines the master and child preferences","duration":15.428300000000036,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract maps progress and multiple persisted Blocks to only their real Turn positions","status":"passed","title":"maps progress and multiple persisted Blocks to only their real Turn positions","duration":16.234199999999987,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract routes session switches to the correct workspace and rebuilds status from persisted API data","status":"passed","title":"routes session switches to the correct workspace and rebuilds status from persisted API data","duration":14.491300000000024,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps preview selection read-only and leaves the actual layer visibly marked","status":"passed","title":"keeps preview selection read-only and leaves the actual layer visibly marked","duration":2.1965000000000146,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract publishes adopted memory citations into the closing answer turn tail","status":"passed","title":"publishes adopted memory citations into the closing answer turn tail","duration":5.249000000000024,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract shows a quiet answer-tail note when retrieved memories were not adopted","status":"passed","title":"shows a quiet answer-tail note when retrieved memories were not adopted","duration":3.3262999999999465,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps the project brand, mascot, usage count, and archived GitHub markup","status":"passed","title":"keeps the project brand, mascot, usage count, and archived GitHub markup","duration":2.5498000000000047,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract replaces the header community links with email contact and preserves the dormant Star link","status":"passed","title":"replaces the header community links with email contact and preserves the dormant Star link","duration":22.55269999999996,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract shows contact details and handles available clipboard without requiring a mail application","status":"passed","title":"shows contact details and handles available clipboard without requiring a mail application","duration":5.241499999999974,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract shows contact details and handles missing clipboard without requiring a mail application","status":"passed","title":"shows contact details and handles missing clipboard without requiring a mail application","duration":3.615699999999947,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract shows contact details and handles rejected clipboard without requiring a mail application","status":"passed","title":"shows contact details and handles rejected clipboard without requiring a mail application","duration":3.23599999999999,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps contact details and manual fallback visible when desktop mail navigation throws","status":"passed","title":"keeps contact details and manual fallback visible when desktop mail navigation throws","duration":3.312000000000012,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract encodes an email subject while keeping the report out of the mailto URL","status":"passed","title":"encodes an email subject while keeping the report out of the mailto URL","duration":3.4336999999999307,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract retains a manual report fallback when the clipboard missing","status":"passed","title":"retains a manual report fallback when the clipboard missing","duration":2.788000000000011,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract retains a manual report fallback when the clipboard throws","status":"passed","title":"retains a manual report fallback when the clipboard throws","duration":4.566400000000044,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract retains a manual report fallback when the clipboard rejects","status":"passed","title":"retains a manual report fallback when the clipboard rejects","duration":2.6281999999999925,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps the copied report and offers the email address when mail application launch fails","status":"passed","title":"keeps the copied report and offers the email address when mail application launch fails","duration":2.671699999999987,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract copies the visible feedback email address without opening a mail application","status":"passed","title":"copies the visible feedback email address without opening a mail application","duration":4.5625,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract uses the user-defined DSH Workspace title and keeps the compact header collision-free","status":"passed","title":"uses the user-defined DSH Workspace title and keeps the compact header collision-free","duration":2.4102000000000317,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract uses the memory-first three-part information architecture","status":"passed","title":"uses the memory-first three-part information architecture","duration":4.009100000000103,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps exactly the four requested primary entries in More and nests diagnostics under Advanced","status":"passed","title":"keeps exactly the four requested primary entries in More and nests diagnostics under Advanced","duration":3.2351999999999634,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract copies the real data directory and sends the native open request from Advanced settings","status":"passed","title":"copies the real data directory and sends the native open request from Advanced settings","duration":4.100799999999936,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract shows eleven compact Profile rows on the primary page and no Profile editor in Advanced settings","status":"passed","title":"shows eleven compact Profile rows on the primary page and no Profile editor in Advanced settings","duration":10.552599999999984,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps an existing home city visible without relabeling it as the temporary current city","status":"passed","title":"keeps an existing home city visible without relabeling it as the temporary current city","duration":3.5004000000000133,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract polls only while visible, keeps an edit draft, and saves only the current field after conflict resolution","status":"passed","title":"polls only while visible, keeps an edit draft, and saves only the current field after conflict resolution","duration":13.666500000000042,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract inherits the resolved light, dark, or system appearance from DSH theme tokens","status":"passed","title":"inherits the resolved light, dark, or system appearance from DSH theme tokens","duration":1.4086999999999534,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps long-term memory summary-first and moves complex exploration to full screen","status":"passed","title":"keeps long-term memory summary-first and moves complex exploration to full screen","duration":1.9278000000000475,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps the full-screen explorer anchored to the viewport","status":"passed","title":"keeps the full-screen explorer anchored to the viewport","duration":0.949799999999982,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract provides synchronized knowledge graph zoom controls","status":"passed","title":"provides synchronized knowledge graph zoom controls","duration":1.0741999999999052,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract makes graph and memory list truncation explicit and pageable","status":"passed","title":"makes graph and memory list truncation explicit and pageable","duration":1.9501000000000204,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract resets Event pagination when timeline search parameters change or clear","status":"passed","title":"resets Event pagination when timeline search parameters change or clear","duration":52.53730000000007,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract sizes graph nodes by stable long-term importance without conflating selection","status":"passed","title":"sizes graph nodes by stable long-term importance without conflating selection","duration":2.328800000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract renders server-side Leiden communities with Cytoscape.js and fCoSE","status":"passed","title":"renders server-side Leiden communities with Cytoscape.js and fCoSE","duration":2.318899999999985,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract makes a well-supported workspace project larger than a sparsely mentioned tool","status":"passed","title":"makes a well-supported workspace project larger than a sparsely mentioned tool","duration":2.986599999999953,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps all feedback data local and puts only the paste hint in email links","status":"passed","title":"keeps all feedback data local and puts only the paste hint in email links","duration":2.554899999999975,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps an empty feedback page incomplete and formats structured AI drafts without guessing","status":"passed","title":"keeps an empty feedback page incomplete and formats structured AI drafts without guessing","duration":2.629099999999994,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract restores draft fields independently so a late GET cannot overwrite edited values","status":"passed","title":"restores draft fields independently so a late GET cannot overwrite edited values","duration":3.124500000000012,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract shows a persistent top AI-copy notice with retry, close, sticky, and scroll visibility handling","status":"passed","title":"shows a persistent top AI-copy notice with retry, close, sticky, and scroll visibility handling","duration":6.74369999999999,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract builds complete option-controlled reports without the former 4500 character truncation","status":"passed","title":"builds complete option-controlled reports without the former 4500 character truncation","duration":3.40300000000002,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract redacts nested sensitive values without breaking the attached JSON or recent errors","status":"passed","title":"redacts nested sensitive values without breaking the attached JSON or recent errors","duration":2.9839000000000624,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract redacts complete free-text credentials without damaging JSON","status":"passed","title":"redacts complete free-text credentials without damaging JSON","duration":3.1147000000000844,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract copies the frozen report and opens an Issue URL containing only title and the paste hint","status":"passed","title":"copies the frozen report and opens an Issue URL containing only title and the paste hint","duration":3.582200000000057,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps copying and email activation separate while draft saving is pending","status":"passed","title":"keeps copying and email activation separate while draft saving is pending","duration":2.9507999999999583,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract shows the report only on demand and reuses the exact preview for copy and download","status":"passed","title":"shows the report only on demand and reuses the exact preview for copy and download","duration":9.576400000000035,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps failures reassuring and exposes related Block settings under More","status":"passed","title":"keeps failures reassuring and exposes related Block settings under More","duration":3.6585000000000036,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract uses one actionable status bar for background processing and retryable failures","status":"passed","title":"uses one actionable status bar for background processing and retryable failures","duration":2.9039999999999964,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract does not warn before a workspace memory snapshot exists (undefined)","status":"passed","title":"does not warn before a workspace memory snapshot exists (undefined)","duration":3.4184000000000196,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract does not warn before a workspace memory snapshot exists (null)","status":"passed","title":"does not warn before a workspace memory snapshot exists (null)","duration":3.145399999999995,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract does not warn before a workspace memory snapshot exists ({})","status":"passed","title":"does not warn before a workspace memory snapshot exists ({})","duration":3.2292999999999665,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract does not warn before a workspace memory snapshot exists ({\"graphMigration\":null})","status":"passed","title":"does not warn before a workspace memory snapshot exists ({\"graphMigration\":null})","duration":2.8047000000000253,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract preserves real task notices when Event counts are missing or zero","status":"passed","title":"preserves real task notices when Event counts are missing or zero","duration":3.190399999999954,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps the empty long-term graph view quiet while preserving actual graph work","status":"passed","title":"keeps the empty long-term graph view quiet while preserving actual graph work","duration":22.29200000000003,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps the empty long-term timeline view quiet while preserving actual graph work","status":"passed","title":"keeps the empty long-term timeline view quiet while preserving actual graph work","duration":17.923700000000053,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract renders separate product states for summary, extraction, and graph work","status":"passed","title":"renders separate product states for summary, extraction, and graph work","duration":3.94380000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract separates status refresh from per-job retry with explicit feedback","status":"passed","title":"separates status refresh from per-job retry with explicit feedback","duration":2.5661999999999807,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract shows clipboard failure immediately without waiting for draft persistence","status":"passed","title":"shows clipboard failure immediately without waiting for draft persistence","duration":3.4319999999999027,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract keeps Event Extraction and Graph Projection separate in the status details","status":"passed","title":"keeps Event Extraction and Graph Projection separate in the status details","duration":52.83870000000002,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract uses the clicked stage for detail titles and only exposes terminal retry actions","status":"passed","title":"uses the clicked stage for detail titles and only exposes terminal retry actions","duration":5.128699999999981,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate Web client contract"],"fullName":"StrataGate Web client contract does not claim legacy background work is empty when the old server omits job details","status":"passed","title":"does not claim legacy background work is empty when the old server omits job details","duration":4.096400000000017,"failureMessages":[],"meta":{}}],"startTime":1791874733781,"endTime":1791874734267.0964,"status":"passed","message":"","name":"C:/Users/19007/Documents/StrataGate/tests/client.test.ts"},{"assertionResults":[{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes exposes optional Event metadata while keeping legacy API cards unchanged","status":"passed","title":"exposes optional Event metadata while keeping legacy API cards unchanged","duration":5.528099999999995,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes reports and opens only the configured StrataGate data directory","status":"passed","title":"reports and opens only the configured StrataGate data directory","duration":0.5332000000000789,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes reads and saves local feedback drafts through the feedback route","status":"passed","title":"reads and saves local feedback drafts through the feedback route","duration":0.6374000000000706,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes lists agent-recorded memories through a read-only route","status":"passed","title":"lists agent-recorded memories through a read-only route","duration":0.46329999999989013,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes supports preview, commit, and undo through the import route","status":"passed","title":"supports preview, commit, and undo through the import route","duration":1.1304000000000087,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes serves the complete external memory export prompt","status":"passed","title":"serves the complete external memory export prompt","duration":0.3728000000000975,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes does not label a block without an extraction job as actively processing","status":"passed","title":"does not label a block without an extraction job as actively processing","duration":2.636900000000196,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes reports Summary jobs in overview and Block processing state","status":"passed","title":"reports Summary jobs in overview and Block processing state","duration":14.555200000000013,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes ignores legacy Element projection jobs and separates terminal extraction and graph failures","status":"passed","title":"ignores legacy Element projection jobs and separates terminal extraction and graph failures","duration":1.432399999999916,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes rejects Block Summary retries while the job is not failed","status":"passed","title":"rejects Block Summary retries while the job is not failed","duration":0.24299999999993815,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes retries a specific failed job through the unified endpoint and reports model failures","status":"passed","title":"retries a specific failed job through the unified endpoint and reports model failures","duration":2.0190999999999804,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes summarizes namespaces and returns paginated memories","status":"passed","title":"summarizes namespaces and returns paginated memories","duration":4.613299999999981,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes filters the complete Event timeline before pagination","status":"passed","title":"filters the complete Event timeline before pagination","duration":30.167599999999993,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes serves one revision-aware dashboard snapshot and returns 304 when unchanged","status":"passed","title":"serves one revision-aware dashboard snapshot and returns 304 when unchanged","duration":4.766599999999926,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes builds Event weight trajectories from real adoption receipts and the core weight function","status":"passed","title":"builds Event weight trajectories from real adoption receipts and the core weight function","duration":3.340900000000147,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes keeps the adoption count but hides incomplete legacy receipt history","status":"passed","title":"keeps the adoption count but hides incomplete legacy receipt history","duration":0.8138000000001284,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes does not turn a retrieval timestamp into a weight reinforcement node","status":"passed","title":"does not turn a retrieval timestamp into a weight reinforcement node","duration":0.5184999999999036,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes uses a dashed bounded trend for a migrated Event with a delayed legacy weight anchor","status":"passed","title":"uses a dashed bounded trend for a migrated Event with a delayed legacy weight anchor","duration":1.062900000000127,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes draws every confirmed adoption and a solid tail when older adoption turns are missing","status":"passed","title":"draws every confirmed adoption and a solid tail when older adoption turns are missing","duration":1.8170999999999822,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes merges multiple adoptions in the same turn into one trajectory node","status":"passed","title":"merges multiple adoptions in the same turn into one trajectory node","duration":0.571999999999889,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes falls back from formedTurn to source Block, earliest adoption, then current-only","status":"passed","title":"falls back from formedTurn to source Block, earliest adoption, then current-only","duration":1.0472999999999502,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes changes the dashboard ETag when the plugin version changes without a memory revision change","status":"passed","title":"changes the dashboard ETag when the plugin version changes without a memory revision change","duration":1.5829000000001088,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes filters short-term Blocks and the open tail by the selected conversation","status":"passed","title":"filters short-term Blocks and the open tail by the selected conversation","duration":1.0140999999998712,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes maps Block and open progress to receipt-backed DSH Turn numbers when turns have gaps","status":"passed","title":"maps Block and open progress to receipt-backed DSH Turn numbers when turns have gaps","duration":0.7044000000000779,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes recovers legacy conversation boundaries from ingestion receipts without rewriting mixed Blocks","status":"passed","title":"recovers legacy conversation boundaries from ingestion receipts without rewriting mixed Blocks","duration":1.386600000000044,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes expands source evidence with server-side secret redaction","status":"passed","title":"expands source evidence with server-side secret redaction","duration":0.5434999999999945,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes returns only participant node ids with aliases for Event participant pills","status":"passed","title":"returns only participant node ids with aliases for Event participant pills","duration":1.136700000000019,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes reports the actual decayed layer and its size relative to L5","status":"passed","title":"reports the actual decayed layer and its size relative to L5","duration":0.41840000000001965,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes rebuilds deterministic preview layers for Blocks stored by older versions","status":"passed","title":"rebuilds deterministic preview layers for Blocks stored by older versions","duration":0.39629999999988286,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes exposes sealed-but-pending Block compression state separately from long-term processing","status":"passed","title":"exposes sealed-but-pending Block compression state separately from long-term processing","duration":0.33750000000009095,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes returns the adopted graph node with its directly related graph neighborhood","status":"passed","title":"returns the adopted graph node with its directly related graph neighborhood","duration":0.5353000000000065,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes filters forgotten Graph metadata and Events from citation source details","status":"passed","title":"filters forgotten Graph metadata and Events from citation source details","duration":0.5576000000000931,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes expands a block into its organized events and elements","status":"passed","title":"expands a block into its organized events and elements","duration":0.7123000000001412,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes actively lifts a Block to one requested layer","status":"passed","title":"actively lifts a Block to one requested layer","duration":0.5242000000000644,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes links answer audit records to events and original messages","status":"passed","title":"links answer audit records to events and original messages","duration":0.23730000000000473,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes keeps per-request caps while allowing later memory and audit pages","status":"passed","title":"keeps per-request caps while allowing later memory and audit pages","duration":0.479799999999841,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes updates the global Block settings while memory routes remain read-only","status":"passed","title":"updates the global Block settings while memory routes remain read-only","duration":0.5613999999998214,"failureMessages":[],"meta":{}},{"ancestorTitles":["StrataGate admin routes"],"fullName":"StrataGate admin routes reads and updates one shared Profile field from Settings","status":"passed","title":"reads and updates one shared Profile field from Settings","duration":1.8679999999999382,"failureMessages":[],"meta":{}}],"startTime":1791874734476,"endTime":1791874734567.868,"status":"passed","message":"","name":"C:/Users/19007/Documents/StrataGate/tests/web.test.ts"}]}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"verification": "deterministic mocked streams, not live model generation",
|
|
3
|
-
"base": "e954eaf2f2cbbef4bb6226a2ebb35191424868c2",
|
|
4
|
-
"rows": [
|
|
5
|
-
{
|
|
6
|
-
"initialCharacters": 656,
|
|
7
|
-
"retryOverview": "same",
|
|
8
|
-
"success": true,
|
|
9
|
-
"calls": 1
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"initialCharacters": 778,
|
|
13
|
-
"retryOverview": "same",
|
|
14
|
-
"success": true,
|
|
15
|
-
"calls": 1
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"initialCharacters": 1000,
|
|
19
|
-
"retryOverview": "same",
|
|
20
|
-
"success": true,
|
|
21
|
-
"calls": 1
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"initialCharacters": 1001,
|
|
25
|
-
"retryOverview": "empty",
|
|
26
|
-
"success": true,
|
|
27
|
-
"calls": 2
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"verification": "deterministic mocked streams, not live model generation",
|
|
3
|
-
"base": "e954eaf2f2cbbef4bb6226a2ebb35191424868c2",
|
|
4
|
-
"rows": [
|
|
5
|
-
{
|
|
6
|
-
"initialCharacters": 656,
|
|
7
|
-
"retryOverview": "same",
|
|
8
|
-
"success": false,
|
|
9
|
-
"calls": 2,
|
|
10
|
-
"diagnostics": {
|
|
11
|
-
"category": "validation-failed",
|
|
12
|
-
"reason": "overview.text exceeds the character limit",
|
|
13
|
-
"eventCount": 1,
|
|
14
|
-
"candidateTopicCount": 1,
|
|
15
|
-
"estimatedInputTokens": 3769,
|
|
16
|
-
"requestedOutputTokens": 32768,
|
|
17
|
-
"maxOutputTokens": 32768,
|
|
18
|
-
"modelCalls": 2,
|
|
19
|
-
"actualCharacters": 656,
|
|
20
|
-
"minCharacters": 1,
|
|
21
|
-
"maxCharacters": 600,
|
|
22
|
-
"fieldPath": "topics[0].overview[1].text",
|
|
23
|
-
"finishReason": "tool-calls",
|
|
24
|
-
"reasoningOff": "unavailable",
|
|
25
|
-
"reasoningObserved": false
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"initialCharacters": 778,
|
|
30
|
-
"retryOverview": "same",
|
|
31
|
-
"success": false,
|
|
32
|
-
"calls": 2,
|
|
33
|
-
"diagnostics": {
|
|
34
|
-
"category": "validation-failed",
|
|
35
|
-
"reason": "overview.text exceeds the character limit",
|
|
36
|
-
"eventCount": 1,
|
|
37
|
-
"candidateTopicCount": 1,
|
|
38
|
-
"estimatedInputTokens": 3769,
|
|
39
|
-
"requestedOutputTokens": 32768,
|
|
40
|
-
"maxOutputTokens": 32768,
|
|
41
|
-
"modelCalls": 2,
|
|
42
|
-
"actualCharacters": 778,
|
|
43
|
-
"minCharacters": 1,
|
|
44
|
-
"maxCharacters": 600,
|
|
45
|
-
"fieldPath": "topics[0].overview[1].text",
|
|
46
|
-
"finishReason": "tool-calls",
|
|
47
|
-
"reasoningOff": "unavailable",
|
|
48
|
-
"reasoningObserved": false
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
"initialCharacters": 1000,
|
|
53
|
-
"retryOverview": "same",
|
|
54
|
-
"success": false,
|
|
55
|
-
"calls": 2,
|
|
56
|
-
"diagnostics": {
|
|
57
|
-
"category": "validation-failed",
|
|
58
|
-
"reason": "overview.text exceeds the character limit",
|
|
59
|
-
"eventCount": 1,
|
|
60
|
-
"candidateTopicCount": 1,
|
|
61
|
-
"estimatedInputTokens": 3769,
|
|
62
|
-
"requestedOutputTokens": 32768,
|
|
63
|
-
"maxOutputTokens": 32768,
|
|
64
|
-
"modelCalls": 2,
|
|
65
|
-
"actualCharacters": 1000,
|
|
66
|
-
"minCharacters": 1,
|
|
67
|
-
"maxCharacters": 600,
|
|
68
|
-
"fieldPath": "topics[0].overview[1].text",
|
|
69
|
-
"finishReason": "tool-calls",
|
|
70
|
-
"reasoningOff": "unavailable",
|
|
71
|
-
"reasoningObserved": false
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"initialCharacters": 1001,
|
|
76
|
-
"retryOverview": "empty",
|
|
77
|
-
"success": false,
|
|
78
|
-
"calls": 2,
|
|
79
|
-
"diagnostics": {
|
|
80
|
-
"category": "validation-failed",
|
|
81
|
-
"reason": "Topic retry must replace invalid overview without removing entries.",
|
|
82
|
-
"eventCount": 1,
|
|
83
|
-
"candidateTopicCount": 1,
|
|
84
|
-
"estimatedInputTokens": 3769,
|
|
85
|
-
"requestedOutputTokens": 32768,
|
|
86
|
-
"maxOutputTokens": 32768,
|
|
87
|
-
"modelCalls": 2,
|
|
88
|
-
"finishReason": "tool-calls",
|
|
89
|
-
"reasoningOff": "unavailable",
|
|
90
|
-
"reasoningObserved": false
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
}
|