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