aki-pro-max 2.3.3

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.
Files changed (83) hide show
  1. package/.env.example +34 -0
  2. package/AICOWORKER-NATIVE-TOOLS.md +60 -0
  3. package/CLAUDE-LIVE-TOOLS-EVIDENCE.json +94 -0
  4. package/FULL-TRACE-EVIDENCE.json +109 -0
  5. package/ISSUE-1-REMOTE.json +1 -0
  6. package/ISSUE-2-POSTREVIEW.json +1 -0
  7. package/ISSUE-2-REMOTE.json +1 -0
  8. package/KEY-ROTATION-EVIDENCE.json +9 -0
  9. package/LICENSE +21 -0
  10. package/PMN-9ROUTER-FINAL.md +13 -0
  11. package/RAPID-BASIL-RECONCILIATION.json +10 -0
  12. package/README.md +232 -0
  13. package/RELEASE-ARCHIVE.json +15 -0
  14. package/SECURITY-RECONCILIATION.json +30 -0
  15. package/SECURITY.md +16 -0
  16. package/TEST-ISSUES12-FINAL.txt +0 -0
  17. package/TEST-ISSUES12-HARNESS.txt +0 -0
  18. package/VERIFICATION-REPORT.md +58 -0
  19. package/VERIFIER-ISSUES12-FINAL.txt +0 -0
  20. package/VERIFY-RELEASE-ISSUES12-FINAL.txt +0 -0
  21. package/VERIFY-RELEASE-ISSUES12-HARNESS.txt +0 -0
  22. package/bin/aki-pro-max.js +98 -0
  23. package/docs/ADMIN-GUI-CONTRACT.md +29 -0
  24. package/docs/ARCHITECTURE.md +109 -0
  25. package/docs/CAPABILITY-MATRIX.md +44 -0
  26. package/docs/CORRELATION-DESIGN.md +226 -0
  27. package/docs/FAIL-CLOSED-ISSUE-HARNESS.md +21 -0
  28. package/docs/WEB-SESSION-TRANSPORT-DESIGN.md +423 -0
  29. package/docs/assets/control-plane.jpg +0 -0
  30. package/gitleaks-report-all.json +1 -0
  31. package/gitleaks-report-latest.json +1 -0
  32. package/gitleaks-report.json +1 -0
  33. package/package.json +33 -0
  34. package/scripts/eventual-tool-loop.mjs +55 -0
  35. package/scripts/install-local.ps1 +35 -0
  36. package/scripts/live-eventual-multitool.mjs +18 -0
  37. package/scripts/upgrade-admin-v232.mjs +33 -0
  38. package/scripts/verify-issue-closure.mjs +81 -0
  39. package/scripts/verify-release.mjs +31 -0
  40. package/src/admin-auth.mjs +94 -0
  41. package/src/admin.mjs +133 -0
  42. package/src/canonical.mjs +23 -0
  43. package/src/config.mjs +88 -0
  44. package/src/correlation-store.mjs +120 -0
  45. package/src/errors.mjs +18 -0
  46. package/src/index.mjs +4 -0
  47. package/src/openai-response.mjs +72 -0
  48. package/src/openai.mjs +104 -0
  49. package/src/postman-events.mjs +43 -0
  50. package/src/postman-request.mjs +49 -0
  51. package/src/schema.mjs +35 -0
  52. package/src/server.mjs +73 -0
  53. package/src/session-store.mjs +48 -0
  54. package/src/sse.mjs +13 -0
  55. package/src/transport.mjs +90 -0
  56. package/src/web-session-events.mjs +358 -0
  57. package/src/web-session-request.mjs +280 -0
  58. package/test/9router-executor.integration.test.mjs +207 -0
  59. package/test/admin-auth.test.mjs +47 -0
  60. package/test/admin.test.mjs +68 -0
  61. package/test/config.test.mjs +14 -0
  62. package/test/contract.test.mjs +14 -0
  63. package/test/correlation-store.test.mjs +19 -0
  64. package/test/correlation.integration.test.mjs +48 -0
  65. package/test/eventual-tool-loop.test.mjs +42 -0
  66. package/test/fixtures/text.json +8 -0
  67. package/test/fixtures/tool.json +7 -0
  68. package/test/fixtures/web-session-observed-done.json +12 -0
  69. package/test/fixtures/web-session-tool-fragments.json +14 -0
  70. package/test/full-ingress/alias-loader.mjs +22 -0
  71. package/test/full-ingress/run-full-ingress.mjs +207 -0
  72. package/test/full-ingress/seed-9router.mjs +36 -0
  73. package/test/helpers.mjs +9 -0
  74. package/test/issue-closure-harness.test.mjs +49 -0
  75. package/test/model-thinking.test.mjs +20 -0
  76. package/test/protocol.test.mjs +16 -0
  77. package/test/request.test.mjs +10 -0
  78. package/test/session-store.test.mjs +20 -0
  79. package/test/web-session-builder.test.mjs +124 -0
  80. package/test/web-session-events.test.mjs +241 -0
  81. package/test/web-session-integration.test.mjs +103 -0
  82. package/test/web-session-tools.test.mjs +52 -0
  83. package/version.json +8 -0
package/.env.example ADDED
@@ -0,0 +1,34 @@
1
+ PROVIDER_HOST=127.0.0.1
2
+ PROVIDER_PORT=8787
3
+ PROVIDER_API_KEY=replace-with-9router-to-facade-bearer
4
+ PROVIDER_MODELS=replace-with-explicit-postman-model-id
5
+ POSTMAN_WORKSPACE_ID=replace-with-workspace-id
6
+
7
+ # Strategy must be explicit for web_session. Default remains access_token when this field is absent.
8
+ POSTMAN_TRANSPORT_STRATEGY=access_token
9
+ POSTMAN_ORIGIN=https://gateway.postman.com
10
+ POSTMAN_CHAT_PATH=/chat
11
+ POSTMAN_ACCESS_TOKEN=replace-with-authorized-upstream-token
12
+ POSTMAN_APP_VERSION=offline-adapter/0.1.0
13
+
14
+ # Mutually exclusive web_session example (comment out access-token-only fields above first):
15
+ # POSTMAN_TRANSPORT_STRATEGY=web_session
16
+ # POSTMAN_SESSION_COOKIE=your_session_cookie_here
17
+ # POSTMAN_WORKSPACE_SUBDOMAIN=replace-with-lowercase-workspace-subdomain
18
+ # POSTMAN_WEB_SESSION_SELECTED_MODEL=replace-with-operator-pinned-upstream-model
19
+ # Optional exact observed response labels. Present-but-unlisted labels fail closed; absent labels stay unverified.
20
+ # POSTMAN_WEB_SESSION_OBSERVED_MODELS=gpt-5.6-sol
21
+ # POSTMAN_APP_VERSION=
22
+
23
+ # Optional authoritative catalog metadata for access_token tools. Leave hash/exclusions unset until sourced.
24
+ POSTMAN_PLATFORM=OPENAI_COMPATIBLE_ADAPTER
25
+ # POSTMAN_NATIVE_TOOLS_HASH=
26
+ # POSTMAN_EXCLUDED_TOOLS=readFile,webSearch
27
+ REQUEST_TIMEOUT_MS=120000
28
+ MAX_BODY_BYTES=1048576
29
+ MAX_EVENT_BYTES=1048576
30
+ MAX_OUTPUT_BYTES=4194304
31
+ MAX_TOOL_ARGUMENT_BYTES=262144
32
+ MAX_TOOLS=64
33
+ MAX_CONCURRENT_REQUESTS=16
34
+ EXPOSE_HEALTH_DETAILS=false
@@ -0,0 +1,60 @@
1
+ # Danh mục Toàn diện các Native Tool Call của AICoworker
2
+
3
+ > Cập nhật cho hệ thống **Aki Pro Max** (Postman OpenAI Facade / PMN Gateway)
4
+ > Phiên bản AICoworker: 2026.6.27 | OpenClaw: 2026.3.13
5
+
6
+ AICoworker cung cấp tổng cộng **36 native tools** cốt lõi được phân chia thành **8 nhóm năng lực** tác vụ chuyên biệt.
7
+
8
+ ---
9
+
10
+ ## 1. File Operations & Coding (Thao tác Tệp & Lập trình)
11
+ - `read`: Đọc nội dung tệp tin văn bản hoặc đính kèm trực tiếp hình ảnh (png, jpg, gif, webp) vào ngữ cảnh thị giác đa phương thức của model.
12
+ - `write`: Tạo mới hoặc ghi đè toàn bộ tệp tin trong workspace.
13
+ - `edit`: Sửa phẫu thuật chính xác một đoạn văn bản (`oldText` -> `newText`), giữ nguyên toàn bộ cấu trúc còn lại.
14
+ - `ripgrep`: Tìm kiếm regex tốc độ cao đa luồng trên toàn bộ cây thư mục/tệp tin.
15
+
16
+ ## 2. Shell & Process Execution (Thực thi Lệnh & Tiến trình)
17
+ - `exec`: Thực thi lệnh shell (hỗ trợ cả đồng bộ chờ kết quả, bất đồng bộ chạy nền `background: true`, và terminal giả lập `pty: true`).
18
+ - `process`: Quản lý tương tác với các tiến trình chạy nền (list, poll, log, write stdin, send-keys, submit, paste, kill).
19
+
20
+ ## 3. Web Research & Browser Automation (Nghiên cứu Web & Trình duyệt)
21
+ - `web_search`: Tìm kiếm web thời gian thực qua Brave Search API.
22
+ - `web_fetch`: Tải và trích xuất nội dung văn bản/markdown sạch từ bất kỳ URL nào mà không cần render trình duyệt nặng.
23
+ - `searxng_search`: Metasearch nội bộ tự host qua SearXNG (tối ưu hóa cao cho tiếng Việt, Arxiv, GitHub, StackOverflow, Wikipedia).
24
+ - `browser`: Điều khiển trình duyệt thật (Playwright/Chromium: mở trang, đọc DOM snapshot, click, gõ text, upload, download, bắt & replay network request).
25
+
26
+ ## 4. Adaptive UI & Interactive Visuals (Giao diện Tương tác Chat)
27
+ - `show_adaptive_ui`: Hiển thị thẻ giao diện trực quan phong phú ngay trong khung chat (hỗ trợ 12 biến thể: charts, map, gallery, table, timeline, diagram mermaid, dashboard KPI, compare, diff, tabs, report, card).
28
+ - `ask_user_question`: Hiển thị wizard câu hỏi tương tác để người dùng nhập/chọn (choice, text, textarea, password, number, slider, file).
29
+ - `canvas`: Trình chiếu và điều khiển canvas giao diện tương tác độc lập (A2UI, present, eval, snapshot).
30
+
31
+ ## 5. Multi-Agent Rooms & Collaboration (Phối hợp Đa Agent)
32
+ - `agents_list`: Khám phá danh sách các agent đồng nghiệp trong hệ thống (id, tên, bio năng lực chuyên biệt).
33
+ - `room_delegate`: Ủy quyền tác vụ con cho một agent chuyên trách trong phòng chat chung (`@agent`).
34
+ - `room_state`: Bảng ghi nhớ dùng chung (key/value scratchpad) giữa tất cả các agent trong cùng phòng chat.
35
+ - `sessions_spawn`: Khởi tạo sub-agent độc lập để thực hiện tác vụ song song.
36
+ - `sessions_yield`: Nhường lượt để chờ kết quả trả về từ các sub-agent.
37
+ - `subagents`: Giám sát và điều phối các sub-agent đang chạy (list, steer, kill).
38
+ - `sessions_list`: Liệt kê các phiên làm việc và sub-agent theo bộ lọc.
39
+ - `sessions_history`: Đọc lịch sử tin nhắn của một phiên làm việc khác.
40
+ - `sessions_send`: Gửi tin nhắn liên phiên tới agent khác.
41
+
42
+ ## 6. Memory & Knowledge Management (Bộ nhớ & Tri thức Dài hạn)
43
+ - `memory_search`: Tìm kiếm ngữ nghĩa trong kho tri thức dài hạn (`MEMORY.md`, `memory/*.md`).
44
+ - `memory_get`: Đọc an toàn các đoạn trích từ bộ nhớ dựa trên kết quả tìm kiếm.
45
+
46
+ ## 7. Task Planning & Standard Operating Procedures (Kế hoạch & Quy trình)
47
+ - `plan_task`: Lập kế hoạch thiết kế có cấu trúc vào `PLAN.md` trước khi thực thi tác vụ phức tạp (restate, approach, risks, criteria).
48
+ - `write_todos`: Ghi và cập nhật tiến độ công việc từng bước vào `TODO.md`.
49
+ - `workflow_run`: Khởi chạy một Agent Workflow (SOP / quy trình định sẵn theo đồ thị markdown).
50
+ - `workflow_distill`: Đúc kết lịch sử phiên làm việc thành quy trình Agent Workflow mẫu.
51
+
52
+ ## 8. Gateway, Devices & Utilities (Hạ tầng, Thiết bị & Tiện ích)
53
+ - `gateway`: Quản trị Gateway OpenClaw (restart, config.get, config.patch, config.apply, update).
54
+ - `session_status`: Xem trạng thái phiên, mức sử dụng token, thời gian và chi phí.
55
+ - `nodes`: Khám phá và điều khiển các node/thiết bị kết nối (camera, chụp màn hình, gửi thông báo, định vị GPS).
56
+ - `cron`: Quản lý các tác vụ định kỳ Gateway cron và sự kiện hẹn giờ wake.
57
+ - `message`: Gửi, nhận và quản lý tin nhắn đa kênh (Telegram, Discord, Zalo, v.v.).
58
+ - `tts`: Chuyển đổi văn bản thành giọng nói (Text-To-Speech).
59
+ - `mark_context_wasted`: Tối ưu hóa ngữ cảnh, gắn cờ các tool output đã dùng xong để loại bỏ bớt token dư thừa.
60
+ - `advisor`: Tham vấn model đánh giá chiến lược cấp cao khi gặp bài toán khó hoặc trước khi hoàn thành công việc.
@@ -0,0 +1,94 @@
1
+ {
2
+ "schema": "live-two-model-tools-evidence/v1",
3
+ "runId": "7a400eb2-17e5-4633-8389-8239b91b2087",
4
+ "startedWithPriorCurrentProbeAttempts": 0,
5
+ "origin": "https://akimax6.postman.co",
6
+ "path": "/_gw/chat",
7
+ "workspaceId": "358aa6cf-3b60-449f-8981-c60263000413",
8
+ "policy": {
9
+ "retry": false,
10
+ "failover": false,
11
+ "totalLimit": 6,
12
+ "perModelLimit": 3
13
+ },
14
+ "budget": {
15
+ "used": 4,
16
+ "byModel": {
17
+ "gpt-5.6-sol": 2,
18
+ "claude-opus-4-8": 2
19
+ }
20
+ },
21
+ "branches": [
22
+ {
23
+ "key": "gpt-sol",
24
+ "publicModel": "gpt-5.6-sol",
25
+ "selectedModel": "GPT_56_SOL",
26
+ "facadePort": 52936,
27
+ "initial": {
28
+ "facadeStatus": 200,
29
+ "errorCode": null,
30
+ "toolCallCount": 1,
31
+ "toolName": "get_probe_value",
32
+ "argumentsValid": true,
33
+ "argumentsDiagnostic": {
34
+ "argsType": "string",
35
+ "argsBytes": 2,
36
+ "parsedType": "object",
37
+ "keyCount": 0,
38
+ "parseError": null
39
+ },
40
+ "exactlyOneValidToolCall": true
41
+ },
42
+ "continuation": {
43
+ "facadeStatus": 200,
44
+ "errorCode": null,
45
+ "finalContentPresent": true
46
+ },
47
+ "observedModels": [
48
+ "gpt-5.6-sol",
49
+ "GPT_56_SOL"
50
+ ],
51
+ "finalMatchesMarker": true,
52
+ "cleanup": true,
53
+ "terminal": "completed_match",
54
+ "error": null
55
+ },
56
+ {
57
+ "key": "claude-opus",
58
+ "publicModel": "claude-opus-4-8",
59
+ "selectedModel": "CLAUDE_OPUS_48_BEDROCK",
60
+ "facadePort": 51370,
61
+ "initial": {
62
+ "facadeStatus": 200,
63
+ "errorCode": null,
64
+ "toolCallCount": 1,
65
+ "toolName": "get_probe_value",
66
+ "argumentsValid": true,
67
+ "argumentsDiagnostic": {
68
+ "argsType": "string",
69
+ "argsBytes": 0,
70
+ "parsedType": "object",
71
+ "keyCount": 0,
72
+ "parseError": null
73
+ },
74
+ "exactlyOneValidToolCall": true
75
+ },
76
+ "continuation": {
77
+ "facadeStatus": 200,
78
+ "errorCode": null,
79
+ "finalContentPresent": true
80
+ },
81
+ "observedModels": [
82
+ "claude-opus-4-8",
83
+ "CLAUDE_OPUS_48_BEDROCK",
84
+ "global.anthropic.claude-opus-4-8"
85
+ ],
86
+ "finalMatchesMarker": true,
87
+ "cleanup": true,
88
+ "terminal": "completed_match",
89
+ "error": null
90
+ }
91
+ ],
92
+ "allServersCleaned": true,
93
+ "generatedAt": "2026-09-13T00:22:23.559Z"
94
+ }
@@ -0,0 +1,109 @@
1
+ {
2
+ "window": [
3
+ "2026-09-13T02:22:30.000Z",
4
+ "2026-09-13T02:24:30.000Z"
5
+ ],
6
+ "rows": [
7
+ {
8
+ "id": 86668,
9
+ "timestamp": "2026-09-13T02:22:38.074Z",
10
+ "provider": "openai-compatible-chat-7315cf02-aba5-4c66-a886-044054c49883",
11
+ "model": "gpt-5.6-sol",
12
+ "connectionId": "27b72dc7-4a15-4b8a-815b-71f7839e5f2b",
13
+ "endpoint": "/v1/chat/completions",
14
+ "promptTokens": 278247,
15
+ "completionTokens": 188,
16
+ "status": "ok",
17
+ "tokens": "{\"prompt_tokens\":278247,\"completion_tokens\":188,\"total_tokens\":278435,\"cached_tokens\":45824,\"cache_creation_input_tokens\":0}",
18
+ "meta": "{}"
19
+ },
20
+ {
21
+ "id": 86669,
22
+ "timestamp": "2026-09-13T02:22:48.349Z",
23
+ "provider": "openai-compatible-chat-7315cf02-aba5-4c66-a886-044054c49883",
24
+ "model": "gpt-5.6-sol",
25
+ "connectionId": "27b72dc7-4a15-4b8a-815b-71f7839e5f2b",
26
+ "endpoint": "/v1/chat/completions",
27
+ "promptTokens": 278504,
28
+ "completionTokens": 67,
29
+ "status": "ok",
30
+ "tokens": "{\"prompt_tokens\":278504,\"completion_tokens\":67,\"total_tokens\":278571,\"cached_tokens\":278144,\"cache_creation_input_tokens\":0}",
31
+ "meta": "{}"
32
+ },
33
+ {
34
+ "id": 86670,
35
+ "timestamp": "2026-09-13T02:23:03.031Z",
36
+ "provider": "openai-compatible-chat-7315cf02-aba5-4c66-a886-044054c49883",
37
+ "model": "gpt-5.6-sol",
38
+ "connectionId": "27b72dc7-4a15-4b8a-815b-71f7839e5f2b",
39
+ "endpoint": "/v1/chat/completions",
40
+ "promptTokens": 278782,
41
+ "completionTokens": 57,
42
+ "status": "ok",
43
+ "tokens": "{\"prompt_tokens\":278782,\"completion_tokens\":57,\"total_tokens\":278839,\"cached_tokens\":278400,\"cache_creation_input_tokens\":0}",
44
+ "meta": "{}"
45
+ },
46
+ {
47
+ "id": 86671,
48
+ "timestamp": "2026-09-13T02:23:14.987Z",
49
+ "provider": "openai-compatible-chat-7315cf02-aba5-4c66-a886-044054c49883",
50
+ "model": "gpt-5.6-sol",
51
+ "connectionId": "27b72dc7-4a15-4b8a-815b-71f7839e5f2b",
52
+ "endpoint": "/v1/chat/completions",
53
+ "promptTokens": 278039,
54
+ "completionTokens": 129,
55
+ "status": "ok",
56
+ "tokens": "{\"prompt_tokens\":278039,\"completion_tokens\":129,\"total_tokens\":278168,\"cached_tokens\":45824,\"cache_creation_input_tokens\":0}",
57
+ "meta": "{}"
58
+ },
59
+ {
60
+ "id": 86672,
61
+ "timestamp": "2026-09-13T02:23:23.283Z",
62
+ "provider": "openai-compatible-chat-327ad9bd-0918-4921-b3c1-213b244ee54f",
63
+ "model": "gpt-5.6-sol",
64
+ "connectionId": "6706879a-9897-4b2a-9142-728ca64276d4",
65
+ "endpoint": "/v1/chat/completions",
66
+ "promptTokens": 46410,
67
+ "completionTokens": 4,
68
+ "status": "ok",
69
+ "tokens": "{\"prompt_tokens\":46410,\"completion_tokens\":4,\"total_tokens\":46414,\"cached_tokens\":0,\"cache_creation_input_tokens\":0}",
70
+ "meta": "{}"
71
+ },
72
+ {
73
+ "id": 86673,
74
+ "timestamp": "2026-09-13T02:23:24.702Z",
75
+ "provider": "openai-compatible-chat-7315cf02-aba5-4c66-a886-044054c49883",
76
+ "model": "gpt-5.6-sol",
77
+ "connectionId": "27b72dc7-4a15-4b8a-815b-71f7839e5f2b",
78
+ "endpoint": "/v1/chat/completions",
79
+ "promptTokens": 278269,
80
+ "completionTokens": 68,
81
+ "status": "ok",
82
+ "tokens": "{\"prompt_tokens\":278269,\"completion_tokens\":68,\"total_tokens\":278337,\"cached_tokens\":277888,\"cache_creation_input_tokens\":0}",
83
+ "meta": "{}"
84
+ }
85
+ ],
86
+ "connections": {
87
+ "27b72dc7-4a15-4b8a-815b-71f7839e5f2b": {
88
+ "id": "27b72dc7-4a15-4b8a-815b-71f7839e5f2b",
89
+ "provider": "openai-compatible-chat-7315cf02-aba5-4c66-a886-044054c49883",
90
+ "name": "CPX",
91
+ "priority": 1,
92
+ "isActive": 1
93
+ },
94
+ "pmn-openai-provider-local": {
95
+ "id": "pmn-openai-provider-local",
96
+ "provider": "openai-compatible-chat-aki-pro-max",
97
+ "name": "Aki Pro Max Local Gateway",
98
+ "priority": 1,
99
+ "isActive": 1
100
+ },
101
+ "6706879a-9897-4b2a-9142-728ca64276d4": {
102
+ "id": "6706879a-9897-4b2a-9142-728ca64276d4",
103
+ "provider": "openai-compatible-chat-327ad9bd-0918-4921-b3c1-213b244ee54f",
104
+ "name": "Aki Pro Max Local",
105
+ "priority": 1,
106
+ "isActive": 1
107
+ }
108
+ }
109
+ }
@@ -0,0 +1 @@
1
+ {"body":"## Evidence\n\nThe bounded live probe for `claude-opus-4-8` selected `CLAUDE_OPUS_48_BEDROCK` and received HTTP 502 before any tool call. GPT-5.6 Sol completed the equivalent tool loop.\n\n## Current boundary\n\nThis issue does **not** affect the advertised model catalog or offline contracts, but Claude live compatibility is not claimed in v0.1.0-beta.1.\n\n## Investigation checklist\n\n- Capture sanitized upstream error code/model observation without cookie, prompts or response body.\n- Compare the currently observed allowlisted model label against the configured foodcode.\n- Verify whether mismatch is gateway mapping, workspace availability or upstream rollout.\n- Add a bounded live regression only after the accepted label is source-observed.","closedAt":"2026-09-13T03:23:15Z","comments":[{"id":"IC_kwDOUX4nN88AAAABUIPUTg","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Root cause found and bounded live retest\n\nThe live upstream model observation is `global.anthropic.claude-opus-4-8` in `metadata.model`, while the allowlist previously contained only `claude-opus-4-8` and `CLAUDE_OPUS_48_BEDROCK`. Diagnostic propagation now records the bounded observed model and field path for this error class without dumping upstream content.\n\nAfter adding the source-observed label to the local allowlist, a one-shot live non-tool Claude request returned HTTP 200 with the exact marker. This confirms the mismatch root cause and text-generation compatibility.\n\n**Remaining acceptance item:** the issue asks for a complete Claude tool-call → local tool result → final answer loop. That exact tool loop has not yet been rerun after the allowlist correction, so this issue remains open.","createdAt":"2026-09-12T12:08:09Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/1#issuecomment-5645784142","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUJJTqg","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Patch/release progress — v0.1.0-beta.8\n\nThe Main-agent compatibility patch for OpenClaw tool schemas has been independently gated and published:\n\n- Added recursive `patternProperties` validation used by `exec.env`.\n- Added focused regression coverage for valid nested schema, malformed container, and unsupported nested keyword.\n- Current suite: 97/97 pass; release secret scanner and positive control pass.\n- Current 34-tool OpenClaw schema census has no unhandled keyword; the original full-context streaming replay succeeded direct and through PMN/9router.\n- Trio Verifiers: 17.43/20, StdDev 0.40.\n- Release: https://github.com/khangtudo/aki-pro-max/releases/tag/v0.1.0-beta.8\n- Commit: 8f43c5b27bcbd6a3f292211e09315fc6ac931189\n\nThis patch removes the schema-validation blocker that caused agent requests to abort, but issue #1 remains open until its original Claude full tool-loop acceptance is linked and verified. Claude argument conformance remains tracked in #4.","createdAt":"2026-09-12T15:11:39Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/1#issuecomment-5646734250","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUM8k3Q","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"Resolved and live-verified in `172e7e6009c6f8b8fb9b1ddd26273f70fa12bb07`.\n\nClosure evidence:\n- Fresh Claude Opus 4.8 tool loop selected `CLAUDE_OPUS_48_BEDROCK`.\n- Initial request HTTP 200, exactly one valid native tool call, `argumentsValid=true`.\n- Same-session continuation HTTP 200 and exact final marker; terminal `completed_match`.\n- Release suite: 97/97 pass; release verifier secret scan and positive control pass.\n- Trio gate: 17.43/20, StdDev 0.40.\n\nArtifacts: `CLAUDE-LIVE-TOOLS-EVIDENCE.json`, `TEST-ISSUES12-FINAL.txt`, `VERIFIER-ISSUES12-FINAL.txt`.","createdAt":"2026-09-13T03:23:15Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/1#issuecomment-5650719965","viewerDidAuthor":true}],"number":1,"state":"CLOSED","title":"Known issue: Claude Opus live web-session selection returns upstream model mismatch","url":"https://github.com/khangtudo/aki-pro-max/issues/1"}
@@ -0,0 +1 @@
1
+ {"comments":[{"id":"IC_kwDOUX4nN88AAAABUIPUvg","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Real AICoworker runtime trace attempted\n\nA real AICoworker `sessions_spawn` was configured to use the PMN route through 9router. The request reached the upstream/provider path but failed with `403 Access denied: service error` before returning the distinctive marker. No mock or fallback was used.\n\nDuring read-only 9router inspection, an old local facade key was accidentally printed to the private tool transcript. It was immediately rotated in both the provider `.env` and 9router PMN connection. Verification: old key now returns 401, new key returns 200, health returns 200. No key was posted to GitHub.\n\n**Current blocker:** PMN/9router upstream authentication/routing returns 403 from the AICoworker runtime. The full marker round trip is therefore not complete and this issue remains open.","createdAt":"2026-09-12T12:08:10Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5645784254","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUISuyw","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Evidence correction\n\nThe AICoworker subagent returned the exact distinctive marker, but the persisted session record identifies the model as `CPX/gpt-5.6-sol`, not PMN. Therefore this output alone is **not sufficient proof** that 9router/Aki Pro Max carried the request. The prior PMN attempt also recorded an upstream 403. Issue #2 remains open pending component-level routing evidence.\n\nA private sanitized record stores only the marker hash/prefix and model metadata; no credentials or raw upstream content.","createdAt":"2026-09-12T12:19:32Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5645840075","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUIrpdQ","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Root cause fixed: official 9router custom provider registration\n\nThe previous PMN row was an orphan connection: it referenced `openai-compatible-chat-postman2api`, but no matching `providerNodes` entry existed, so it was absent from the GUI/runtime provider registry.\n\nRepair completed through 9router's authenticated official APIs:\n\n- Created custom provider node `Aki Pro Max Local`, prefix `PMN`, chat API, base URL `http://127.0.0.1:8788/v1`.\n- Created an active connection bound to that node using the rotated facade key.\n- `GET /v1/models` now lists `PMN/gpt-5.6-sol`.\n- Direct 9router `POST /v1/chat/completions` using `PMN/gpt-5.6-sol` returned HTTP 200 and the exact marker.\n- AICoworker subagent configured with PMN returned its exact marker successfully. Session history normalizes to the downstream response model (`CPX/gpt-5.6-sol`), so the direct 9router marker plus official provider registration are the component-level route evidence.\n- Temporary Wi Ha PMN model/allowlist changes were restored to CPX after the test.\n\nAcceptance is met for the live chain. Note: 9router did not persist a usageHistory row under the newly created connection ID for this short test, so evidence relies on authenticated provider registry + routable catalog + exact direct route marker + AICoworker marker rather than usage accounting.","createdAt":"2026-09-12T13:41:59Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646248309","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUIrp7w","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"Closed after official PMN provider registration and successful direct 9router plus AICoworker marker tests. The orphan provider registration was the root cause.","createdAt":"2026-09-12T13:42:01Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646248431","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUIsSag","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Closure correction\n\nReopened after final review. The orphan provider registration is fixed and direct 9router PMN routing is verified, but AICoworker end-to-end attribution is not yet conclusive: session history normalizes the response model to CPX and no usageHistory/requestDetails row was persisted for the new PMN connection during the marker window. The exact marker therefore proves output success but does not independently exclude silent fallback.\n\nRemaining exit criterion: capture a request/log row tied to the new PMN connection ID, or rerun with CPX unavailable and PMN still returning the exact marker.","createdAt":"2026-09-12T13:44:09Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646258794","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUItwag","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Attribution boundary clarification\n\nThe green marker tests prove **registration and reachability**, not production session attribution:\n\n- Official PMN custom provider node/connection exists.\n- PMN appears in the router catalog.\n- Direct router request addressed as `PMN/gpt-5.6-sol` returns the exact marker.\n- A temporary AICoworker PMN configuration also returned the exact marker.\n\nWhat remains unresolved is whether AICoworker production session metadata and metering retain PMN attribution after provider/model normalization. The session record normalizes the response to `CPX/gpt-5.6-sol`, and the queried 9router `usageHistory`/`requestDetails` stores contain no row attributed to the new PMN connection for the test window. This is not proof that routing failed; it is proof that PMN attribution is currently unverified.\n\nBecause the temporary PMN config was restored before raw component metadata/request IDs were captured, that test is not fully reproducible. Exit criterion remains: capture one PMN-addressed AICoworker request with the same request/session ID visible in raw router logs or metering under the PMN connection, and determine where normalization occurs relative to usage emission.","createdAt":"2026-09-12T13:49:00Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646282858","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUJJUFg","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Patch/release progress — v0.1.0-beta.8\n\nThe schema compatibility blocker for OpenClaw tools is fixed and published. PMN custom provider registration and direct 9router reachability were fixed earlier. Issue #2 remains open because production AICoworker→PMN attribution still lacks a durable same-request usage/log record under the PMN connection; beta.8 does not change that boundary.","createdAt":"2026-09-12T15:11:41Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646734358","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUM8mWQ","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"Resolved and independently attributed in `172e7e6009c6f8b8fb9b1ddd26273f70fa12bb07`.\n\nClosure evidence:\n- Fresh AICoworker subagent explicitly used `provider=pmn`, `model=PMN/gpt-5.6-sol` and returned the exact four-token marker.\n- Matching 9router usage row `86672` at `2026-09-13T02:23:23.283Z` used connection `6706879a-9897-4b2a-9142-728ca64276d4`, mapped to `Aki Pro Max Local`, status `ok`, completion tokens `4`.\n- CPX remained active and served surrounding unrelated requests, so this is not a disable-CPX negative test.\n- Trio gate: 17.43/20, StdDev 0.40.\n\nArtifacts: `FULL-TRACE-EVIDENCE.json`, `VERIFIER-ISSUES12-FINAL.txt`, updated `docs/CAPABILITY-MATRIX.md`.","createdAt":"2026-09-13T03:23:17Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5650720345","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUNBuvQ","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"Post-closure independent review found that the committed evidence proves provider attribution and the exact marker, but does **not** satisfy every item in this issue's stricter acceptance checklist. Missing from one correlated production trace: proof of exactly one bounded Postman dispatch, tool-call continuation/session affinity, an auth-failure leg, component versions, and a request ID shared end-to-end.\n\nTo keep issue state honest, reopening. The PMN provider-id collision remains fixed and verified; this issue now tracks only the remaining full-chain evidence matrix.","createdAt":"2026-09-13T03:32:27Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5650804413","viewerDidAuthor":true}],"number":2,"state":"OPEN","url":"https://github.com/khangtudo/aki-pro-max/issues/2"}
@@ -0,0 +1 @@
1
+ {"body":"## Goal\n\nDemonstrate one sanitized end-to-end trace through the complete production chain without mocks or fallback.\n\n## Acceptance checklist\n\n- AICoworker sends an authenticated request through 9router.\n- 9router selects the Aki Pro Max node and credential slot.\n- Aki Pro Max dispatches exactly one bounded live Postman request.\n- A distinctive prompt marker returns through the same chain.\n- Tool-call continuation, session affinity and auth failures are recorded without secrets.\n- Evidence includes timestamps, component versions and request IDs, not raw credentials or prompts.","closedAt":"2026-09-13T03:23:18Z","comments":[{"id":"IC_kwDOUX4nN88AAAABUIPUvg","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Real AICoworker runtime trace attempted\n\nA real AICoworker `sessions_spawn` was configured to use the PMN route through 9router. The request reached the upstream/provider path but failed with `403 Access denied: service error` before returning the distinctive marker. No mock or fallback was used.\n\nDuring read-only 9router inspection, an old local facade key was accidentally printed to the private tool transcript. It was immediately rotated in both the provider `.env` and 9router PMN connection. Verification: old key now returns 401, new key returns 200, health returns 200. No key was posted to GitHub.\n\n**Current blocker:** PMN/9router upstream authentication/routing returns 403 from the AICoworker runtime. The full marker round trip is therefore not complete and this issue remains open.","createdAt":"2026-09-12T12:08:10Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5645784254","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUISuyw","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Evidence correction\n\nThe AICoworker subagent returned the exact distinctive marker, but the persisted session record identifies the model as `CPX/gpt-5.6-sol`, not PMN. Therefore this output alone is **not sufficient proof** that 9router/Aki Pro Max carried the request. The prior PMN attempt also recorded an upstream 403. Issue #2 remains open pending component-level routing evidence.\n\nA private sanitized record stores only the marker hash/prefix and model metadata; no credentials or raw upstream content.","createdAt":"2026-09-12T12:19:32Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5645840075","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUIrpdQ","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Root cause fixed: official 9router custom provider registration\n\nThe previous PMN row was an orphan connection: it referenced `openai-compatible-chat-postman2api`, but no matching `providerNodes` entry existed, so it was absent from the GUI/runtime provider registry.\n\nRepair completed through 9router's authenticated official APIs:\n\n- Created custom provider node `Aki Pro Max Local`, prefix `PMN`, chat API, base URL `http://127.0.0.1:8788/v1`.\n- Created an active connection bound to that node using the rotated facade key.\n- `GET /v1/models` now lists `PMN/gpt-5.6-sol`.\n- Direct 9router `POST /v1/chat/completions` using `PMN/gpt-5.6-sol` returned HTTP 200 and the exact marker.\n- AICoworker subagent configured with PMN returned its exact marker successfully. Session history normalizes to the downstream response model (`CPX/gpt-5.6-sol`), so the direct 9router marker plus official provider registration are the component-level route evidence.\n- Temporary Wi Ha PMN model/allowlist changes were restored to CPX after the test.\n\nAcceptance is met for the live chain. Note: 9router did not persist a usageHistory row under the newly created connection ID for this short test, so evidence relies on authenticated provider registry + routable catalog + exact direct route marker + AICoworker marker rather than usage accounting.","createdAt":"2026-09-12T13:41:59Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646248309","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUIrp7w","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"Closed after official PMN provider registration and successful direct 9router plus AICoworker marker tests. The orphan provider registration was the root cause.","createdAt":"2026-09-12T13:42:01Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646248431","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUIsSag","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Closure correction\n\nReopened after final review. The orphan provider registration is fixed and direct 9router PMN routing is verified, but AICoworker end-to-end attribution is not yet conclusive: session history normalizes the response model to CPX and no usageHistory/requestDetails row was persisted for the new PMN connection during the marker window. The exact marker therefore proves output success but does not independently exclude silent fallback.\n\nRemaining exit criterion: capture a request/log row tied to the new PMN connection ID, or rerun with CPX unavailable and PMN still returning the exact marker.","createdAt":"2026-09-12T13:44:09Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646258794","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUItwag","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Attribution boundary clarification\n\nThe green marker tests prove **registration and reachability**, not production session attribution:\n\n- Official PMN custom provider node/connection exists.\n- PMN appears in the router catalog.\n- Direct router request addressed as `PMN/gpt-5.6-sol` returns the exact marker.\n- A temporary AICoworker PMN configuration also returned the exact marker.\n\nWhat remains unresolved is whether AICoworker production session metadata and metering retain PMN attribution after provider/model normalization. The session record normalizes the response to `CPX/gpt-5.6-sol`, and the queried 9router `usageHistory`/`requestDetails` stores contain no row attributed to the new PMN connection for the test window. This is not proof that routing failed; it is proof that PMN attribution is currently unverified.\n\nBecause the temporary PMN config was restored before raw component metadata/request IDs were captured, that test is not fully reproducible. Exit criterion remains: capture one PMN-addressed AICoworker request with the same request/session ID visible in raw router logs or metering under the PMN connection, and determine where normalization occurs relative to usage emission.","createdAt":"2026-09-12T13:49:00Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646282858","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUJJUFg","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"## Patch/release progress — v0.1.0-beta.8\n\nThe schema compatibility blocker for OpenClaw tools is fixed and published. PMN custom provider registration and direct 9router reachability were fixed earlier. Issue #2 remains open because production AICoworker→PMN attribution still lacks a durable same-request usage/log record under the PMN connection; beta.8 does not change that boundary.","createdAt":"2026-09-12T15:11:41Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5646734358","viewerDidAuthor":true},{"id":"IC_kwDOUX4nN88AAAABUM8mWQ","author":{"login":"khangtudo"},"authorAssociation":"OWNER","body":"Resolved and independently attributed in `172e7e6009c6f8b8fb9b1ddd26273f70fa12bb07`.\n\nClosure evidence:\n- Fresh AICoworker subagent explicitly used `provider=pmn`, `model=PMN/gpt-5.6-sol` and returned the exact four-token marker.\n- Matching 9router usage row `86672` at `2026-09-13T02:23:23.283Z` used connection `6706879a-9897-4b2a-9142-728ca64276d4`, mapped to `Aki Pro Max Local`, status `ok`, completion tokens `4`.\n- CPX remained active and served surrounding unrelated requests, so this is not a disable-CPX negative test.\n- Trio gate: 17.43/20, StdDev 0.40.\n\nArtifacts: `FULL-TRACE-EVIDENCE.json`, `VERIFIER-ISSUES12-FINAL.txt`, updated `docs/CAPABILITY-MATRIX.md`.","createdAt":"2026-09-13T03:23:17Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/khangtudo/aki-pro-max/issues/2#issuecomment-5650720345","viewerDidAuthor":true}],"number":2,"state":"CLOSED","title":"Verification: complete AICoworker → 9router → Aki Pro Max → live Postman trace","url":"https://github.com/khangtudo/aki-pro-max/issues/2"}
@@ -0,0 +1,9 @@
1
+ {
2
+ "BackupDir": "C:\\Users\\ADMIN\\aicoworker\\openclaw\\workspace-wiha\\backups\\aki-key-rotation-20260912-184753",
3
+ "OldKeyStatus": 401,
4
+ "NewKeyStatus": 200,
5
+ "Health": 200,
6
+ "Pid": 3640,
7
+ "GitTrackedEnv": false,
8
+ "TranscriptExposure": "Prior read-only SQLite inspection printed old key; old key rotated and now invalid."
9
+ }
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Khang Tu Do
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,13 @@
1
+ # PMN 9router Repair — Final Evidence
2
+
3
+ - Root cause: orphan provider connection without matching custom provider node.
4
+ - Official node: Aki Pro Max Local, prefix PMN, OpenAI-compatible chat, local base URL 8788.
5
+ - Official connection: active and bound to the node through authenticated 9router API.
6
+ - Catalog: PMN/gpt-5.6-sol present.
7
+ - Direct PMN chat: HTTP 200, exact marker matched; this proves registration/reachability, not AICoworker production attribution.
8
+ - AICoworker marker: exact marker returned after temporary PMN configuration. PMN attribution remains unverified because response metadata normalized to CPX and no row attributed to the new PMN connection appeared in the queried usageHistory/requestDetails stores for the test window. The temporary state was restored before raw request IDs were captured, so the run is not fully reproducible.
9
+ - Metadata caveat: AICoworker session history records the downstream response model CPX/gpt-5.6-sol; 9router usage tables did not create a row keyed to the new connection for the short run.
10
+ - Temporary Wi Ha config restored to CPX; config valid.
11
+ - Old orphan row remains in DB but is non-resolvable because its provider node is absent; do not use it. A DB backup exists before repair.
12
+
13
+
@@ -0,0 +1,10 @@
1
+ {
2
+ "OnlyChangedTest": "admin.test.mjs",
3
+ "Reason": "Aki Pro Max branding assertion",
4
+ "SourceTestIdentities": 96,
5
+ "StagingTestIdentities": 96,
6
+ "IdentityDiff": 0,
7
+ "FailedAttempt": "rapid-basil",
8
+ "RootCause": "unsafe mechanical literal replacement in test assertions",
9
+ "Prevention": "Do not codemod fixture/assertion literals; re-copy source tests then apply narrow reviewed diff."
10
+ }