msg:0,success:true,log:,events:[]
Tx{0AE0200A0A2F766D2E6D5F63616C6C12D1200A2867316D616E6672656434376B7A647565633932307A38387766723634796C6B736D646365646C66352214676E6F2E6C616E642F722F6D6F756C2F626C6F672A035365743205676E6F706D320D73686172696E6720676E6F706D320A323032362D30392D32383216676E6F706D2C746F6F6C696E672C7061636B6167657332CF1F676E6F706D2069732061207061636B616765206D616E6167657220492077726F746520626563617573652062756D70696E6720612076657273696F6E20696E20676E6F2064657374726F7965640A74686520646966662E204974206B656570732061207061636B61676527732076657273696F6E20696E206974732060676E6F6D6F642E746F6D6C6020696E7374656164206F6620696E206974730A6469726563746F7279206E616D652C20616E642065766572797468696E6720656C736520697420646F65732066616C6C73206F7574206F6620746861742E0A0A2323207468652064696666207468617420737461727465642069740A0A4120676E6F20696D706F7274207061746820656E647320696E206974732076657273696F6E2C20736F20746865206F6276696F7573206C61796F757420676976657320656163682076657273696F6E0A697473206F776E206469726563746F72792C20616E6420612062756D70206D65616E7320636F7079696E672074686174206469726563746F72792E0A0A2A2A6769742063616E6E6F742070616972206120636F70792E2A2A20546865207265766965772064696666206265636F6D65732061646465642066696C65732077697468206E6F20636F6E74656E740A6469666620617420616C6C2C207768696368206973206261636B77617264733A20612062756D7020697320627920646566696E6974696F6E2074686520636F6D7061746962696C6974790A6368616E67652074686174206D6F7374206E6565647320726576696577696E672C20616E6420697420697320746865206F6E65206368616E676520796F752063616E6E6F74207365652E0A606C6F67202D2D666F6C6C6F77602C2060626C616D656020616E642060626973656374602073746F7020746865726520746F6F2E0A0A4F6E6520706F7274206F66203235207265616C6D73206C616E64656420696E206D79207265706F206173202A2A2B31312C313033202F202D30206163726F7373203131322066696C65732A2A2C0A6576657279206265686176696F7572206368616E676520696E76697369626C652E0A0A54686520746F6F6C636861696E20616C7265616479207265616473207468652076657273696F6E2066726F6D20746865206D6F64756C65206C696E652C20736F20746865206469726563746F72790A646F6573206E6F74206861766520746F207265706561742069743A0A0A6060600A702F616C6963652F6D642F676E6F6D6F642E746F6D6C20202020206D6F64756C65203D2022676E6F2E6C616E642F702F616C6963652F6D642F7631220A702F616C6963652F6D642F6D642E676E6F2020202020202020202065646974656420696E20706C6163650A6060600A0A412062756D70206973206F6E65206C696E652C207468656E20746865207265616C20646966662E2054686520737570657273656465642076657273696F6E20676574732070696E6E656420696E20610A60676E6F6D6F642E6C6F636B6020746F2074686520636F6D6D69742074686174207374696C6C20686F6C647320697420616E642072656275696C74206F6E2064656D616E642C20736F0A616E797468696E6720696D706F7274696E6720602E2E2E2F6D642F763060206B65657073207265736F6C76696E672077697468206E6F206469726563746F7279206C6566742E0A0A54686174206C6F636B20697320736F757263652C206E6F742061206275696C642061727465666163742E2041206368616E676520746861742062756D707320612076657273696F6E20636172726965730A7468652070696E206B656570696E6720746865206F6C64206F6E65207265736F6C7661626C652C20736F2069742069732074686520617574686F722077686F20636F6D6D69747320697420616E640A434920746861742070726F766573206974207374696C6C20726570726F64756365732E0A0A232320612076657273696F6E206E756D6265722069732061207461672C206E6F74206120636F756E7465720A0A54686973206F6E6520636F7374206D65206265666F7265204920756E64657273746F6F642069742E2041206E756D626572206D65616E73206E6F7468696E6720756E74696C207468650A76657273696F6E206973207075626C69736865643A20756E74696C207468656E206974206E616D6573206E6F20627974657320616E642064657269766573206E6F20616464726573732E20536F0A796F752062756D70207768656E20746865206C6173742076657273696F6E20736869707065642C20616E64206564697420696E20706C616365207768656E20697420646964206E6F742E0A0A47657474696E672069742077726F6E6720697320746865202A64656661756C742A206265686176696F7572206F66206120737461636B206F662070756C6C2072657175657374732E205468650A66697273742062756D707320763020746F20763120616E64206C616E64732E20546865207365636F6E64206973207772697474656E20616761696E73742069742C20736565732076312074616B656E2C0A676F657320746F2076322E20426F7468206D65726765206265666F726520656974686572206973207075626C69736865642C20616E6420746865207061636B616765207265616368657320610A636861696E2061732076322077697468207631206578697374696E67206E6F77686572652E0A0A492064696420697420746F20666F7572207061636B6167657320696E20612073696E676C6520737461636B65642070616972206F662070756C6C2072657175657374732C20616E64207468650A6C6F636B20636F756C64206E6F742073686F77206D653A206120736B6970706564206E756D626572206973206E65766572207265636F726465642C20736F206974206A756D707320763020746F2076320A77697468206E6F7468696E6720696E206265747765656E2E2060676E6F706D2074696479602061736B732074686520636861696E2C20776869636820697320746865206F6E6C79207468696E670A74686174206B6E6F77732C20616E64206E616D6573207468652060756E62756D7060207468617420666F6C6473206974206261636B2E20546861742077617320616E20382D6C696E6520646966660A6F66206D6F64756C65206C696E6573206F6E6365204920636F756C64207365652069742E0A0A232320333235207061636B616765730A0A4D79206F776E207265706F20776173206E6576657220746865207265616C20746573742E20606578616D706C65732F6020696E2074686520676E6F206D6F6E6F7265706F2069733A0A74686F7573616E6473206F662066696C65732C206D616E792076657273696F6E732C2061206C61796F7574206E6F626F64792064657369676E65642077697468207468697320696E206D696E642E0A0A52616E206974206F6E20323032362D30392D323820616761696E7374206D61737465722C20696E2061207468726F776177617920776F726B747265652E20333235207061636B616765732C2039370A6C6966746564206F7574206F662076657273696F6E6564206469726563746F726965732C202A2A3938372072656E616D657320616E64207A65726F20636F6E74656E74206368616E67657320696E0A31392E39207365636F6E64732A2A2E2060676E6F706D2076657269667960206F7665722074686520726573756C743A20302E3038732C20616C6C20333235206F6B2E2060676E6F206C696E74600A616E642060676E6F2074657374602070617373206F6E20746865206D69677261746564207061636B616765732C207573696E6720676E6F2773206F776E2062696E6172792E0A0A4F6E65207061636B61676520626C6F636B65642069742C20636F72726563746C793A20612071756172616E74696E6564207265616C6D20746861742065786973747320626F74680A756E76657273696F6E656420616E6420756E646572206076312F6020616E64206076322F602C20736F206C696674696E6720763220686173206E6F776865726520746F206C616E6420616E640A6E6F7468696E672063616E207361792077686963682069732063757272656E742E0A0A492068617665206E6F74206F70656E6564207468617420617320612070756C6C207265717565737420616E6420776F756C64206E6F742066726F6D2061207363726970742E204974206973203939340A66696C657320696E20736F6D65626F647920656C73652773207265706F2C20616E64207768696368206C61796F757420612070726F6A6563742077616E747320697320610A6D61696E7461696E657227732063616C6C2E205468652072656865617273616C206A757374206D65616E73207468617420636F6E766572736174696F6E2063616E20737461727420776974680A6D6561737572656D656E747320696E7374656164206F66206120636C61696D2E0A0A232320706C6561736520627265616B2069740A0A5B6D6F756C2F676E6F706D5D2868747470733A2F2F6769746875622E636F6D2F6D6F756C2F676E6F706D292E204F6E6520476F2062696E6172792C206E6F2074686972642D70617274790A646570656E64656E636965732C206E6F20676E6F20746F6F6C636861696E206E656564656420746F206275696C642069742E0A0A60606073680A676F20696E7374616C6C206D6F756C2E696F2F676E6F706D406C61746573740A676E6F706D20696E69740A6060600A0A496620796F75206172726976652066726F6D206E706D20616E6420747970652060676E6F706D20696E7374616C6C602C2069742074656C6C7320796F75207768792074686572652069730A6E6F7468696E6720746F20696E7374616C6C20726174686572207468616E2022756E6B6E6F776E20636F6D6D616E64222E205468657265206973206E6F207265736F6C76657220616E64206E657665720A77696C6C2062653A20616E20696D706F727420706174682063617272696573206974732076657273696F6E2C20736F2074776F2076657273696F6E73206172652074776F20706174687320616E640A7468657265206973206E6F20636F6E73747261696E7420746F20736F6C76652E20676E6F20736B69707065642074686520656E7469726520636C617373206F662070726F626C656D20746861740A70726F64756365732053415420736F6C766572732C206279206163636964656E74206F6620706174682064657369676E2C20616E64204920616D206E6F74207265696E74726F647563696E672069742E0A0A5768617420492077616E7420697320616E206973737565207768656E2069742073757270726973657320796F752C20616E64207468617420636F756E7473207768656E20697420626568617665640A65786163746C7920617320646F63756D656E7465642E204D6F7374206F66207768617420697320696E207468657265207374617274656420617320736F6D65626F64792C20757375616C6C79206D652C0A736179696E6720224920657870656374656420697420746F206A75737420646F2074686174222E121108889A9608120A383537303575676E6F741A7E0A3A0A132F746D2E5075624B6579536563703235366B3112230A210200524A3F8D2C003A89C43F45FEAF6EB8ED45B6E3A35F7BBE6B3B49FF9E2D83C81240F5DAF0003036810720F765A7D63C478AC0F5332FBEF72C8C53C3993BF82C0E9D14E288581B45DB056B4CA349B1750510CC6F105D589D0DE735290B7270F56248}{
"__typename": "MsgCall",
"caller": "g1manfred47kzduec920z88wfr64ylksmdcedlf5",
"send": "",
"pkg_path": "gno.land/r/moul/blog",
"func": "Set",
"args": [
"gnopm",
"sharing gnopm",
"2026-09-28",
"gnopm,tooling,packages",
"gnopm is a package manager I wrote because bumping a version in gno destroyed\nthe diff. It keeps a package's version in its `gnomod.toml` instead of in its\ndirectory name, and everything else it does falls out of that.\n\n## the diff that started it\n\nA gno import path ends in its version, so the obvious layout gives each version\nits own directory, and a bump means copying that directory.\n\n**git cannot pair a copy.** The review diff becomes added files with no content\ndiff at all, which is backwards: a bump is by definition the compatibility\nchange that most needs reviewing, and it is the one change you cannot see.\n`log --follow`, `blame` and `bisect` stop there too.\n\nOne port of 25 realms landed in my repo as **+11,103 / -0 across 112 files**,\nevery behaviour change invisible.\n\nThe toolchain already reads the version from the module line, so the directory\ndoes not have to repeat it:\n\n```\np/alice/md/gnomod.toml module = \"gno.land/p/alice/md/v1\"\np/alice/md/md.gno edited in place\n```\n\nA bump is one line, then the real diff. The superseded version gets pinned in a\n`gnomod.lock` to the commit that still holds it and rebuilt on demand, so\nanything importing `.../md/v0` keeps resolving with no directory left.\n\nThat lock is source, not a build artefact. A change that bumps a version carries\nthe pin keeping the old one resolvable, so it is the author who commits it and\nCI that proves it still reproduces.\n\n## a version number is a tag, not a counter\n\nThis one cost me before I understood it. A number means nothing until the\nversion is published: until then it names no bytes and derives no address. So\nyou bump when the last version shipped, and edit in place when it did not.\n\nGetting it wrong is the *default* behaviour of a stack of pull requests. The\nfirst bumps v0 to v1 and lands. The second is written against it, sees v1 taken,\ngoes to v2. Both merge before either is published, and the package reaches a\nchain as v2 with v1 existing nowhere.\n\nI did it to four packages in a single stacked pair of pull requests, and the\nlock could not show me: a skipped number is never recorded, so it jumps v0 to v2\nwith nothing in between. `gnopm tidy` asks the chain, which is the only thing\nthat knows, and names the `unbump` that folds it back. That was an 8-line diff\nof module lines once I could see it.\n\n## 325 packages\n\nMy own repo was never the real test. `examples/` in the gno monorepo is:\nthousands of files, many versions, a layout nobody designed with this in mind.\n\nRan it on 2026-09-28 against master, in a throwaway worktree. 325 packages, 97\nlifted out of versioned directories, **987 renames and zero content changes in\n19.9 seconds**. `gnopm verify` over the result: 0.08s, all 325 ok. `gno lint`\nand `gno test` pass on the migrated packages, using gno's own binary.\n\nOne package blocked it, correctly: a quarantined realm that exists both\nunversioned and under `v1/` and `v2/`, so lifting v2 has nowhere to land and\nnothing can say which is current.\n\nI have not opened that as a pull request and would not from a script. It is 994\nfiles in somebody else's repo, and which layout a project wants is a\nmaintainer's call. The rehearsal just means that conversation can start with\nmeasurements instead of a claim.\n\n## please break it\n\n[moul/gnopm](https://github.com/moul/gnopm). One Go binary, no third-party\ndependencies, no gno toolchain needed to build it.\n\n```sh\ngo install moul.io/gnopm@latest\ngnopm init\n```\n\nIf you arrive from npm and type `gnopm install`, it tells you why there is\nnothing to install rather than \"unknown command\". There is no resolver and never\nwill be: an import path carries its version, so two versions are two paths and\nthere is no constraint to solve. gno skipped the entire class of problem that\nproduces SAT solvers, by accident of path design, and I am not reintroducing it.\n\nWhat I want is an issue when it surprises you, and that counts when it behaved\nexactly as documented. Most of what is in there started as somebody, usually me,\nsaying \"I expected it to just do that\"."
],
"max_deposit": ""
}