Dashboard › craft › Distillation
0ad27c83-f0eb-4442-84d7-afbecab2ffb2["561ca76bc2ddff5c5d786b7847429efd","b1191a3ae6a05f41b6e6d51c63406251","d1fa0ef8041f0532fa0c376d6ec83984","5404b201edc708362db9722f554a34f6","863e1a150ce025af03223153c418b918","185664762d1505ff9177a869d12a070a","3ea25d669267b01ad81ad88b5d0c5135","963255e6fcf930e5cb39c7367d88750f","466cc8079e5611c6b681718cbda79269","116890cbcc7e672293f20c348f033249","d7b65b0de536865683123b0338d03d53","cc93656fe709d008addea7491f77c13c","76e757d6e2654b6f52e5378ef02ab8a1","e11828e32b6114d2266a217ab61972e9","c43fa058bbbbf7cc01ff5c7926ec87eb","6500249120f84fbe6efc717adfb85af2","ef3e168dae8479d9afb496d3d9dc1375","6b6b8cd91c3f1b58ab05aec1273e969f","cc91d5cf8d03f977160b6f7aa2a7731c","b4378c7b8a4366923e54730b049b6948","1bf7165172233caa0af0150034b17512","67b104c4131bb1175877f246260635ad","d4cfacdde388d7fd59807c29cbeedfd3","c455c73bbb6f3287a9b2ae4052938054","ead10149818f40a1ce90a50ad62b5dd5","eeb6872794100a981d82a37b92c6fb5d","a857b857b30b3f2f27ec9ac165fb2c2b","9c5923d53f9df22b3a595286b145ffb9","c6e47ae5c06c504e3c59d6d45160e20f","ffe4663d5a757203e5e52497ad3714cd","1ad07ceeefc2e920de311264fe8eab27","9965018bcb0faf6b9ee25e5bda4293f9","2899597a42240f5869fe1a580c9051ae","5399db7f095ec5515301031e69cac4e4","4b298b618ffa184331759e7811a0ded1","aed7fe4bbaa530ab7ca28b6fb9e6a7fe","3aeb7e2fa6dd6b001c9d503d5baf7086","4e10b4bb72b362dc861c174bcb8580b8","fc3c5169075bf0e0ea580c8297be52b3","3359bce706a06181a0b23358c94cfbac","1a2c9fcd0d8363457ae1199f799c6cc2","cfbec2c2ef8149fe6535a19c78ae3899","cef66ec688914a1791c7d86944724ca9","41c7fb8e7160b72e86aca5054548bdfa","bf5225f9ec56bacd4c327d83fc1e4f6d","c87b92bc64acd2d4c4b63e215dae6021","501198c37f060dbc7e43b4d999bd2fca","304bf2b42bafb937b6fb1015f3034b98","2b41fc21fb1470dec97699f1ba5bf0c6","e646f63fac09bd4ce115f75df7ace0ac","359816cd193bad9d33c926a249f59ce2","f243c2794cc034841fa7bc8592695eb4","b74dbd25e39715baada865a4fe428f05","7657056f9ba35932b1281219627a7f9a","a363058b1b1dbba5bf4c3a800c54ef18","80875fd4f2ee8ddb67e0384ec6f75fbd","099536eda35a5e97701c8210d8f12794","677c56d1a965b404ad3a9d8eac16da9d","9c1c0d9b934fd6334ca31d1f9d90a23b","e403225b5c33857264e00688660d7a3f","aacdddf2fec3abefaa950df76701c27c","13b94bf0fceabd61ab907ff0c4a7ce86","3bcd8773633147ebceb6633ba6bce567","7d60fab6f5908981bbec7b5ca8c4d46d","6e7225867570e14614fe4d11a672e61d","cf2ad4b1db4e73440b1bbd65288a1e4f","6ace92e8d9a6fadb84a1cd45acce099d","6deb7705be859baddc7ae51cfc7aa61b","e5117c534e95e7042977ad4d6b5ce38a","ddf227da2a24c521594b57843eb8aa55","261329a7563abf0ab0532d256b7e81ba","401e4b705cac7d3d9ffeb63371fc3ff9","ba85036432a7507175a509423f37d8a4","48cf135d6a116ff487392f2616cb14ef","4f9ce0f232030c8b7f73c29a55d6754f","19327ca248302526748331da167b0a24","6fd861990a9966966cf2656abccdc200","38a96279369dfd926733ea8012a1d111","a04421dfd46781b254f36243ba563849","945a9cb06e663605019c1c785afc7f3a","9818a0f5fa2a7f67a68782765ca45bd9","9b6f70603256591609239c171fed29c3","f0a868c9a2de3c572298490f19402406","c8441bb974669e376644ceabcba8f751","dd2d2eda7f86d6230614c2faaccbd41d","809f285380f3c8b67e9857f81ae3fca6","8987ebe05bbc81b68342b26e368e7368","45fbd6efadea9457d2f177780373292f","714c1ea6ad6a19270d77d79f143d6482","0ba9c5b15a3011e2241a727b62ec4f36","ade643855ac20b32c502e25a2ec61f04","2f0ea720600fd18092801331946bf17f","2a9927877553835a26ff033a715a7ed1","a79ba9367bb64c4d481fc33b226723a1","6dd2a233c13da41023e3ddb95d10775b","233853b24803b934421bf4eb697d05f9","d7a66a0ce1caf554a563d75066cf20c2","3bccf5947d9e37a96faa7725b8f13a3c","1089a91b3fffecb75ab3403dce9aaebb","63d9106ad2722f0c7c0271effa4de62d","09c9f2217ef9a1a1efa073bfb724c11b","afff8707f5e9946b1f4b4106e3836b99","552a22b07f14e41963c343dec9f85f72","ed0cf401c2da53a8f21d6951ef499ff6","d08c3305031be25169b23563ef142496","2a1b5b9951e1830622d5626befa5b016","a062d877869e839c0b6e82483a276a66","2fd130b7330a16c3ec0fb76c16187f84","ede561fddeb312828d1034efcef25833","2f077a1c052096a673262cedb5314ecd","4580ed00017710fb8ce4547c15f1db78","3781f7b2eb1a725831f06bd806e69d48","867d7bfa51bef824ebd5781281bf3ad0","4903acaa95563d6c45ef14e81fa838a9","5ced2d1332fca59a14a1d0620b4cdf0b","abdbbfc88c5161fbac0fe983ff374b65","035f4c5c352428a90621c568d8a063ba","0709b71f3bac895ba18ef821bb41e8b7","9167c189974321f660146607f4e2d1eb","89943aaef20f064843e7db20c7ef91d6","3932ca08c37ff516a2fdfa6979609005","2bcb86b641e41996938e9833c8185939","78462061b7279da27dd9573f312b0448","2f74790a7c5dec8b74a14e2faab72135","66961a95f56b6518c30b84d735fe0178","654ad181e28600cc1d98acb07412a24a","c4c1adffaeee7bf611050010fa6d70d3","266053cc2af62d7c140da91db3d73729","f0c2b930de5d39c7add7ed80486a1e4c","15f7d9480e8ee6f276ff3f55c9ddd041","c0657253c80ed7a473d017d83d080275","9c15a61c2ab60429e2bdb0af1aabc48e","b53c4b1b7d719e5227993197b8cbc2bc","d01cb341287a2e1e71d40169b08ae334","66108410ac046c62355129b31a9b5676","26ef4dc34d141edd0cd9c9ab4deec6a7","ce64767eac754f1c9a34e6eacbfc1367","179609190de05596a35fafaf040e2ada","352099a4c193092c107d001875a2b7de","12ebf8b377c0535583c4c933b3afafc9","2ca0cd071b07cc22b644ee437df14015","2e3bba04b39199fd9a46e072059d3b70","e90598aee45061153d14ca89b3c0ba81","3eb0f44267adce50a6fbeae0ee4673bf","8302385953d6a98d1efd67b0ebe4a5b3","144aacdb1b0b2739e191151a8ccfee59","364b595236f6ae388f72d0141b89c5c9","997d2599ed40975e8e693137ed6b8da9","a057dcf02046cd271a30f8fd62c385d9","8013602c281d8ec7caceb74b5595b565","f0acdb41cb0e80a1125fb5e4c4fc46f3","6adcb291a97828cea2b5354de6caadc0","d6e3d6179230dfc481bd8890263c886d","b7d0bd5c6cf2fcc10742c07adc0e370c","a592fb81c8dc26927e0c052ded373122","732f5b10107f3b7d9df7ac975af439bb","d5d0d69db59c2c11abc814e91db3b629","c2e4e5bef9133076d381ffa8b1b5efc8","f42333f17d1f57424845c3e8a5b2f7eb","d646f501209f784c983478e59d4e1090","24e0690087e189a986462ef377d5c9e7","ae0a1071bf4eb1d995f850ed410a5464","50adf39c295ed035f39159a09e44b78a","caab31da5204b1338a02f6dec8572d46","1194fc60d838cc694a4123f17bb72250","8a861ecb341314e29890ad6d869ca6b9","2464135c3b1f6098fa9fabd4544f4b71","4a335b249325fcd0db334c01c6ac8eb0","d97cc8f5a692e244a9d58aeaf0ca67c1","f725a425c27040a63afd762fa72d86dd","e88723b1abdca0191692be341fcca17d","2a3347be4b441696b0b5d696e29d0950","3acebb0f5904c65e5299b3674c64c428","8c599d76f10fbbc1be7f13b590dc5363","093625b6386a177bea9e6a641e95b0ae","0f9d504acdd59a9fd6ce2ee79bff6656","82244d7713d701d12df3fe64b8face6f","45d9d3e68d577b32f8b0548f31273330","54e5ce4c946f44e8156efd5c33f93a64","a2e81454844c8417c202e964cae1804f","f219c1fe707df61e865df30d9e502f30","92a45c8d992ce08ed71a3ef98ca84ea6","b26d506d89d83672ab373810ad61749a","d0ad83783c125f754b7716b26d89d7e9","6f55831f50df10ff91e02608e1ab7cd4","b007a6000c82ed30759b618ddb535768","0ca0174a0ce42518f1fd901c20d9896b","18f4763ad7ee1b71b41da26dddef9756","fffd41bb2433b10ae55df507314ca031","9745d1fae23251d0be423b3ed53c159b","80f5bfb18ac87a576577c1f48d79aa8b","30a44dde77e4c28268098672a59c828b","ccd1a0789da8b01edb3c9bb5cbd2ff73","93dae08cae3f536114178a8da08d2fbc","d459969eaa8c5760c77b4cfe3da82802","9fc3b133644c2b7c78335b169124c675","d1ab7ef8662e9d7c3eb47b6a154650e7","c09921545c33b9af48cad3ece9536c8b","f494be0f95c1bb57adce2409b8c7b799","3a0398edeb276d64b0c653bd0b4ec856","32cae5fe7d37857900d932cc106dff6e","97a2733f30d1fd9f6a94240de7efe0d3","2d0624bd6ca97f03b76e48177470cb96","68ba2472ce4b6c959ca2063189901d49","2856320b0d1c44f8e43231a84378f6e3","4bfdb8a5b0f1228a420c232f74aefad4","160103fad9215218eb20feeaf89b852d","24c2fc500af4afb579803c9d899b27e1","48b5233a972befefa0d8a160198bd92c","dbf0e1855b5d67508110eec1f0602f57","ef8ae6a1c6ee3d07f1da9f01bcaec886","085bc1d18a3b1f384d4f7fddebdc3a88","f2c009bbee1f77533a81117eaa682805","bb190e6cf4bc2199608785a740cc64f0","3e8669909ae86e52f31bba608279e33c","c09d4d891e07198233d8eaf366db36a8","bd41eb82c174060abfe3f941bb914cfa","b89386b1a9e0d204513631bc9d2945f9","44fa9a3f1fbda864d2a54a200bfc3ae7","b1f264d2919b58aaef28f2f6960eec14","b36f95063a133c01784dc316b793fdbc","a9a2c7a209d5260d4abd18c1731ea73e","f47648ec29089d57a0ce2fd7a0971325","dc5342adba0eb88b3c16f0eceb67aa14","a31a7eb82b504e53aee8134fa1c93e64","770cdc971d90dd10dd8e6ecac85259ad","8c888badbd367e616a6d6f19355a07d5","023503e94124a641bb955f10a8f4c25a","a75292dd3029d312b30f397d1bbc2705","87b2751604ad6a1b0bf59ec60d91be8c","d6f5eb1cdcf20729b27a16e8eb5568ce","c32f90efaef20a98089c78ef21d59679","a7e2ed8035a58d6f25e0485bd017f1d0","fe0cd62b38143f4723c7659930468f95","44fd9c9db3d2550cac061d7f6a9f4236","cef0e180d2a9a81c9faa9a08f242693c","06f612a123b56ad3d92738a76276d673","332c27eb070eb91dbc5f84b3c9a5e2a4","6dc19c451f2ae81a99b12a179b143b64","0490c15f1a8f7c700ed628641e27f4a2","e067f98fc3905b990f66c5f5f6f2e7d0","6b0971f0856f5e4534f2d0d00013ff85","17c30df19b519a216224e32f96f08b91","b6df80d3fe868f4808ced28c6562b4b2","075b1625f471c62dbbc606bbb92d9736","d6d4f2f29a2253c6a705f5badddc9888","0deb11c3d04f0adfb07f027818cf8fd2","ca592ba25d1e8fd9db27193f57713303","6bea1d6f3f20efd1d5c5513e18901fed","b70bd47771fcbf78186d688eaf598051","bcd1a16fb753289c01ec007de466d8ae","2a50bad8ee78111159fae5100d58fec5","ef56b4ecadc04d01fb66552d7ba47c95","c5376650e4d1d1ecd622b7f9bca4a839","e3f8afc018e0957eeff31fc3e00a31a8","e9946faa4aa81092d7e46aef44a9afcc","87cc267445e039ec95d6a880dc1dffc6","0d3afab04560695e3bc2403018893685","5dc4648b251c7a5e3fc76fc1ded2179c","f7e2ead125fbbbe0a7b18d829ae01d51","29a9ef6fe0daf3e034a7d24d2378fe0a","d78545da8b912c06ba68705b43214bdd","0b48bdfebb263e5b543ddcbb4d7e92a5","204f4c140982147173dc17e1bb0b1665","3df9de05ee513e5501e96493868e4d18","2f9d4937352665e64d531ca010e68071","439764b46459969c5251c63a5a9d6dc2","a5261d1845f27b190d4da8f55beb4086","ba8447dd4e1b2e647d2f931052ce5e7d","0ab12c4da81167e42d8def0cf698e4d7","f4bb43f366b9842dec75f64c178639a2","9edf7ecafe46cd2789d386ec24c135aa","398ee3de734ae46568c24db587b5adbd","16b33ec5b521da446f827eb104da5bd0","269b3fdf231520c0dba50d46c9f5998a","2fa30f769ee41286b07aa1a55e61f99e","cdf68a266ddf03d98cf0441aacfa1ecc","580f04ef581b8eac39ea24bc3515e735","013090c6693dee0264234a2b43afb08d","0dc912f6d75ed2cfe2eb1bf6ebd874e7","35ff51e2385b64ba6ec9cfbfe81227e8","401bbc42d8d7d451e24d5d3e985b821a","f3acf9b61ce392247a2eea93b2db1dfc","6fe05aa2fbe6bf7a78006c1117650cec","fa76aac185806d07e6aaadc75fe2aeaf","86dfabc6efd5e674774dd37c5e50bef7","938acb1ce7588478f8380479ed2a171e","e0dcfad8456b8e67edd8934997705d46","92538ffd09ff3c1bb9cf6984807a2670","7f9092718c5e9aef4fa521fb2069a9c5","a1a643827ba9df5b756504cc980e0409","ee3137fb6f9d81fabf75d5cdafef58dd","f0ad633a767a62655183f2c2a0d46659","61d4c909b6fa4c743c09a07fca59a001","35c5b0d08673df09e87694c5fb66024d","576c97c648894450c9487f009326f1d3","a858d3772fe0bdb50b992f7056e619ef","9b1192d94555134104761aa036b89bb8","d5db315dfd92056b97818698511e02af","e6d28bee93081022d23b31a9d1f0fd3d","10e8c11085e1af4bb5aeb34c6a73bde2","b6dcdc8400734077792202e92a549003","87c74427d8fb12e74fe3baea8b4b5207","6b908bde8e2f458ae5e404a999daa92b","b46987a572d34235db228eed88db563c","ad998af1cda202c0e903e03efceda30e","4e9c1fe0fa0af6d24b3f999b81df2fe5","77c7c7c2b8393b451c11972d4ef0d326","333d80946345a872926ff81567c5e987","4ac64f0846669e886f8d40a30de9f504","1adcea7f2aaf38b15e087cc9a0c5a6ea","b12979667fa242b26224ffeeec1db78f","45f36d34ac52967b390abd07cc6f9c52","fe22b5ff0dc8bf7b79f0e2ce91e52ad9","5682fe45c3659356322200ad51d1092b","396fc17fde38bc4be57230b5097199f2","18a4dda42fffee41fdf0e3fafdce3ac7","cad12e60b659df28a89efb182184cea4","2138be4bec2c225a9a4d0aff6e6ca33d","b63fed12cefae49b55086514d5005e3b","4de2105eb0e1c50da58d6050dbe1ba91","c573a35458d9a7ff618c91e05d1ebe40","1f2186b8ce74b6591fdbeeabfe595e5b","a684b11496d7f5f31551bac706dfc23e","ae3ba1c49688efdf3b73cc3d588c44b2","d98d2d3918132c5cdaf14e115d7fa292","dfda1976f93ceaff7abcd6080488f082","8e3bc35e2e54ade5a7d87421d4c3994b","4d72f94cf1de34b01427080dabbca0cf","2ba40560a1ed17e5fe5de807f8cb7755","daec77809fd8ec0b8e3b871468f39036","51cb36235e9abae92e5ea11cbbc1a082","4cfd050e3c511fbcda4be451a3a23732","3413c3655536c5c1eae8ffddd34c18d0","6d7f7fe928cd135ca48dad0fe978f3b3","33bfef6515913f32da204a99726971ed","2419d8bc34a2ffeb820ec591e43c25a5","26cd665514dda6f60782ae538917ae8a","c1b29eb4fb9da208fbea24ede1f60c3d","5cbc3da09c7d9eff1c6e79b442bd9169","5f839676a06f681757fa4686759e412d","b51f5edf12c507867757e26dfde0bf75","a49dbc4e24c21603f9c413733bd5b9f9","22aee831480923e6fa18b74d800dcab6","673766ad59643dc9edd0def34fccf663","8deec465e7ae12e5441b20f96f038c73","8cedbfc6ec8e52eddbfc15baba255604","bb6288403b2722eeb864b68cb079f7c0","a0b8778ca36033b9062f9610b683ff05","074af52d5b15e7c3079604383fc27bfc","065370a5079baf3154ec92e405690c35","ef5cadc467b810fbe56bb6d8f12510a2","a125e0c7bbed6858b599470d00de8edb","3041373a4dc2c1e1e23a6f5098232a75","3d07c1eb039bbd7bab533802597f59a6","064c67a043a147725c6b1bdaf07aef9a","5a42164e8a5dcb7ca758de0cb3d912b7","391e5aab9055102db86a238e7240222e","c697b1f00555a85c51fd6e2c9388fafc","b392750c1e1a8e002065f34ccc3b5d23","b93959e42871e05341eb48620e9382e8","1b0cde3c0b504ce37ebeb4b4a600b9e9","651a3f4e318b3a4fb9f4d472a9233422","bb6c44ddfe1375cfaace1164e69c3ef7","5421c1da20d00934a3f306a64a03ff8a","5348a8df708859e3e799fa32a296a651","2c1fe0eea5f676d610d9425375df84b2","187bb19b05a22d7647340cfe9044be9a","a3112586bf076cd951d8bec0920c9610","90d733f5ced67776dda674429d0206a4","7f3e4934d3f9553a0f09951f17850628","14b9efc6e6ae1f5f0ba761ab31b11b30","4ab04dd86dfeb9a1ee4d19445cdc15d9","259427528674c5c1a8438c8010754fe3","701d6a7633ce04a16adcbd2fc4a09da2","e71ff14cfe253705c29ee289cb751443","40c3aae85d127eaf2383a08c2e5c8def","ea28dc50d4dd2b06f8b9970b904e6f34","7c0936af3dadf905b59468aefdbf98a6","54e2857a66b7ec02b414abada7d58598"]
/home/byk/Code/getsentry/craft.0f8720e on 2026-07-16T12:15:08Z. Branch feat/cloudflare-target deleted (remote+local); HEAD was left detached due to a worktree conflict during cleanup.feat/prefixed-tags (branched off updated master, tracking origin/master). As of 2026-07-16 12:59, all implementation/tests/docs/adversarial-review items were complete; only "Commit + push + open PR" remained in-progress. Completion/PR-open status not explicitly confirmed in later observations.fix/cloudflare-target-review, addressing 4 user review comments left on the merged cloudflare docs page plus findings from an adversarial subagent review. Implemented so far: default deployType changed to worker, CLOUDFLARE_ACCOUNT_ID made optional/non-secret, productionBranch auto-inference via Cloudflare API, MINOR-1 fix (env-expansion guard applied to inferred branch), MINOR-3 fix (404 hard-fail via reportError).AssertionError: promise resolved "undefined" instead of rejecting, 1 failed / 26 passed of 27). Root cause identified: the reportError call for the 404 case was placed inside resolveProductionBranch()'s own try block, so its thrown error was caught by that method's own catch and swallowed into a warning instead of propagating. Fix in progress: restructuring resolveProductionBranch() so the try only wraps the network fetch + JSON parse (returning a result), with the 404 check/reportError call moved outside that try block. Fix not yet confirmed complete/tested at cutoff..craft-issue-842-plan.md and .opencode/plans/1784109577263-shiny-knight.md..craft.yml model for unambiguous getGitTagPrefix().--branch to wrangler so a release publish targets the production Cloudflare environment (user-stated invariant).isDryRun() guard added before spawnProcess in cloudflare.ts (addresses adversarial review C1).make_latest repo-wide cross-contamination limitation in github.md rather than fix code (M1); (b) add a test for the mixed defined/undefined tagPrefix case (M3); (c) leave the double-warn cosmetic issue (M2) as-is — simpler/more idiomatic than adding a memoization variable spanning a large function.productionBranch: infer via Cloudflare API (GET /accounts/{id}/pages/projects/{name} → result.production_branch) using the same Pages:Edit token scope deploy already requires (no extra scope needed) — config value, if set, remains an explicit override.CLOUDFLARE_ACCOUNT_ID: made optional, removed from targetSecrets (only CLOUDFLARE_API_TOKEN remains a true secret) — pass through to wrangler env if set, otherwise let wrangler auto-discover (matches wrangler's own resolution order: config file → env var → cache → single-account auto-select → multi-account prompt/error).deployType default changed from pages to worker — Cloudflare is retiring Pages in favor of Workers Static Assets; grep confirmed no other code assumed the old pages default.resolveProductionBranch()/spawnProcess, both gated after dry-run check), no token leakage (token only in Authorization header, never argv/logs; catch-block errors don't include headers), no new dependency (uses Node 24's global fetch, no CF SDK). MINOR-1 (env-expansion guard not applied to API-inferred branch) and MINOR-3 (silent degrade on all fetch failures including 404) accepted as worth fixing before merge; MINOR-2 (no token leak) and MINOR-4 (test coverage) needed no action.PR #843 — Cloudflare target (merged, commit 0f8720e):
src/utils/system.ts: added shared "extract-and-flatten" archive util (refactored out of ghPages logic).src/targets/ghPages.ts: refactored to use the new shared util; removed unused path import.src/targets/cloudflare.ts (new, 304 lines pre-follow-up-review): targetSecrets = ['CLOUDFLARE_API_TOKEN', 'CLOUDFLARE_ACCOUNT_ID']; WRANGLER_CONFIG = {name:'wrangler', envVar:'WRANGLER_BIN'}; DEFAULT_DEPLOY_TYPE='pages'; DEFAULT_PRODUCTION_BRANCH='main'; DEFAULT_DEPLOY_ARCHIVE_REGEX=/^(?:.+-)?cloudflare\.zip$/; class CloudflareTarget with getCloudflareConfig(), getTargetSecrets(), getWranglerArgs(), publish(). Config-guard (~line 148-150): values matching /^\$\{.*\}$/ rejected so config strings can't be expanded into secrets. productionBranch doc comment: passed to wrangler pages deploy --branch, is a Cloudflare selector not craft's git branch. publish() (~line 271-274): explicit isDryRun() guard before spawnProcess, documented as a hard invariant.cloudflare target in TARGET_MAP (src/targets/index.ts).cloudflare.test.ts (25 tests, later grew to 27 with follow-up fixes).Dockerfile; verified wrangler@4.111.0 installs cleanly in CI Docker build.docs/src/content/docs/targets/cloudflare.md (62 lines) and linked it from docs index; verified docs build/preview render (200 status).PR2 — Monorepo prefixed tags (branch feat/prefixed-tags, off updated master):
src/utils/git.ts:45 — getLatestTag made prefix-aware: added optional tagPrefix param, uses git describe --tags --abbrev=0 --match '${tagPrefix}*' when provided.src/config.ts:332 — getGitTagPrefix() now warns (via existing logger import) when multiple GitHub targets declare different tagPrefix values (ambiguity warning).src/prepare.ts lines 761 and 869 — getLatestTag calls updated to pass getGitTagPrefix().src/changelog.ts line 58 — getLatestTag call updated to pass getGitTagPrefix(), guarded by existing config-file check pattern.src/calver.ts — confirmed already prefix-aware (filters tags by prefix); no changes needed.src/utils/version.ts — regex confirmed correct: getVersion/parseVersion correctly extract version from prefixed tags (verified: cli@1.2.3→1.2.3, mcp@2.0.0-dev.1→2.0.0-dev.1, v1.2.3→1.2.3, 1.2.3→1.2.3, cli@v1.2.3→1.2.3, sentry-cli@10.20.30→10.20.30, foo2@1.2.3→1.2.3).src/utils/git.test.ts — updated assertions since getLatestTag now calls git.raw with an array argument instead of spread strings; findReleaseBranches (git.ts lines 225-271) fix applied — 25 tests passed after fix.src/changelog-versioning-policy.test.ts — fixed 5 failures caused by missing getGitTagPrefix mock.src/config.test.ts — added test for mixed defined/undefined tagPrefix case (M3 fix).docs/.../targets/github.md and docs/.../configuration.md (releaseBranchPrefix section) updated; added documentation of the make_latest repo-wide cross-contamination limitation (M1 fix, softening "products never cross-contaminate" claim). Root cause: isLatestRelease in github.ts (lines 855-864) compares version-to-publish against GitHub's repo-wide latest release, ignoring prefix — a real but accepted/documented limitation, not code-fixed.tsc --noEmit clean throughout; lint showed 7 pre-existing warnings (0 errors); full suite run 1 (before M1/M3 fixes): 1054 passed, 1 skipped; full suite run 2 (after M1/M3 fixes): 1055 tests passed, 1 skipped (58 files, 31.31s); docs build succeeded (pagefind index, sitemap, 28 pages, 7.88s). Final git status before commit: 10 modified files + 2 untracked (.craft...).Follow-up PR (branch fix/cloudflare-target-review, 2026-07-21):
docs/src/content/docs/targets/cloudflare.md:
wrangler@4.111.0 (bundled source node_modules/wrangler/wrangler-dist/cli.js) + official Cloudflare docs:
deploy2() (cli.js:298960) — no --branch ⇒ isProduction=true; --branch <X> ⇒ production only if <X> exactly matches project's server-side production_branch (fetched via GET /accounts/{id}/pages/projects/{name}). No hardcoded main default in wrangler itself; wrangler's own prompt default is literal "production" (cli.js:299802); Cloudflare docs say default is "the branch you first push." CI/non-interactive with no --production-branch errors.config.account_id (wrangler.toml/.jsonc) → CLOUDFLARE_ACCOUNT_ID env → cached account → fetch-all-accounts (auto-select if single, else interactive prompt or CI error). Cloudflare docs mark it optional.CLOUDFLARE_API_TOKEN (deprecated alias CF_API_TOKEN), CLOUDFLARE_API_KEY+CLOUDFLARE_EMAIL (legacy, deprecated), OAuth via wrangler login, CLOUDFLARE_ACCESS_CLIENT_ID/SECRET (Access service tokens, not deploy auth). No built-in OIDC/keyless flow in wrangler v4. Account ID confirmed to be an identifier, not a credential.--branch necessity): from a non-git temp dir, git rev-parse --is-inside-work-tree fails ⇒ branch undefined ⇒ still defaults to production. Wrangler v4 pages deploy has no --production flag and rejects --env (Pages-specific error); --branch is the only Pages environment selector.src/targets/cloudflare.ts (post-review):
DEFAULT_DEPLOY_TYPE changed from 'pages' to 'worker'.CLOUDFLARE_ACCOUNT_ID removed from targetSecrets (now only CLOUDFLARE_API_TOKEN); account ID read from env only if set, passed through when present (via env at ~line 412, not argv), else left for wrangler to auto-discover.resolveProductionBranch() (~lines 262-334): if productionBranch unconfigured, calls GET /accounts/{accountId}/pages/projects/{projectName} (accountId/projectName both encodeURIComponent-escaped, lines 303-304) and reads result.production_branch; gated on deployType === 'pages' (lines 393-396) so worker deploys never call this API; token sent via Authorization header only (never argv/logs).resolveProductionBranch() catch block (~327-332): non-2xx throws HTTP ${status} ${statusText} (no token leak); JSON parse errors also caught.ENV_EXPANSION_REGEX constant (/^\$\{.*\}$/) and applied it to the API-inferred branch too (previously only applied to config-sourced projectName/productionBranch/workingDir at lines 175-186), treating a match as "unresolved."reportError) from transient 5xx/network errors (soft-fail: warn + continue, omitting --branch). New test added: "hard-fails when the Pages project is not found (404)" expects rejection matching /Pages project "missing-project" not found/.reportError call originally lived inside resolveProductionBranch()'s own try, so its own catch swallowed the thrown error into a warning. Fix: restructure so try wraps only fetch+JSON-parse (returns a result), and the 404-check/reportError call sits outside that try. Not yet verified passing.ses_07bd1397cffe6sAzPv1i7n5z2G, 2026-07-21 10:27) on this follow-up branch: verdict "Solid," no CRITICAL/MAJOR issues; confirmed dry-run makes zero network calls (dry-run check at cloudflare.ts:378 precedes resolveProductionBranch() lines 393-396 and spawnProcess line 418); confirmed Node baseline volta.node=24.18.0 gives global fetch, no new dependency; found MINOR-1 (env-expansion guard gap) and MINOR-3 (no 404 vs transient distinction) — both accepted as fixes; MINOR-2 (no token leak in catch) and MINOR-4 (test coverage strong) needed no changes. Noted non-bug: dry-run preview omits --branch when inferred (cosmetic, non-blocking).cloudflare.test.ts: 25/25 passed (1.62s) — pre-MINOR-fixes baseline.tsc --noEmit: clean (exit 0).228:12 '_err' is defined but never used @typescript-eslint/no-unused-vars)..craft-issue-842-plan.md, later formalized as .opencode/plans/1784109577263-shiny-knight.md.feat/cloudflare-target (created off freshly-fetched master); reviewed base.ts, index.ts, system.ts, env.ts, crates.ts (shell-out pattern), pubDev.test.ts, project_config.ts, gcs.ts; preserved untracked plan files.GitHubGlobalConfigSchema, TargetConfigSchema, etc.), searched RemoteArtifact usages across artifact providers, reviewed errors.ts (ConfigurationError/reportError, withTempDir), reviewed files.ts; implemented shared extract-and-flatten util in system.ts.ghPages.ts to use shared util, removed unused path import.cloudflare.ts target, registered in TARGET_MAP, wrote cloudflare.test.ts.reportError throws in tests; ran build+tests for cloudflare target; added wrangler to Dockerfile.wrangler pages deploy; verified pubDev.ts's dry-run guard pattern as precedent; added explicit dry-run guard in cloudflare.ts; noted switch to worktree-mode isolation for dry-run.0f8720e, 2026-07-16T12:15:08Z); cleanup completed (branches deleted, HEAD detached due to worktree conflict); next steps proposed (cut release, start PR2).--branch for production deploys; switched to branch feat/prefixed-tags (off updated master).getLatestTag prefix-aware, git.ts:45), located callers for 2.2, implemented 2.3 (ambiguity warning, config.ts:332), threaded prefix through prepare.ts (761, 869) and changelog.ts (58); confirmed calver.ts and version.ts already correct.git.test.ts for array-arg git.raw call; fixed findReleaseBranches; ran/passed test suites (87 tests, then 25, then full 1054 passed/1 skipped); updated docs (github.md, configuration.md); tsc/lint clean (7 warnings); fixed 5 changelog-versioning-policy.test.ts failures (missing mock); reviewed diff (10 files changed); todos moved to "adversarial review in_progress."isLatestRelease (github.ts:855-864) identified as root cause of M1. Applied doc/test fixes, re-ran tests (20 passed) and docs build (28 pages), then full suite (1055 passed/1 skipped). Todo list at 12:59: 9/10 items done, "Commit + push + open PR" in progress; git status showed 10 modified + 2 untracked files.--branch necessity); produced 4 recommendations for cloudflare.ts.CLOUDFLARE_ACCOUNT_ID optional, pass-through if set.deployType to worker (Cloudflare retiring Pages); assistant agreed, reviewed full pre-change cloudflare.ts (304 lines), proposed 4-part follow-up-PR plan on branch fix/cloudflare-target-review.cloudflare.test.ts (25/25 passed), tsc clean, lint (7 warnings/0 errors), full suite (1050 passed/1 skipped), docs build succeeded.ENV_EXPANSION_REGEX reuse) and MINOR-3 (404 hard-fail) fixes; added new 404 test; test run showed 1 failure (26/27 passed) — diagnosed root cause: reportError call for 404 nested inside resolveProductionBranch()'s own try/catch, causing the thrown error to be swallowed. Fix in progress (restructuring try-block scope) — not yet confirmed resolved as of last observation.