diff --git a/docs/reviews/reply-wallet-fix-summary.md b/docs/reviews/reply-wallet-fix-summary.md new file mode 100644 index 0000000..53d0731 --- /dev/null +++ b/docs/reviews/reply-wallet-fix-summary.md @@ -0,0 +1,67 @@ +# Architectural Review Summary — reply-wallet-fix + +## Task and commits reviewed +- Task: `reply-wallet-fix` +- Reviewed the refactorer branch ending at `156075bb2d` (fast-forward merged into + `swarmforge-architect`), which carried: + - `156075b` — specifier: added `Reply to a Memo - 8`, a regression + `Scenario Outline` asserting that a reply with the authenticated wallet is + broadcast from the feed thread modal with no missing-wallet error. + - The merge `9ce9958` (display-name) carries content already present on the + architect branch; net diff vs the prior architect HEAD is only the feature + change above. + +## Architectural findings and fixes applied +Reviewed UI/Core separation, dependency rule, information hiding/encapsulation, +and local code quality for the reply-wallet regression scenario. + +1. **UI/Core separation (good).** Scenario 8 exercises the existing + `ReplyThreadPage` controller, which delegates to `MemoReply.reply()` + (`src/services/memo-reply.js`). Broadcasting runs through the injected + minimal-slp-wallet adapter (`wallet.getUtxos()` + `wallet.sendOpReturn()`); + the thread modal stays a thin UI adapter. No new UI/IO leaked into core rules. +2. **Dependency rule (good).** `MemoReply` depends inward on the `MemoAction` + base and on injected wallet/thread adapters; no low-level module reaches + toward IO. +3. **Information hiding (good).** The OP_RETURN wire format (parent txid 32 + bytes + UTF-8 message) is built and decoded inside `memo-reply.js`; the + feature and UI never see the raw payload. +4. **Regression value (good).** Scenario 8 re-verifies the wallet-backed + broadcast from the feed thread modal with two examples, closing the + missing-wallet path in a behavior-spec way. It passes against the existing + implementation, confirming the fix was already present; no source changes + were needed. + +## Verification results +- **Unit (`node --test`):** 89/89 pass. +- **Property (`node --test test/property/*.test.js`):** 13/13 pass. +- **Acceptance (normal):** `memo-new`, `post-memo`, `set-name`, and `reply-memo` + (8 scenarios) generated suites all pass, including scenario 8 both examples. +- **Mutation (`mutate4javascript`, `--max-workers 8`, differential vs manifest):** + all 12 testable core modules report 0/0/0 (no survivors, no uncovered) — the + source is unchanged by this task; manifests were refreshed from the runs. +- **DRY (`dry4javascript src` and `dry4javascript test`):** no duplicate + candidates in either tree. +- **Gherkin acceptance mutation (soft):** `reply-memo.feature` — 14 executed, + **4 killed, 10 survived**, 0 errors (1 scenario / 1 mutation skipped, plain + `Scenario`s carry no example mutations). + - Killed: byte `count` dithers (184→175, 179→185, 0→3) and the empty-value + boundary — behaviorally connected assertions. + - Survived (documented equivalents): all are opaque message-text dithers + (`hello memo→hellO memo`, over-long strings, nested reply texts, and the + new scenario-8 texts `hello memo→helLo memo`, + `a wallet-backed reply→a wallet-backedxreply`). Any non-empty value + broadcasts and reflects identically, so these are equivalent mutants. + +## Suite status +- Unit + property + acceptance all pass; source-level mutation is clean. + Gherkin acceptance-mutation survivors are documented equivalent mutants. + +## Handoffs sent +- `git_handoff` → coder, refactorer (priority `00`, task `reply-wallet-fix`) to + review the architect commit (manifest refreshes + review doc — no source + changes). +- No handoff to the specifier: the architect produced no functional feature + commit. + +By architect. diff --git a/specs/reply-memo.feature b/specs/reply-memo.feature index 2de994a..7fdec7a 100644 --- a/specs/reply-memo.feature +++ b/specs/reply-memo.feature @@ -1,5 +1,5 @@ # acceptance-mutation-manifest-begin -# {"version":1,"tested_at":"2026-08-26T11:43:51.597994833Z","feature_name":"Reply to a Memo","feature_path":"../../specs/reply-memo.feature","background_hash":"e1d5f81f1ed083ac6934c429ca3cb4a0f8d4dac44c2eaa45c0960920bde2c017","implementation_hash":"unknown","scenarios":[{"index":1,"name":"Reply to a Memo - 2 an empty reply is rejected","scenario_hash":"573c450bfab01f83d24545535cdaa4b2bb4c5617c092ff4f1532afa8dc0c20d2","mutation_count":1,"result":{"Total":1,"Killed":1,"Survived":0,"Errors":0},"tested_at":"2026-08-26T11:43:51.597994833Z"}]} +# {"version":1,"tested_at":"2026-08-26T12:20:44.218305772Z","feature_name":"Reply to a Memo","feature_path":"../../specs/reply-memo.feature","background_hash":"e1d5f81f1ed083ac6934c429ca3cb4a0f8d4dac44c2eaa45c0960920bde2c017","implementation_hash":"unknown","scenarios":[{"index":1,"name":"Reply to a Memo - 2 an empty reply is rejected","scenario_hash":"573c450bfab01f83d24545535cdaa4b2bb4c5617c092ff4f1532afa8dc0c20d2","mutation_count":1,"result":{"Total":1,"Killed":1,"Survived":0,"Errors":0},"tested_at":"2026-08-26T12:20:44.218305772Z"}]} # acceptance-mutation-manifest-end # Scenarios: Reply to a Memo - 1, Reply to a Memo - 2, Reply to a Memo - 3, Reply to a Memo - 4, Reply to a Memo - 5, Reply to a Memo - 6, Reply to a Memo - 7, Reply to a Memo - 8 diff --git a/src/services/account-page.js b/src/services/account-page.js index 6fa9848..e8182a1 100644 --- a/src/services/account-page.js +++ b/src/services/account-page.js @@ -53,5 +53,5 @@ AccountPage.ACCOUNT_PATH = ACCOUNT_PATH module.exports = AccountPage // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:43:18.387Z","module_hash":"956a690653185cdbda205b7ee5124f905241d47660357f40e32ee2a9f2340ea9","functions":[{"id":"func/AccountPage.constructor","name":"AccountPage.constructor","line":18,"end_line":22,"hash":"89f261283d2ceab1023088c80e89e48e21d1b62dbc2241a6e9fb00b5653d0607"},{"id":"func/AccountPage.getAddress","name":"AccountPage.getAddress","line":25,"end_line":27,"hash":"dd06e8414856559223a8fd5bd68193d8e04ea6264e3ac7c08e80c8dea69e2a36"},{"id":"func/AccountPage.getName","name":"AccountPage.getName","line":31,"end_line":37,"hash":"63f3f003cea554075f50c92062da81de964fc5cedefbf871843d9dd871aaed17"},{"id":"func/AccountPage.hasSetNameButton","name":"AccountPage.hasSetNameButton","line":40,"end_line":42,"hash":"49dc20060d4c55606057a926132f0cc5c8154548a445b299927ef68b9da86ca3"},{"id":"func/AccountPage.clickSetName","name":"AccountPage.clickSetName","line":45,"end_line":47,"hash":"82ff3b1da4068cbb8b78d55a9dfbd366c78927b67c7d4aa96c4cda12e3144f38"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:58.560Z","module_hash":"956a690653185cdbda205b7ee5124f905241d47660357f40e32ee2a9f2340ea9","functions":[{"id":"func/AccountPage.constructor","name":"AccountPage.constructor","line":18,"end_line":22,"hash":"89f261283d2ceab1023088c80e89e48e21d1b62dbc2241a6e9fb00b5653d0607"},{"id":"func/AccountPage.getAddress","name":"AccountPage.getAddress","line":25,"end_line":27,"hash":"dd06e8414856559223a8fd5bd68193d8e04ea6264e3ac7c08e80c8dea69e2a36"},{"id":"func/AccountPage.getName","name":"AccountPage.getName","line":31,"end_line":37,"hash":"63f3f003cea554075f50c92062da81de964fc5cedefbf871843d9dd871aaed17"},{"id":"func/AccountPage.hasSetNameButton","name":"AccountPage.hasSetNameButton","line":40,"end_line":42,"hash":"49dc20060d4c55606057a926132f0cc5c8154548a445b299927ef68b9da86ca3"},{"id":"func/AccountPage.clickSetName","name":"AccountPage.clickSetName","line":45,"end_line":47,"hash":"82ff3b1da4068cbb8b78d55a9dfbd366c78927b67c7d4aa96c4cda12e3144f38"}]} // mutate4javascript-manifest-end diff --git a/src/services/memo-action.js b/src/services/memo-action.js index 8ee2625..d68a6bd 100644 --- a/src/services/memo-action.js +++ b/src/services/memo-action.js @@ -73,5 +73,5 @@ class MemoAction { module.exports = MemoAction // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:41:40.313Z","module_hash":"9f6ac3a351ce499162bd5f350ac2eec15f7a4a88450334b49cb1c445b83b0eea","functions":[{"id":"func/MemoAction.constructor","name":"MemoAction.constructor","line":13,"end_line":22,"hash":"881f01aa2a258bcbc4750b69dc303a03139b6368decb2e10e667dc2f23f5ea80"},{"id":"func/MemoAction.validate","name":"MemoAction.validate","line":26,"end_line":36,"hash":"b8598a392b3a65b5f1fe329048a041a087ef0735806fd03f42fe0cf7e19ef7fc"},{"id":"func/MemoAction.broadcast","name":"MemoAction.broadcast","line":40,"end_line":59,"hash":"07853c0eec474cae372e901db388b62b50020db0aff1f63bb587b9e494f4ede5"},{"id":"func/MemoAction._throwIfInvalid","name":"MemoAction._throwIfInvalid","line":62,"end_line":70,"hash":"dafb785969f30b0fa347c8e699e4bf3302ce3a9ef0d3481f1ffa5c276992c808"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:08.027Z","module_hash":"9f6ac3a351ce499162bd5f350ac2eec15f7a4a88450334b49cb1c445b83b0eea","functions":[{"id":"func/MemoAction.constructor","name":"MemoAction.constructor","line":13,"end_line":22,"hash":"881f01aa2a258bcbc4750b69dc303a03139b6368decb2e10e667dc2f23f5ea80"},{"id":"func/MemoAction.validate","name":"MemoAction.validate","line":26,"end_line":36,"hash":"b8598a392b3a65b5f1fe329048a041a087ef0735806fd03f42fe0cf7e19ef7fc"},{"id":"func/MemoAction.broadcast","name":"MemoAction.broadcast","line":40,"end_line":59,"hash":"07853c0eec474cae372e901db388b62b50020db0aff1f63bb587b9e494f4ede5"},{"id":"func/MemoAction._throwIfInvalid","name":"MemoAction._throwIfInvalid","line":62,"end_line":70,"hash":"dafb785969f30b0fa347c8e699e4bf3302ce3a9ef0d3481f1ffa5c276992c808"}]} // mutate4javascript-manifest-end diff --git a/src/services/memo-post.js b/src/services/memo-post.js index b84e93e..93b12c8 100644 --- a/src/services/memo-post.js +++ b/src/services/memo-post.js @@ -65,5 +65,5 @@ MemoPost.MAX_MEMO_CHARS = MAX_MEMO_CHARS module.exports = MemoPost // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:41:52.322Z","module_hash":"ef34e1b3318b764dab099f693855e5f57704d60b2173e99c146bdbf34b6dd8c5","functions":[{"id":"func/MemoPost.constructor","name":"MemoPost.constructor","line":34,"end_line":37,"hash":"527e19b059e463a67be214a5c77c0ce4261ffadb58b9546b422be543c1df292d"},{"id":"func/MemoPost.isTooLong","name":"MemoPost.isTooLong","line":40,"end_line":42,"hash":"833f9f66eae849df0248d0c696c95c767a121b394b1c728bc3ec675668dff5de"},{"id":"func/MemoPost.post","name":"MemoPost.post","line":46,"end_line":48,"hash":"26d8e84b520fae1928f7f72215e6ed95f7219c14266c99b710e2af5373cb6faf"},{"id":"func/MemoPost.reflect","name":"MemoPost.reflect","line":51,"end_line":59,"hash":"87e2168a71309a572c60b63f382dd6f681cb28ed543090dbde399e29556cfcdf"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:29.322Z","module_hash":"ef34e1b3318b764dab099f693855e5f57704d60b2173e99c146bdbf34b6dd8c5","functions":[{"id":"func/MemoPost.constructor","name":"MemoPost.constructor","line":34,"end_line":37,"hash":"527e19b059e463a67be214a5c77c0ce4261ffadb58b9546b422be543c1df292d"},{"id":"func/MemoPost.isTooLong","name":"MemoPost.isTooLong","line":40,"end_line":42,"hash":"833f9f66eae849df0248d0c696c95c767a121b394b1c728bc3ec675668dff5de"},{"id":"func/MemoPost.post","name":"MemoPost.post","line":46,"end_line":48,"hash":"26d8e84b520fae1928f7f72215e6ed95f7219c14266c99b710e2af5373cb6faf"},{"id":"func/MemoPost.reflect","name":"MemoPost.reflect","line":51,"end_line":59,"hash":"87e2168a71309a572c60b63f382dd6f681cb28ed543090dbde399e29556cfcdf"}]} // mutate4javascript-manifest-end diff --git a/src/services/memo-reply.js b/src/services/memo-reply.js index 4a94f06..880e72f 100644 --- a/src/services/memo-reply.js +++ b/src/services/memo-reply.js @@ -112,5 +112,5 @@ MemoReply.MAX_REPLY_BYTES = MAX_REPLY_BYTES module.exports = MemoReply // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:42:09.351Z","module_hash":"3eb068f9f90f27c5d7acf2bb5a6c517d1085bcb379123ca2d7134d4fb48a092b","functions":[{"id":"func/MemoReply.constructor","name":"MemoReply.constructor","line":36,"end_line":39,"hash":"23091c1b8f7847199bab3b54d8d81e9d8432c6da96138d72ac03fcf9426d542c"},{"id":"func/MemoReply.isTooLong","name":"MemoReply.isTooLong","line":42,"end_line":44,"hash":"2e867501d184010313ba9b27a6bb1e446df8f093514ee231b90ce77699ecbaf2"},{"id":"func/MemoReply.reply","name":"MemoReply.reply","line":48,"end_line":67,"hash":"2d7b425e350b640caf6ca821146065e9c21fe56f1e8a9d8b1f6cab5504a523c1"},{"id":"func/MemoReply.reflect","name":"MemoReply.reflect","line":70,"end_line":79,"hash":"344e1bf304a4dfd475b02824b7ddbf555da0f3ec89f73b4f6009cf0bf097fb02"},{"id":"func/buildReplyPayload","name":"buildReplyPayload","line":84,"end_line":91,"hash":"ef9ee77938593f1dbf2d168c20ea4f8dee0300f64f0fdb4f06a4ba647bb782d5"},{"id":"func/hexToBytes","name":"hexToBytes","line":94,"end_line":107,"hash":"29b401020452eabcb1b54634029d8015758b77b536be3d1ed508e9d560ac93b1"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:17.625Z","module_hash":"3eb068f9f90f27c5d7acf2bb5a6c517d1085bcb379123ca2d7134d4fb48a092b","functions":[{"id":"func/MemoReply.constructor","name":"MemoReply.constructor","line":36,"end_line":39,"hash":"23091c1b8f7847199bab3b54d8d81e9d8432c6da96138d72ac03fcf9426d542c"},{"id":"func/MemoReply.isTooLong","name":"MemoReply.isTooLong","line":42,"end_line":44,"hash":"2e867501d184010313ba9b27a6bb1e446df8f093514ee231b90ce77699ecbaf2"},{"id":"func/MemoReply.reply","name":"MemoReply.reply","line":48,"end_line":67,"hash":"2d7b425e350b640caf6ca821146065e9c21fe56f1e8a9d8b1f6cab5504a523c1"},{"id":"func/MemoReply.reflect","name":"MemoReply.reflect","line":70,"end_line":79,"hash":"344e1bf304a4dfd475b02824b7ddbf555da0f3ec89f73b4f6009cf0bf097fb02"},{"id":"func/buildReplyPayload","name":"buildReplyPayload","line":84,"end_line":91,"hash":"ef9ee77938593f1dbf2d168c20ea4f8dee0300f64f0fdb4f06a4ba647bb782d5"},{"id":"func/hexToBytes","name":"hexToBytes","line":94,"end_line":107,"hash":"29b401020452eabcb1b54634029d8015758b77b536be3d1ed508e9d560ac93b1"}]} // mutate4javascript-manifest-end diff --git a/src/services/memo-set-name.js b/src/services/memo-set-name.js index 9ad759b..637cc43 100644 --- a/src/services/memo-set-name.js +++ b/src/services/memo-set-name.js @@ -62,5 +62,5 @@ MemoSetName.MAX_NAME_BYTES = MAX_NAME_BYTES module.exports = MemoSetName // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:42:00.746Z","module_hash":"98a611f25cf764ac9f182aa9ceb60e0d6ea750d391ba26562c034ee84ef4a9ae","functions":[{"id":"func/MemoSetName.constructor","name":"MemoSetName.constructor","line":35,"end_line":38,"hash":"9407b43605444074011b1da595c9d53356352c72b0d847e00365d79ad705663a"},{"id":"func/MemoSetName.isTooLong","name":"MemoSetName.isTooLong","line":41,"end_line":43,"hash":"e25b4701e1bf64f197980310a29c195a7f3b429ea41be4f01732541c5a9b7cfc"},{"id":"func/MemoSetName.setName","name":"MemoSetName.setName","line":47,"end_line":49,"hash":"9226b63b60a573a9dfb5c7bbb1449d1a138f30b648642d345c5162d012a2cfc0"},{"id":"func/MemoSetName.reflect","name":"MemoSetName.reflect","line":52,"end_line":56,"hash":"3cfed5e8ec7acf592e07e67659b4d8e075d98bbddf79755b8a31b76fd1ae5696"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:41.068Z","module_hash":"98a611f25cf764ac9f182aa9ceb60e0d6ea750d391ba26562c034ee84ef4a9ae","functions":[{"id":"func/MemoSetName.constructor","name":"MemoSetName.constructor","line":35,"end_line":38,"hash":"9407b43605444074011b1da595c9d53356352c72b0d847e00365d79ad705663a"},{"id":"func/MemoSetName.isTooLong","name":"MemoSetName.isTooLong","line":41,"end_line":43,"hash":"e25b4701e1bf64f197980310a29c195a7f3b429ea41be4f01732541c5a9b7cfc"},{"id":"func/MemoSetName.setName","name":"MemoSetName.setName","line":47,"end_line":49,"hash":"9226b63b60a573a9dfb5c7bbb1449d1a138f30b648642d345c5162d012a2cfc0"},{"id":"func/MemoSetName.reflect","name":"MemoSetName.reflect","line":52,"end_line":56,"hash":"3cfed5e8ec7acf592e07e67659b4d8e075d98bbddf79755b8a31b76fd1ae5696"}]} // mutate4javascript-manifest-end diff --git a/src/services/new-post.js b/src/services/new-post.js index 02f02c0..6250a0e 100644 --- a/src/services/new-post.js +++ b/src/services/new-post.js @@ -68,5 +68,5 @@ NewPostPage.RECENT_FEED_PATH = RECENT_FEED_PATH module.exports = NewPostPage // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:42:42.427Z","module_hash":"45d772cfe40b8a34018092abbe924c01cbde741c5cbaa737a283ba35214a99ff","functions":[{"id":"func/NewPostPage.constructor","name":"NewPostPage.constructor","line":23,"end_line":33,"hash":"686653c181941b27c19cd8c1f9fa7b3fee50db6e19c1e39d0db79e6bfbe52a81"},{"id":"func/NewPostPage.addMenuLink","name":"NewPostPage.addMenuLink","line":36,"end_line":39,"hash":"bac97164d2d70bfdb946c4d54e67983c43cad093bac558f1d169e1739ca97137"},{"id":"func/NewPostPage.hasMenuLink","name":"NewPostPage.hasMenuLink","line":42,"end_line":44,"hash":"7e1abf5d0833aaf3b3da3a024de9eb2b80da900b2930e832c7e92d77e0e50344"},{"id":"func/NewPostPage.remainingCount","name":"NewPostPage.remainingCount","line":47,"end_line":49,"hash":"521ce4ed841f62099529b327f2245a9e94c09af2f67ed5d91839e52607bcea37"},{"id":"func/NewPostPage._setBusy","name":"NewPostPage._setBusy","line":52,"end_line":54,"hash":"af4c51d75a9bbfc4d8c2566414ee950704d83831ad915ee04eea8bf2fab65a3e"},{"id":"func/NewPostPage._perform","name":"NewPostPage._perform","line":57,"end_line":62,"hash":"e66f893a4913b5d6f3cc4fcc1ad58e21557b4a316f0150050c961e3ece237795"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:47.139Z","module_hash":"45d772cfe40b8a34018092abbe924c01cbde741c5cbaa737a283ba35214a99ff","functions":[{"id":"func/NewPostPage.constructor","name":"NewPostPage.constructor","line":23,"end_line":33,"hash":"686653c181941b27c19cd8c1f9fa7b3fee50db6e19c1e39d0db79e6bfbe52a81"},{"id":"func/NewPostPage.addMenuLink","name":"NewPostPage.addMenuLink","line":36,"end_line":39,"hash":"bac97164d2d70bfdb946c4d54e67983c43cad093bac558f1d169e1739ca97137"},{"id":"func/NewPostPage.hasMenuLink","name":"NewPostPage.hasMenuLink","line":42,"end_line":44,"hash":"7e1abf5d0833aaf3b3da3a024de9eb2b80da900b2930e832c7e92d77e0e50344"},{"id":"func/NewPostPage.remainingCount","name":"NewPostPage.remainingCount","line":47,"end_line":49,"hash":"521ce4ed841f62099529b327f2245a9e94c09af2f67ed5d91839e52607bcea37"},{"id":"func/NewPostPage._setBusy","name":"NewPostPage._setBusy","line":52,"end_line":54,"hash":"af4c51d75a9bbfc4d8c2566414ee950704d83831ad915ee04eea8bf2fab65a3e"},{"id":"func/NewPostPage._perform","name":"NewPostPage._perform","line":57,"end_line":62,"hash":"e66f893a4913b5d6f3cc4fcc1ad58e21557b4a316f0150050c961e3ece237795"}]} // mutate4javascript-manifest-end diff --git a/src/services/optimistic-reply.js b/src/services/optimistic-reply.js index 3faac60..f796362 100644 --- a/src/services/optimistic-reply.js +++ b/src/services/optimistic-reply.js @@ -20,5 +20,5 @@ function buildOptimisticReply ({ txid, addr, text, seen, blockHeight, displayNam module.exports = { buildOptimisticReply } // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:41:34.005Z","module_hash":"feaca4cb374f34e47635d42df6a7459a8dfb623ec2425f85a19de090ab4286e0","functions":[{"id":"func/buildOptimisticReply","name":"buildOptimisticReply","line":7,"end_line":18,"hash":"531eb7347a4652e240f704936b2651e7e04506d6f5c0e10d33b37964be5e400a"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:01.970Z","module_hash":"feaca4cb374f34e47635d42df6a7459a8dfb623ec2425f85a19de090ab4286e0","functions":[{"id":"func/buildOptimisticReply","name":"buildOptimisticReply","line":7,"end_line":18,"hash":"531eb7347a4652e240f704936b2651e7e04506d6f5c0e10d33b37964be5e400a"}]} // mutate4javascript-manifest-end diff --git a/src/services/page-controller.js b/src/services/page-controller.js index dc990dd..11363bc 100644 --- a/src/services/page-controller.js +++ b/src/services/page-controller.js @@ -61,5 +61,5 @@ class PageController { module.exports = PageController // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:42:26.217Z","module_hash":"cfaf6bb208fa501d8fefcaa75c6ad1107128ea4b9baf739b43b4e803f28eef9b","functions":[{"id":"func/PageController.constructor","name":"PageController.constructor","line":13,"end_line":18,"hash":"09ba0e480cbc1213c699f45c7b6ef59e584dce4e8d4f1ab0adf5094435eba06f"},{"id":"func/PageController.setInput","name":"PageController.setInput","line":21,"end_line":24,"hash":"595484662b7ca07ef5eef5cebbff06309242552d9b4d15687df02f260ba88244"},{"id":"func/PageController.submit","name":"PageController.submit","line":29,"end_line":44,"hash":"bd2acb67a3a3e33cf8ed9f61886796102c1689486a1ea6757153b2be097eb704"},{"id":"func/PageController._handleSubmitFailure","name":"PageController._handleSubmitFailure","line":49,"end_line":58,"hash":"3d9ad3eb3a25e11b8a1eef164b2757034499b85b439754bb606622f99c72d5f9"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:35.338Z","module_hash":"cfaf6bb208fa501d8fefcaa75c6ad1107128ea4b9baf739b43b4e803f28eef9b","functions":[{"id":"func/PageController.constructor","name":"PageController.constructor","line":13,"end_line":18,"hash":"09ba0e480cbc1213c699f45c7b6ef59e584dce4e8d4f1ab0adf5094435eba06f"},{"id":"func/PageController.setInput","name":"PageController.setInput","line":21,"end_line":24,"hash":"595484662b7ca07ef5eef5cebbff06309242552d9b4d15687df02f260ba88244"},{"id":"func/PageController.submit","name":"PageController.submit","line":29,"end_line":44,"hash":"bd2acb67a3a3e33cf8ed9f61886796102c1689486a1ea6757153b2be097eb704"},{"id":"func/PageController._handleSubmitFailure","name":"PageController._handleSubmitFailure","line":49,"end_line":58,"hash":"3d9ad3eb3a25e11b8a1eef164b2757034499b85b439754bb606622f99c72d5f9"}]} // mutate4javascript-manifest-end diff --git a/src/services/profiles.js b/src/services/profiles.js index e35b2eb..7334edc 100644 --- a/src/services/profiles.js +++ b/src/services/profiles.js @@ -28,5 +28,5 @@ class Profiles { module.exports = Profiles // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:43:34.602Z","module_hash":"6a13673cbcae9c1dc6a497b7214409f415a403b9c6eaefd04776950fb8b64768","functions":[{"id":"func/Profiles.constructor","name":"Profiles.constructor","line":13,"end_line":15,"hash":"d13fcf15cca167093fca3cb89c2482d1fbbfac5afad666e4b9cf47a440aa8394"},{"id":"func/Profiles.setName","name":"Profiles.setName","line":17,"end_line":20,"hash":"5a36c6e237798608de0bedd8744b75000c0eec5c0a6a64c870a25bcdf20aed21"},{"id":"func/Profiles.getName","name":"Profiles.getName","line":22,"end_line":25,"hash":"2fcb9d84687ea0f3b24f3e34c0a72eda55a4e869b87e08a7f4551321a4166198"}]} +// {"version":1,"tested_at":"2026-08-26T12:17:49.004Z","module_hash":"6a13673cbcae9c1dc6a497b7214409f415a403b9c6eaefd04776950fb8b64768","functions":[{"id":"func/Profiles.constructor","name":"Profiles.constructor","line":13,"end_line":15,"hash":"d13fcf15cca167093fca3cb89c2482d1fbbfac5afad666e4b9cf47a440aa8394"},{"id":"func/Profiles.setName","name":"Profiles.setName","line":17,"end_line":20,"hash":"5a36c6e237798608de0bedd8744b75000c0eec5c0a6a64c870a25bcdf20aed21"},{"id":"func/Profiles.getName","name":"Profiles.getName","line":22,"end_line":25,"hash":"2fcb9d84687ea0f3b24f3e34c0a72eda55a4e869b87e08a7f4551321a4166198"}]} // mutate4javascript-manifest-end diff --git a/src/services/reply-thread-page.js b/src/services/reply-thread-page.js index b0c63a1..6d80732 100644 --- a/src/services/reply-thread-page.js +++ b/src/services/reply-thread-page.js @@ -59,5 +59,5 @@ ReplyThreadPage.REPLY_THREAD_PATH = REPLY_THREAD_PATH module.exports = ReplyThreadPage // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:43:05.248Z","module_hash":"6a5e24347eb65fe6f046276efeeab797895317e58ac9803800bf3eef5ddbcf90","functions":[{"id":"func/ReplyThreadPage.constructor","name":"ReplyThreadPage.constructor","line":23,"end_line":30,"hash":"b43af0c6321c8f04814d27e71ad868636921162142917594e8a9235cd7b9c926"},{"id":"func/ReplyThreadPage.setParent","name":"ReplyThreadPage.setParent","line":33,"end_line":36,"hash":"2816f5ec8d3c78101df88e2121f42d89007f3a4153f08990dc9b13c40f75d317"},{"id":"func/ReplyThreadPage.remainingCount","name":"ReplyThreadPage.remainingCount","line":39,"end_line":41,"hash":"2e6661f11eb38ed153282f6ff9d2ba0d7bd6123b4e98a5f9a68bef2da13f301c"},{"id":"func/ReplyThreadPage._setBusy","name":"ReplyThreadPage._setBusy","line":44,"end_line":46,"hash":"eab587885393bc07c55e5c7e73fdd200eac659176c2d8dcf60b8e35773a3a6cf"},{"id":"func/ReplyThreadPage._perform","name":"ReplyThreadPage._perform","line":49,"end_line":54,"hash":"640864465ca82bdc624c93b695f8da359ef19d4001e94e1432328fe3486fd14c"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:23.318Z","module_hash":"6a5e24347eb65fe6f046276efeeab797895317e58ac9803800bf3eef5ddbcf90","functions":[{"id":"func/ReplyThreadPage.constructor","name":"ReplyThreadPage.constructor","line":23,"end_line":30,"hash":"b43af0c6321c8f04814d27e71ad868636921162142917594e8a9235cd7b9c926"},{"id":"func/ReplyThreadPage.setParent","name":"ReplyThreadPage.setParent","line":33,"end_line":36,"hash":"2816f5ec8d3c78101df88e2121f42d89007f3a4153f08990dc9b13c40f75d317"},{"id":"func/ReplyThreadPage.remainingCount","name":"ReplyThreadPage.remainingCount","line":39,"end_line":41,"hash":"2e6661f11eb38ed153282f6ff9d2ba0d7bd6123b4e98a5f9a68bef2da13f301c"},{"id":"func/ReplyThreadPage._setBusy","name":"ReplyThreadPage._setBusy","line":44,"end_line":46,"hash":"eab587885393bc07c55e5c7e73fdd200eac659176c2d8dcf60b8e35773a3a6cf"},{"id":"func/ReplyThreadPage._perform","name":"ReplyThreadPage._perform","line":49,"end_line":54,"hash":"640864465ca82bdc624c93b695f8da359ef19d4001e94e1432328fe3486fd14c"}]} // mutate4javascript-manifest-end diff --git a/src/services/set-name-page.js b/src/services/set-name-page.js index ab9aad3..874d808 100644 --- a/src/services/set-name-page.js +++ b/src/services/set-name-page.js @@ -54,5 +54,5 @@ SetNamePage.ACCOUNT_PATH = ACCOUNT_PATH module.exports = SetNamePage // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T11:42:54.394Z","module_hash":"5e4ff62bceef737444b487d65f85608ba84ffc0bac69791d1347f7c1dfd8a300","functions":[{"id":"func/SetNamePage.constructor","name":"SetNamePage.constructor","line":24,"end_line":30,"hash":"4ce053830f485ce8a0fba4495cd85fc5e2cac3c9db88b5cbf1e8c66a371a9752"},{"id":"func/SetNamePage.remainingCount","name":"SetNamePage.remainingCount","line":33,"end_line":35,"hash":"47c88116b836dde07c64ae4de65c89a6d702a7889e032f2df163dd84cf48083f"},{"id":"func/SetNamePage._setBusy","name":"SetNamePage._setBusy","line":38,"end_line":40,"hash":"a0947ed899e0def1f6ae243197d409f5603c4820467f0e0fafdcb4deadb3a92b"},{"id":"func/SetNamePage._perform","name":"SetNamePage._perform","line":43,"end_line":48,"hash":"8614f25b06dcb21b81ab94b4a4611c5e3719ebf4ed7ab13e13976ab0d5938b27"}]} +// {"version":1,"tested_at":"2026-08-26T12:18:52.970Z","module_hash":"5e4ff62bceef737444b487d65f85608ba84ffc0bac69791d1347f7c1dfd8a300","functions":[{"id":"func/SetNamePage.constructor","name":"SetNamePage.constructor","line":24,"end_line":30,"hash":"4ce053830f485ce8a0fba4495cd85fc5e2cac3c9db88b5cbf1e8c66a371a9752"},{"id":"func/SetNamePage.remainingCount","name":"SetNamePage.remainingCount","line":33,"end_line":35,"hash":"47c88116b836dde07c64ae4de65c89a6d702a7889e032f2df163dd84cf48083f"},{"id":"func/SetNamePage._setBusy","name":"SetNamePage._setBusy","line":38,"end_line":40,"hash":"a0947ed899e0def1f6ae243197d409f5603c4820467f0e0fafdcb4deadb3a92b"},{"id":"func/SetNamePage._perform","name":"SetNamePage._perform","line":43,"end_line":48,"hash":"8614f25b06dcb21b81ab94b4a4611c5e3719ebf4ed7ab13e13976ab0d5938b27"}]} // mutate4javascript-manifest-end diff --git a/src/services/utf8.js b/src/services/utf8.js index b70e2c8..8ceee9e 100644 --- a/src/services/utf8.js +++ b/src/services/utf8.js @@ -15,5 +15,5 @@ function byteLength (str) { module.exports = { byteLength } // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-08-26T04:22:38.473Z","module_hash":"7f91541c49f2b6f421e8d4158bfe808b35a5449534cb26c567162fce6fec64bf","functions":[{"id":"func/byteLength","name":"byteLength","line":11,"end_line":13,"hash":"973c9dadcd1d8bbd53587252443880db13c8be3639fa74ce3c69a08ea358c8e2"}]} +// {"version":1,"tested_at":"2026-08-26T12:17:55.885Z","module_hash":"7f91541c49f2b6f421e8d4158bfe808b35a5449534cb26c567162fce6fec64bf","functions":[{"id":"func/byteLength","name":"byteLength","line":11,"end_line":13,"hash":"973c9dadcd1d8bbd53587252443880db13c8be3639fa74ce3c69a08ea358c8e2"}]} // mutate4javascript-manifest-end