From 3bccb41479b944c18472ab8dab99f02430da83cf Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Tue, 22 Sep 2026 11:18:44 -0700 Subject: [PATCH] Review profile address copy: refresh mutation manifests The refactorer delivered the address-copy feature with a stale mutate4javascript manifest on profile-page.js (address-copy functions in source but not in the manifest). Ran the language mutation tool one file at a time: profile-page.js 36/36 killed, profile-address.js 1/1 killed, both 0 survived and 0 uncovered. Ran soft Gherkin acceptance mutation on profile-address-copy.feature (4 mutations, all intrinsic case changes of example addresses used consistently on both sides of their scenarios, so the tool wrote an empty scenarios manifest). DRY scoped to the changed production and test/support/acceptance files reports no duplicate candidates; the broad handlers.js run shows only pre-existing follow/mute step-handler boilerplate. No production behavior change. Tool-written mutation and acceptance manifests only, plus an architect process note on stale delivered manifests. By architect. --- docs/architect-process-notes.md | 10 ++++++++++ psf-memo-client/specs/profile-address-copy.feature | 4 ++++ .../src/components/app-body/profile/profile-address.js | 4 ++++ psf-memo-client/src/services/profile-page.js | 2 +- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/architect-process-notes.md b/docs/architect-process-notes.md index 8f26693..db5be6f 100644 --- a/docs/architect-process-notes.md +++ b/docs/architect-process-notes.md @@ -180,6 +180,16 @@ the captured output before the tool's `System/exit`; the JSON report the current component, so the DB mutation runs use the DB suite without a second tool install. +- **A delivered source file can carry a stale `mutate4javascript` manifest.** + On 2026-09-22 the `profile-address-copy` handoff delivered + `src/services/profile-page.js` with the address-copy functions in the source + but a manifest listing only the pre-existing functions (`tested_at` predating + the feature). The differential run still selected and ran all 36 covered + sites because the module hash changed, and the tool then rewrote the manifest + to include the new functions. Treat a stale manifest as expected churn that + the architect's mutation run repairs: after mutating a file, commit the + rewritten manifest rather than treating it as a source behavior change. + - **A killed `mutate4javascript` run can strip the embedded manifest.** If the tool is killed after it removes the old `mutate4javascript-manifest` block but before it rewrites it (seen on `topic-query.js` when a worker hung and the diff --git a/psf-memo-client/specs/profile-address-copy.feature b/psf-memo-client/specs/profile-address-copy.feature index bd1c74c..5e3bed7 100644 --- a/psf-memo-client/specs/profile-address-copy.feature +++ b/psf-memo-client/specs/profile-address-copy.feature @@ -1,3 +1,7 @@ +# acceptance-mutation-manifest-begin +# {"version":1,"tested_at":"2026-09-22T18:13:49.997822314Z","feature_name":"Profile Address Copy","feature_path":"/home/trout/work/psf-memo/.worktrees/architect/psf-memo-client/specs/profile-address-copy.feature","background_hash":"0d66780cb1b8e277f0ada40a8ffe336dec7a8eaf658f19d2ea344815fb9bf26c","implementation_hash":"unknown","scenarios":[]} +# acceptance-mutation-manifest-end + # Scenarios: Profile Address Copy - 1, Profile Address Copy - 2, Profile Address Copy - 3, Profile Address Copy - 4 # # The /profile/:addr sidebar lists the profile's BCH cash address on the left. diff --git a/psf-memo-client/src/components/app-body/profile/profile-address.js b/psf-memo-client/src/components/app-body/profile/profile-address.js index 272a054..a2692a4 100644 --- a/psf-memo-client/src/components/app-body/profile/profile-address.js +++ b/psf-memo-client/src/components/app-body/profile/profile-address.js @@ -53,3 +53,7 @@ function ProfileAddress ({ address = '', copied = false, onClick }) { ProfileAddress.COPIED_TEXT = COPIED_TEXT module.exports = ProfileAddress + +// mutate4javascript-manifest-begin +// {"version":1,"tested_at":"2026-09-22T18:06:41.268Z","module_hash":"ef6a3eaa367a0a216ca16b33da84e3e797102886d571de28737155b96d4c4039","functions":[{"id":"func/ProfileAddress","name":"ProfileAddress","line":15,"end_line":51,"hash":"44eb6fd2adf6513a3db61dde75b08ee1730d4495cb09a1f447f160442ad1dfb4"}]} +// mutate4javascript-manifest-end diff --git a/psf-memo-client/src/services/profile-page.js b/psf-memo-client/src/services/profile-page.js index c00ae9f..688df93 100644 --- a/psf-memo-client/src/services/profile-page.js +++ b/psf-memo-client/src/services/profile-page.js @@ -251,5 +251,5 @@ ProfilePage.explorerUrl = blockExplorerTxUrl module.exports = ProfilePage // mutate4javascript-manifest-begin -// {"version":1,"tested_at":"2026-09-22T16:06:39.326Z","module_hash":"f981f1183227755db4d7da0d82618fab22ab1055800ad653db045a6fc77e4673","functions":[{"id":"func/ProfilePage.constructor","name":"ProfilePage.constructor","line":22,"end_line":34,"hash":"5511421482230254af17c6ebf7335207b3908ffa5c93bf086441de4cf64cc25e"},{"id":"func/ProfilePage.load","name":"ProfilePage.load","line":36,"end_line":52,"hash":"d38c4bec56cac83f0df4975852d915bb6bffc4c566cbcca3a933f31b340b6125"},{"id":"func/ProfilePage._assertReady","name":"ProfilePage._assertReady","line":55,"end_line":62,"hash":"e575f98fa1b492b4c11ae5275459d9f9996df4c566b84c7cae91413c72a02f38"},{"id":"func/ProfilePage._loadState","name":"ProfilePage._loadState","line":66,"end_line":71,"hash":"ab0376720ac75e6fd66d437fbb47a53176d76f681cb13b8794249f2a586549e8"},{"id":"func/ProfilePage.isOwnProfile","name":"ProfilePage.isOwnProfile","line":73,"end_line":75,"hash":"4d149bfe7b183b5d38d496c0a8126d22bd9a919e684f375d66e2c8c1348dd773"},{"id":"func/ProfilePage.canFollow","name":"ProfilePage.canFollow","line":77,"end_line":79,"hash":"0bc2c0c17991d8f1a1d18fba29c901e42633b7cf2c2c8b5747a49e5832d7001d"},{"id":"func/ProfilePage.isFollowing","name":"ProfilePage.isFollowing","line":81,"end_line":83,"hash":"9fc0470db7ffea2da96d2dbbdceff55562e1f7e84377fbb0e8b60d53cc723b40"},{"id":"func/ProfilePage.follow","name":"ProfilePage.follow","line":85,"end_line":87,"hash":"7674b789a9d3c48e0f7a6e553613bac99b2f38449fcdd17faa3c6d7cd2773bdd"},{"id":"func/ProfilePage.unfollow","name":"ProfilePage.unfollow","line":89,"end_line":91,"hash":"69d278b09da1f284be6adacb7264f9c06ac71c42f8e8f1baf9e34d5b24a891fb"},{"id":"func/ProfilePage._setFollowState","name":"ProfilePage._setFollowState","line":94,"end_line":96,"hash":"6cd937862bd6bf18d63fe767724b02ca23d1dc54f71ede23b84b9bde2930200b"},{"id":"func/ProfilePage.canMute","name":"ProfilePage.canMute","line":98,"end_line":100,"hash":"0076ea0e688df292dbe6bcde370aa32937cf7dad674e2168c3395d41b63850af"},{"id":"func/ProfilePage.isMuting","name":"ProfilePage.isMuting","line":102,"end_line":104,"hash":"c4fe9ea0501b7349da39321afd074e7ae48c2c1f2e0d1cfafafbf57f8a05c754"},{"id":"func/ProfilePage.mute","name":"ProfilePage.mute","line":106,"end_line":108,"hash":"41f8d8b0c2a63f714875c814edb6c1951f6137ecc191b947f6db2f059c093a93"},{"id":"func/ProfilePage.unmute","name":"ProfilePage.unmute","line":110,"end_line":112,"hash":"95cb63140dbd4a47f8f75a61815c1f0d2e9a8be082af7fe2d06bdaa944b50af9"},{"id":"func/ProfilePage._setMuteState","name":"ProfilePage._setMuteState","line":115,"end_line":117,"hash":"721536335442a539a8ec7700d9db79abd18cfc24ed451fcd29e198f531d0896f"},{"id":"func/ProfilePage._broadcastMute","name":"ProfilePage._broadcastMute","line":123,"end_line":136,"hash":"1054dec2514498c3ccf41dc8c8f8a7c4749107070c4da337ebf8679d9e166e44"},{"id":"func/ProfilePage.getMuteBroadcastMessage","name":"ProfilePage.getMuteBroadcastMessage","line":139,"end_line":145,"hash":"44f1334d18699c4a7ca1c86cfcaa28e6c912f8241013b767f2fbf16ac442b3b9"},{"id":"func/ProfilePage.getMuteResultError","name":"ProfilePage.getMuteResultError","line":148,"end_line":150,"hash":"74bc51c20e9945f9df7777ac8b6d7a1c616159c13dc50ba0e4eef96b7c57fec1"},{"id":"func/ProfilePage.explorerUrl","name":"ProfilePage.explorerUrl","line":153,"end_line":155,"hash":"5285656344fdfedeb2abc4eed4fad4d33b2d867c373326c3859c07ff25f84d51"},{"id":"func/ProfilePage.dismissMuteResult","name":"ProfilePage.dismissMuteResult","line":158,"end_line":161,"hash":"2adc077720973bf7309aef0a2c783200313de0928c5e558a8f8c4551c3bb1828"},{"id":"func/ProfilePage._setState","name":"ProfilePage._setState","line":165,"end_line":172,"hash":"0d8a66f50e222dfaee040344c810f63f74a8765343713133e8c872436b2e8c19"},{"id":"func/ProfilePage.getPost","name":"ProfilePage.getPost","line":174,"end_line":176,"hash":"1a6ae1a02b0f79b5b62a2b2324a5f1edbd743bec004fe73cfef7970bead56885"},{"id":"func/ProfilePage.canLoadMore","name":"ProfilePage.canLoadMore","line":178,"end_line":180,"hash":"634983bcc6bbe560daad8326db0dd4bf31d5cb9e45c40112565351dceaf8e5d5"}]} +// {"version":1,"tested_at":"2026-09-22T18:07:43.978Z","module_hash":"e8a70682a4e4db507950cdf2fd1ca756f24ee5cc2515cd185f7e8a0192ff9852","functions":[{"id":"func/ProfilePage.constructor","name":"ProfilePage.constructor","line":23,"end_line":41,"hash":"5c980686dceea7849e075d670f8c9f4c61ad63b82f7efdd6106bb82b544660d1"},{"id":"func/ProfilePage.load","name":"ProfilePage.load","line":43,"end_line":59,"hash":"d38c4bec56cac83f0df4975852d915bb6bffc4c566cbcca3a933f31b340b6125"},{"id":"func/ProfilePage._assertReady","name":"ProfilePage._assertReady","line":62,"end_line":69,"hash":"e575f98fa1b492b4c11ae5275459d9f9996df4c566b84c7cae91413c72a02f38"},{"id":"func/ProfilePage._loadState","name":"ProfilePage._loadState","line":73,"end_line":78,"hash":"ab0376720ac75e6fd66d437fbb47a53176d76f681cb13b8794249f2a586549e8"},{"id":"func/ProfilePage.isOwnProfile","name":"ProfilePage.isOwnProfile","line":80,"end_line":82,"hash":"4d149bfe7b183b5d38d496c0a8126d22bd9a919e684f375d66e2c8c1348dd773"},{"id":"func/ProfilePage.canFollow","name":"ProfilePage.canFollow","line":84,"end_line":86,"hash":"0bc2c0c17991d8f1a1d18fba29c901e42633b7cf2c2c8b5747a49e5832d7001d"},{"id":"func/ProfilePage.isFollowing","name":"ProfilePage.isFollowing","line":88,"end_line":90,"hash":"9fc0470db7ffea2da96d2dbbdceff55562e1f7e84377fbb0e8b60d53cc723b40"},{"id":"func/ProfilePage.follow","name":"ProfilePage.follow","line":92,"end_line":94,"hash":"7674b789a9d3c48e0f7a6e553613bac99b2f38449fcdd17faa3c6d7cd2773bdd"},{"id":"func/ProfilePage.unfollow","name":"ProfilePage.unfollow","line":96,"end_line":98,"hash":"69d278b09da1f284be6adacb7264f9c06ac71c42f8e8f1baf9e34d5b24a891fb"},{"id":"func/ProfilePage._setFollowState","name":"ProfilePage._setFollowState","line":101,"end_line":103,"hash":"6cd937862bd6bf18d63fe767724b02ca23d1dc54f71ede23b84b9bde2930200b"},{"id":"func/ProfilePage.canMute","name":"ProfilePage.canMute","line":105,"end_line":107,"hash":"0076ea0e688df292dbe6bcde370aa32937cf7dad674e2168c3395d41b63850af"},{"id":"func/ProfilePage.isMuting","name":"ProfilePage.isMuting","line":109,"end_line":111,"hash":"c4fe9ea0501b7349da39321afd074e7ae48c2c1f2e0d1cfafafbf57f8a05c754"},{"id":"func/ProfilePage.mute","name":"ProfilePage.mute","line":113,"end_line":115,"hash":"41f8d8b0c2a63f714875c814edb6c1951f6137ecc191b947f6db2f059c093a93"},{"id":"func/ProfilePage.unmute","name":"ProfilePage.unmute","line":117,"end_line":119,"hash":"95cb63140dbd4a47f8f75a61815c1f0d2e9a8be082af7fe2d06bdaa944b50af9"},{"id":"func/ProfilePage._setMuteState","name":"ProfilePage._setMuteState","line":122,"end_line":124,"hash":"721536335442a539a8ec7700d9db79abd18cfc24ed451fcd29e198f531d0896f"},{"id":"func/ProfilePage._broadcastMute","name":"ProfilePage._broadcastMute","line":130,"end_line":143,"hash":"1054dec2514498c3ccf41dc8c8f8a7c4749107070c4da337ebf8679d9e166e44"},{"id":"func/ProfilePage.getMuteBroadcastMessage","name":"ProfilePage.getMuteBroadcastMessage","line":146,"end_line":152,"hash":"44f1334d18699c4a7ca1c86cfcaa28e6c912f8241013b767f2fbf16ac442b3b9"},{"id":"func/ProfilePage.getMuteResultError","name":"ProfilePage.getMuteResultError","line":155,"end_line":157,"hash":"74bc51c20e9945f9df7777ac8b6d7a1c616159c13dc50ba0e4eef96b7c57fec1"},{"id":"func/ProfilePage.copyAddress","name":"ProfilePage.copyAddress","line":162,"end_line":173,"hash":"ce9ecdfce76b6879f9aa99239231a1946e55299f49485052bbe0f9ce1747bd02"},{"id":"func/ProfilePage.isShowingAddressCopyConfirmation","name":"ProfilePage.isShowingAddressCopyConfirmation","line":175,"end_line":177,"hash":"8bf08c8f2d605796286065a0856a75d59bb3643b41e766930a0e4078530d821e"},{"id":"func/ProfilePage.addressCopyTimeoutElapsed","name":"ProfilePage.addressCopyTimeoutElapsed","line":181,"end_line":185,"hash":"5aa0969ee17694d118d2f8b81855fa5ed80a11eac6aee1e13e6506d68a87fe75"},{"id":"func/ProfilePage.destroy","name":"ProfilePage.destroy","line":189,"end_line":192,"hash":"39d9970ec99985992ba94d49a4cee537993ac5f678273264548724f6f4bda45b"},{"id":"func/ProfilePage._setAddressCopied","name":"ProfilePage._setAddressCopied","line":194,"end_line":197,"hash":"7cceadb7d627cd9198904a297deb5d39721ea01cb2a79669ba97377007120a0a"},{"id":"func/ProfilePage._scheduleAddressCopyReset","name":"ProfilePage._scheduleAddressCopyReset","line":199,"end_line":205,"hash":"0b4c309d0b256d564ddaf7fca212e562addf436dca7e9ea41c2f205df1800c44"},{"id":"func/ProfilePage._clearAddressCopyTimer","name":"ProfilePage._clearAddressCopyTimer","line":207,"end_line":212,"hash":"5f40316e23a3e0438d2c3c291bbfde37779eef74502c0d1ff38e04af351b9f4c"},{"id":"func/ProfilePage.explorerUrl","name":"ProfilePage.explorerUrl","line":215,"end_line":217,"hash":"5285656344fdfedeb2abc4eed4fad4d33b2d867c373326c3859c07ff25f84d51"},{"id":"func/ProfilePage.dismissMuteResult","name":"ProfilePage.dismissMuteResult","line":220,"end_line":223,"hash":"2adc077720973bf7309aef0a2c783200313de0928c5e558a8f8c4551c3bb1828"},{"id":"func/ProfilePage._setState","name":"ProfilePage._setState","line":227,"end_line":234,"hash":"0d8a66f50e222dfaee040344c810f63f74a8765343713133e8c872436b2e8c19"},{"id":"func/ProfilePage.getPost","name":"ProfilePage.getPost","line":236,"end_line":238,"hash":"1a6ae1a02b0f79b5b62a2b2324a5f1edbd743bec004fe73cfef7970bead56885"},{"id":"func/ProfilePage.canLoadMore","name":"ProfilePage.canLoadMore","line":240,"end_line":242,"hash":"634983bcc6bbe560daad8326db0dd4bf31d5cb9e45c40112565351dceaf8e5d5"}]} // mutate4javascript-manifest-end