{"collectionById":{"d4a5b68c-8afd-4bbe-a7ac-e9a8422fedde":{"id":"d4a5b68c-8afd-4bbe-a7ac-e9a8422fedde","name":"Blog Articles","fieldSchemas":[{"id":"402ba26f-8f6d-4f5f-bf20-62e6549f4ad4","name":"Slug","type":"slug","role":"slug"},{"id":"1f58afa6-2748-4188-b4a4-f1e54e37eca9","name":"Hero Image","type":"image"},{"id":"3084d9ba-ab55-4e5a-931b-b9db3d09105f","name":"Article Content","type":"rich_text"},{"id":"b7712ee6-f9fd-4781-8c5c-e7e10ce8f81e","name":"Publish Date","type":"date"},{"id":"f2ba59b9-49cc-4ec6-9416-bda99d4c8383","name":"Title","type":"plain_text","role":"primary"}],"itemById":{"9b94a719-87cd-42db-9acc-1a23957db2bc":{"id":"9b94a719-87cd-42db-9acc-1a23957db2bc","index":"!NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNO","collectionId":"d4a5b68c-8afd-4bbe-a7ac-e9a8422fedde","fields":[{"id":"cee9aca4-85ad-4ce8-a1ef-6e74589553d4","value":"3-common-problems-that-can-complicate-a-net-10-upgrade","itemId":"9b94a719-87cd-42db-9acc-1a23957db2bc","fieldSchemaId":"402ba26f-8f6d-4f5f-bf20-62e6549f4ad4"},{"id":"a526b445-89c4-4f6f-a2cd-68361f4b44db","value":"3 common problems that can complicate a .NET 10 upgrade","itemId":"9b94a719-87cd-42db-9acc-1a23957db2bc","fieldSchemaId":"f2ba59b9-49cc-4ec6-9416-bda99d4c8383"},{"id":"f30c39ff-c52b-467a-8354-be52be111660","value":"{\"image\":\"9dd849e366a069a797d0e762fe838ff24cab6670\",\"imageThumbnail\":\"0c3681fa9fd181cf08b925d2fd71550b74bd2c4b\",\"originalImageHeight\":816,\"originalImageWidth\":1456,\"altText\":\"\",\"fileName\":\"roro665_illustration_for_article_about_3_common_problems_that_550bcbef-f6c1-4f36-bb16-9b4f8dc18a3a_0.png\"}","itemId":"9b94a719-87cd-42db-9acc-1a23957db2bc","fieldSchemaId":"1f58afa6-2748-4188-b4a4-f1e54e37eca9"}]},"a1235d08-4c7a-4e56-b7d4-fb66ad387006":{"id":"a1235d08-4c7a-4e56-b7d4-fb66ad387006","index":"!NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNO","collectionId":"d4a5b68c-8afd-4bbe-a7ac-e9a8422fedde","fields":[{"id":"3be994c6-6c82-4780-a004-f671e9405cc4","value":"What still keeps business applications on Windows Server 2016?","itemId":"a1235d08-4c7a-4e56-b7d4-fb66ad387006","fieldSchemaId":"f2ba59b9-49cc-4ec6-9416-bda99d4c8383"},{"id":"281809af-88db-4352-8910-1fd11b896b45","value":"what-still-keeps-business-applications-on-windows-server-2016","itemId":"a1235d08-4c7a-4e56-b7d4-fb66ad387006","fieldSchemaId":"402ba26f-8f6d-4f5f-bf20-62e6549f4ad4"},{"id":"d59bfab8-83d6-4583-9d25-89d1250dba1f","value":"{\"image\":\"4122d1752ceeb49b04c1ef7f49d5990c4b01e2be\",\"imageThumbnail\":\"ea7ffa1484cb4dda9aa10a98a8efb7ebcb041110\",\"originalImageHeight\":816,\"originalImageWidth\":1456,\"altText\":\"illustration_for_article\",\"fileName\":\"illustration_for_article_about_What_still_keeps_busin_882c10e6-9139-4cd6-b90c-953ff39a4d50_1.png\"}","itemId":"a1235d08-4c7a-4e56-b7d4-fb66ad387006","fieldSchemaId":"1f58afa6-2748-4188-b4a4-f1e54e37eca9"}]},"8ffa5d34-6520-463c-a1e7-acf11e1aee7f":{"id":"8ffa5d34-6520-463c-a1e7-acf11e1aee7f","index":"!NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNf","collectionId":"d4a5b68c-8afd-4bbe-a7ac-e9a8422fedde","fields":[{"id":"f1fbbbad-8ef2-4283-aba0-eae9c213c0ba","value":"how-to-coordinate-ai-agents-in-a-multi-repository-net-migration-case-study","itemId":"8ffa5d34-6520-463c-a1e7-acf11e1aee7f","fieldSchemaId":"402ba26f-8f6d-4f5f-bf20-62e6549f4ad4"},{"id":"a9127db6-5519-439d-84ef-0df147bbf514","value":"How to coordinate AI agents in a multi-repository .NET migration (case study)","itemId":"8ffa5d34-6520-463c-a1e7-acf11e1aee7f","fieldSchemaId":"f2ba59b9-49cc-4ec6-9416-bda99d4c8383"},{"id":"2793ea65-f8d5-495d-b643-cf0196c2d9d9","value":"2026-09-30","itemId":"8ffa5d34-6520-463c-a1e7-acf11e1aee7f","fieldSchemaId":"b7712ee6-f9fd-4781-8c5c-e7e10ce8f81e"},{"id":"336ba1f5-53d1-4a6d-a82d-b75f32c0a832","value":"{\"image\":\"e35ed77de333ed37c53ac6dc4c54df40d76009fa\",\"imageThumbnail\":\"0d135f8e7e09054ac3905b38f0226ce4ef1b7f91\",\"originalImageHeight\":816,\"originalImageWidth\":1456,\"altText\":\"illustration_for_article\",\"fileName\":\"illustration_for_article_about_What_still_keeps_busin_7452006b-0ce1-4516-a3a1-5a8dd5f6c670_2.png\"}","itemId":"8ffa5d34-6520-463c-a1e7-acf11e1aee7f","fieldSchemaId":"1f58afa6-2748-4188-b4a4-f1e54e37eca9"},{"id":"6b5596fc-3b39-4024-843f-9e97e6d52c84","value":"{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"When several applications share an authentication library or a build template, changing that component affects more than the repository assigned to an agent. Parallel fixes need a common version baseline, an agreed order and someone responsible for checking the combined result. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For engineering leads and senior .NET developers, this article explains how to organise coding agents around those dependencies. It covers which tasks to delegate, what each worker should return, how to preserve existing development work and what evidence is needed before accepting a change. The objective is to turn separate investigations and patches into a migration the team can review, release and maintain. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The working setup around the agents is called an agent harness. It combines instructions, context, tools, permissions, coordination and validation. The examples below come from an anonymised .NET 10 migration involving 66 existing projects across ten repositories, followed by 17 application images. OpenCode is used as a reference for configuring a similar setup, rather than as a claim that the recorded migration was performed in that tool. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Start with the work that must reach production \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h2\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The migration included applications, shared libraries and test projects across APIs, identity services, portals, backend-for-frontend applications, background processing, analytics, audit and reporting. Databases, external integrations and native document-processing components also affected what could be changed and how it should be checked. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The initial 66-project inventory did not describe every delivery dependency. Focused test projects were added during the work, while shared pipeline templates and a separate deployment-manifest repository extended the later container phase beyond application source. Projects, repositories and deployable images were counted separately because each represented a different part of the migration. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Even build coverage required investigation. An integration-test project sat outside the main solution, some libraries had no solution file, and cross-repository references depended on a consistent sibling-directory layout. A lead assigning agents only to the obvious solutions would have left part of the estate unexamined. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Before changing target frameworks, the workflow captured builds and selected safe test results in separate working copies. Existing failures and infrastructure-dependent checks were recorded so later results could distinguish migration regressions from problems already present. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Checkpoints compared exact failing test names, rather than totals. Otherwise, one test could stop failing while another began failing, leaving an unchanged count that concealed a new problem. Package checks also inspected selected versions and transitive paths, since a clean console could reflect an existing warning suppression rather than a repaired dependency. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For a team adopting this approach, the first deliverable should therefore identify the applications, dependencies and execution paths in scope, together with the baseline against which changes will be assessed. That includes runtime installations, containers, build environments and deployment routes, as covered in our guide to \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"what teams must upgrade before .NET 8 and .NET 9 support ends on 10 November 2026\",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer noopener\",\"target\":\"_blank\",\"title\":null,\"url\":\"https://www.blocshop.io/blog/support-for-net-8-and-net-9-ends-on-10-november-2026-what-must-production-teams-upgrade\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Choose assignments that can progress independently \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h2\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A human engineer owned the migration’s objective, scope, trade-offs and acceptance decisions. A lead agent coordinated the work using a higher-cost model, while faster, less-expensive workers handled bounded investigations. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This division gave the coordinator responsibility for the dependency graph, approved changes, migration checkpoint, known failures and unresolved risks. A worker investigating one package, test fixture or group of Dockerfiles could concentrate on that question without needing authority over the whole platform. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"In an OpenCode implementation, a primary agent could coordinate custom sub-agents, with explicit model and permission settings for each role. \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"OpenCode’s documentation\",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer noopener\",\"target\":\"_blank\",\"title\":null,\"url\":\"https://opencode.ai/docs/agents/\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" confirms that a sub-agent without its own model setting inherits the invoking primary agent’s model, so cheaper execution requires a deliberate configuration choice. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Every assignment needed enough detail to produce a reviewable result: \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Question. Identify the uncertainty or change the worker should address. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"listitem\",\"version\":1,\"value\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Ownership. Specify the repositories, files and worktrees it may use. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"listitem\",\"version\":1,\"value\":2},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Context. Supply relevant versions, upstream changes, earlier findings and constraints. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"listitem\",\"version\":1,\"value\":3},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Checks. Define what it must build, test, inspect or compare. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"listitem\",\"version\":1,\"value\":4},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Deliverable. Require an inspectable patch, reproducible findings or both. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"listitem\",\"version\":1,\"value\":5},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Stop condition. State which discovery requires an engineering decision. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"listitem\",\"version\":1,\"value\":6}],\"direction\":null,\"format\":\"start\",\"indent\":0,\"type\":\"list\",\"version\":1,\"listType\":\"number\",\"start\":1,\"tag\":\"ol\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A worker could trial an agreed dependency version and adapt demonstrated compatibility differences. A required change to application behaviour would return for a decision rather than becoming an incidental part of the patch. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The source migration passed through a whole-estate .NET 9 checkpoint before moving to .NET 10. That was a diagnostic sequence, not an intermediate production release or a requirement for every .NET 8 upgrade. Shared libraries moved before downstream applications, while cross-repository references and a shared SDK pin constrained concurrency. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"During the container phase, three read-only assessments ran in parallel, covering image structure and dependencies, native PDF packaging, and pipeline and deployment mapping. The lead integrated their findings and owned the central Docker and pipeline changes. In an OpenCode implementation, concurrent execution would need to use the task mechanisms supported by the installed version, since defining several agent roles does not itself make their work parallel. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The useful form of parallelism was therefore independent investigation followed by coordinated integration. Assigning several workers to tightly coupled changes would still leave the lead with conflicting patches or results based on different versions. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Preserve the context needed to review a worker’s result \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h2\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A worker’s findings were useful only if the coordinator could establish what had been inspected, changed and tested. Plans, progress records, issue registers and validation logs preserved commands, source revisions, SDK and package versions, results and unresolved hypotheses. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Rejected approaches were recorded too. That helped prevent an investigation from returning to the same unsuccessful idea after a handoff or a long conversation. Summaries helped agents resume work, but important conclusions remained connected to source files, dependency graphs and execution results. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Two reusable skills, migrate-dotnet8-to-dotnet9 and migrate-dotnet9-to-dotnet10, guided compatibility analysis. In OpenCode, this guidance could be packaged in SKILL.md files available to the relevant agents, while repository-specific constraints would continue to govern the changes. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Context7 supplied documentation through Model Context Protocol for specific questions about Entity Framework Core provider behaviour, Testcontainers fixture lifecycles and PDF-library licensing. In the reference setup, Context7 would be configured as an MCP documentation source alongside the tools used to inspect and test the actual system. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"These references supported investigation alongside Git, the .NET CLI, Docker, Azure DevOps and Kubernetes tooling. Documentation explained expected behaviour, while the resolved dependency graph and exercised code path established whether that explanation applied to the application. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A handoff therefore included paths, findings, proposed changes, validation results and remaining uncertainties. This gave the coordinator enough information to check whether a locally valid answer also worked for downstream consumers. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Keep file ownership separate from production authority \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h2\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Source-migration workers used separate Git worktrees. Before integration into the original checkouts, the lead checked base revisions, changed paths and patch applicability. Unrelated staged, unstaged and untracked development work remained outside the agents’ assignments. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Worktrees separated working copies, but did not provide a security sandbox. \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Git’s documentation\",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer noopener\",\"target\":\"_blank\",\"title\":null,\"url\":\"https://git-scm.com/docs/git-worktree\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" explains that repository configuration and several references remain shared. File ownership, shell permissions and access to production systems needed separate controls. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The workflow distinguished inspection, modification and external effects. Reading deployment definitions did not authorise a rollout, and building an image did not authorise starting an application against persistent data. Commits, pushes and deployments required explicit approval, while live integrations were kept outside incidental test execution. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The terminal’s default Kubernetes context pointed at production, so development inspections explicitly named the intended context. This addressed accidental targeting, while a reference implementation would also need appropriate restrictions on credentials and production access. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"In OpenCode, \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"permission rules\",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer noopener\",\"target\":\"_blank\",\"title\":null,\"url\":\"https://opencode.ai/docs/permissions/\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" should cover shell commands and connected tools as well as file editing. Task permissions can also restrict which sub-agents the coordinator may invoke. Calling a worker read-only does not establish that restriction if its shell can still modify files or contact external systems. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Decide which behaviour a failing test must preserve \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h2\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The decimal investigation showed why the engineer responsible for the application needed to understand the evidence rather than approve patches mechanically. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A database test expected 134567.123456788 but read back 134567.12345678799. The assertion required exact preservation, which can matter for amounts, rates, quantities, reconciliation and subsequent calculations. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The test used SQLite, while production relied on SQL Server’s fixed-precision decimal semantics. SQLite REAL values use binary floating point, which cannot represent most decimal fractions exactly, as explained in \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"SQLite’s documentation\",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer noopener\",\"target\":\"_blank\",\"title\":null,\"url\":\"https://sqlite.org/floatingpoint.html\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". SQL Server DECIMAL uses declared precision and scale, with the .NET decimal type introducing another conversion boundary. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Comparing native SQLite versions isolated a change in conversion of the stored floating-point value to text. The managed artifacts and stored REAL bits were unchanged, but the decimal materialised by the application differed. This established a regression in the SQLite-backed test result without establishing a change in production SQL Server arithmetic. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A trial storing the value as text restored round-trip equality but caused numeric comparison and ordering to fail, so it was reverted. Rounding application values, weakening equality or restoring a vulnerable dependency were also excluded because they would change the guarantee being checked or reintroduce another problem. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The engineer authorised moving the affected precision tests to SQL Server containers. The scope remained limited to tests needing production decimal semantics, rather than replacing every SQLite fixture or changing production arithmetic. The focused 45-case suite passed repeatedly. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Agents supplied reproduction, dependency analysis and trial implementations, while an engineer judged whether SQLite was an appropriate substitute for the behaviour being tested. A worker can correctly solve an assigned problem even after that problem has stopped serving the migration. The responsible engineer must recognise an unproductive investigation, challenge its assumptions and decide whether to continue, stop or change the question. This requires understanding the application and its intended behaviour, rather than merely approving the latest diff and test count. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Human direction also clarified later priorities. Once applications worked locally, the next runtime phase meant Docker images and CI pipelines, not another general investigation of local execution. Build optimisation prioritised reliable, faster builds over the smallest possible base image, using suitable full SDK build stages without shipping the SDK in application images. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Follow each change through to its release consequences \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h2\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The same dependency, behavioural and delivery concerns are explored in our article on \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"three common problems that can complicate a .NET 10 upgrade\",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer noopener\",\"target\":\"_blank\",\"title\":null,\"url\":\"https://www.blocshop.io/blog/3-common-problems-that-can-complicate-a-net-10-upgrade\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". In this case, four findings required the workflow to use different checks and acceptance decisions. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"OAuth compatibility required a runtime test \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h3\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A clean public-package restore exposed a binary compatibility problem in a third-party OAuth client. It had been compiled against an older IdentityModel method signature, while the resolved runtime dependency exposed a newer overload. Building the consuming application did not reveal the mismatch. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The investigation compared actual package versions and reproduced the affected path. With human approval, a compatible public client release was selected and checked through 30 focused offline tests, plus login-URI and token-format checks. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"That evidence supported a specific dependency correction rather than an update of every package to its newest version. Offline results also remained distinct from authentication against the live provider. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Identity changes required a database release decision \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h3\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The recorded migration moved Duende IdentityServer and related packages from 7.0.8 to 8.0.2. The database work followed the authentication-library upgrade and an existing schema issue, not a general requirement imposed by .NET 10. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A transactional correction aligned the pushed-authorisation-request table’s generated identifiers, required fields, timestamp and text storage, and indexes with the expected store shape. The table held short-lived state submitted before the user completed authorisation. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Separately, \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Duende’s v8 guidance\",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer noopener\",\"target\":\"_blank\",\"title\":null,\"url\":\"https://docs.duendesoftware.com/identityserver/upgrades/v7_4-to-v8_0/\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" specified new configuration and operational tables for its Entity Framework stores. Correcting the request table did not complete that broader database migration. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Release planning had to establish which authentication stores required changes, which user-account data was outside the change, whether the previous application could use the updated schema and whether state written by the new version could make an image rollback insufficient. Rollout order, possible maintenance windows, migration versions, recovery options and the exact deployed image also needed consideration. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A worker could compare vendor requirements with checked-in schema and prepare a reviewable script. Execution against a live database remained separately authorised because replacing an application image does not reverse persistent-state changes. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"8.0.2 is the historical version recorded in this case, not a recommended target today. Duende’s \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"advisory published on 28 September 2026\",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer noopener\",\"target\":\"_blank\",\"title\":null,\"url\":\"https://github.com/DuendeSoftware/products/security/advisories/GHSA-mxv6-xwqj-ww2p\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" identifies a pushed-authorisation-request validation vulnerability affecting 8.0.0 through 8.0.8, patched in 8.0.9. New migrations must assess current patches and advisories independently of these historical results. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Native packaging required inspection of the final image \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h3\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Reporting applications used native PDF components that expected locale resources in a particular directory structure. In this case, publishing for a runtime identifier flattened that structure, leaving a successful managed publish with an incomplete native distribution. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The correction preserved the full resource layout. Verification compared 70 native files, including 55 locale files, with the resolved package contents and checked permissions and native-library linkage. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This established packaging completeness without establishing that every document-rendering scenario had been tested. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Pipeline success required the intended artifact to be selected \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h3\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A feature-branch pipeline failed before compilation because it assumed that the application’s branch name existed in a separate deployment-manifest repository. Publishing a matching branch from the existing development manifests resolved that repository-reference failure without changing application code. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A second issue concerned artifact selection. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The manifest’s image reference did not automatically follow the application feature branch, so the pipeline could build a feature-tagged image while the deployment overlay selected a development tag. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The source revision, pipeline resource revision, published image and deployed image therefore had to be tracked separately. Release acceptance needed evidence that the environment would run the intended artifact, rather than only that the pipeline had built it. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Define what the recorded results support \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h2\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"All 17 active application images built locally for Linux amd64, with published applications targeting .NET 10 and final images containing the .NET and ASP.NET Core 10.0.12 runtimes. The build host was ARM64 and amd64 execution used emulation, so this was not presented as validation on native x86-64 hardware. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"An isolated API build experiment recorded 34.51 seconds for uncached build steps, 1.26 seconds for a warm rebuild, 20.78 seconds after a source-only change and 20.62 seconds after a revision-only change. Restore remained cached in the changed builds. These measurements checked cache boundaries, rather than comparing .NET versions, measuring fully cold image pulls or proving Azure hosted-agent cache performance. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"After deployment, the engineer reported successful development-environment testing of identity, reporting, API and backend-for-frontend applications. Those results added application-level evidence, but did not establish production readiness for every workload or independently document every deployed image digest and database version. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The case was not a controlled productivity comparison and contained no per-task model-cost benchmark. Preparing worktrees, maintaining records, coordinating workers and reviewing their output all required effort. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For teams considering a similar process, the value lies in making assignments, evidence and integration decisions traceable across a larger estate. Its suitability depends on how much work can be separated and repeated. Tightly coupled changes may need sequencing and close review even when several agents are available. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Where Blocshop can take ownership \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"tag\":\"h2\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The senior work in an agent-assisted migration includes deciding migration order, resolving shared dependencies, choosing representative tests and reviewing changes to application behaviour and persistent state. These responsibilities often compete with the same engineers’ product roadmap and production-support commitments. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Blocshop can add one to three senior .NET and Azure developers directly to the existing team and take responsibility for an agreed workstream. That could include a dependency path, a group of services, test infrastructure, container and pipeline changes, or release preparation. Where repeated tasks justify an agent-assisted workflow, the team can define its assignments, checks and handoffs around the same delivery requirements. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The client’s technical leads retain architectural control, acceptance decisions and production approval. \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Book a consultation with Blocshop\",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer noopener\",\"target\":\"_blank\",\"title\":null,\"url\":\"https://www.blocshop.io/contact-us\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" to identify a migration workstream, agree the input it needs from your team and define the evidence required for completion. \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" \",\"type\":\"text\",\"version\":1}],\"direction\":null,\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}","itemId":"8ffa5d34-6520-463c-a1e7-acf11e1aee7f","fieldSchemaId":"3084d9ba-ab55-4e5a-931b-b9db3d09105f"}]}}}},"slugByItemId":{"224fb9ca-8d37-43ac-a9d2-ad44a22b4e83":"ai-applications-in-banking-real-world-examples","7c3de3bf-2771-4653-bc57-c0c355bd8547":"generative-ai-used-for-data-conversions-and-reformatting","54d55d03-8f64-4a4e-94a6-397cf873c405":"the-quiet-cost-of-ai-shadow-compute-budgets-and-the-new-devops-blind-spot","2b1fba2a-f1fa-434d-a9b7-619b86112157":"generative-ai-powered-etl-a-fresh-approach-to-data-integration-and-analytics","005ad826-7eb1-4350-ad9f-6eaa4c08b356":"iso-20022-explained-a-comprehensive-guide-for-financial-institution-managers","f96af80b-e4a6-4181-9c21-73b3a921193a":"15-useful-web-app-development-tools-for-2022","9a0f833f-0c6f-4cb4-a00b-29d304043e98":"software-development-budget-estimation","08bb6769-ad5a-4824-ab63-9698c3761cf2":"product-backlog-prioritization-techniques-tips","d61588ea-98f0-4080-93bb-02aba4ef0f3f":"top-9-bespoke-software-solutions-examples","2357e217-a465-4d2d-ad0e-6133dc117bba":"15-fantastic-saas-ideas-for-your-startup","acf4dd14-0957-46df-9726-3538df437b25":"the-waterfall-model-advantages-and-disadvantages","06ae7abb-88ac-4c69-b891-75fc2ac38793":"8-scrum-metrics-to-measure-the-effectiveness-of-your-team","69b6dac2-d540-496f-9839-bddba1a6804b":"software-testing-life-cycle-stlc-definition-and-phases","e0aad731-e7e7-447e-afcd-b06c4546ff3f":"the-7-stages-of-the-software-development-process","1ed1289b-bf8b-425c-a8cf-7ba4f56310c0":"agile-software-development-team-roles-and-responsibilities","8c1bb5a1-bda0-4455-84d5-54b9b6ce7510":"ai-laws-in-2026-the-current-euus-landscape-and-how-it-shapes-software-development","8899263d-99d9-43c5-9f5c-ce875acb011c":"ci-cd-for-ai-applications-production-delivery-governance-and-testing","f9992957-ab35-401f-819b-b8119a904aa6":"from-feature-to-liability-when-ai-should-not-be-embedded-in-the-core-flow","d8a0e77e-234a-4ad4-a0e7-0e6cae899e91":"why-most-ai-features-never-make-it-past-version-one","d4492648-d4e6-492e-9d95-fa4c8dde8a3f":"the-first-90-days-of-moving-ai-into-the-core-development-workflow","93369250-fdb9-4653-8003-3e13444e40ff":"ai-assisted-pull-requests-what-code-review-must-catch-when-ai-helped-write-the-change","07216048-013c-440b-affc-6bc1a7b56166":"the-cost-of-waiting-on-ai-is-already-in-your-backlog","65ec3395-7d7f-4402-9612-ca9666d981a5":"how-to-hire-a-senior-developer-when-the-project-cannot-wait","a6e4a57b-e918-42a0-9157-0dcf6d7c62af":"measuring-ai-assisted-development-which-metrics-show-real-delivery-gains","ba558ca2-3788-4c31-86e6-a21799b8504a":"what-the-eus-2027-instant-payment-deadlines-mean-for-payment-providers-outside-the-euro-area","9b94a719-87cd-42db-9acc-1a23957db2bc":"3-common-problems-that-can-complicate-a-net-10-upgrade","43667600-e9ee-40d8-b005-a3f72ed313cb":"6-ai-integration-use-cases-enterprises-can-adopt-for-automation-and-decision-support","80345e24-6050-439b-9c3b-9e1690a6a5de":"langchain-and-langgraph-and-why-these-frameworks-are-becoming-common-in-ai-projects","7707e43f-06c7-44c4-8f6a-6598f873ff4f":"chatgpt-3-5-an-overview-and-limitations","9082b7d6-0453-4adf-95c0-91cf1b596740":"top-15-micro-saas-ideas-for-your-startup-in-2022","f09637d8-423d-43e2-b99e-390d3fcf9d9c":"estimating-user-story-points-in-agile","e3946acd-c693-4e8d-a587-4365d3f689d8":"who-should-decide-ai-behaviour-changes-in-an-sme","3c24380a-12d8-47b7-84e4-ef9c5497b89c":"build-buy-or-embed-a-cto-decision-matrix-for-ai-delivery-capability","38252502-9695-4968-8852-563d098f23c2":"legacy-net-systems-and-ai-how-to-add-capability-without-rewriting-the-core-application","52d652cb-5652-4eb8-b636-868d394e6c37":"senior-developer-cost-in-2026-and-the-value-of-temporary-senior-capacity","a7893a9c-3fb9-465c-8083-469a7b1e53a2":"ai-development-at-300-month-in-tokens-per-senior-developer","ddde2039-0c11-43c6-befd-b31168be11c8":"why-ai-coding-gets-expensive-when-context-is-badly-prepared","10ed53fe-213d-4777-898b-fda70d8fe4ac":"agent-access-in-b2b-software-identity-permissions-approvals-and-auditability","fab009c4-5519-411b-951d-357f1a09e50a":"eu-ai-act-transparency-rules-now-apply-what-software-providers-and-deployers-must-change","6b86e282-05e2-4de1-a0da-50ae883730f7":"how-ai-powered-software-development-is-changing-the-role-of-the-cto","e893ce81-635b-48b0-bd01-c3f39aa1c453":"eu-and-uk-ai-regulation-compared-implications-for-software-data-and-ai-projects","d38bc66e-898e-469d-a28e-7e25efcd5e82":"ce-marking-software-under-the-eu-ai-act-who-needs-it-and-how-to-prepare-a-conformity-assessment","2a569b4b-6d39-49d7-8eda-24bbb5d0344c":"when-ai-and-gdpr-meet-navigating-the-tension-between-ai-and-data-protection","7accedf4-79c6-45c6-8cfc-65dcfa992c8b":"how-custom-ai-integrations-and-automation-improve-enterprise-workflows-and-decision-making","1f98830d-3572-40eb-b9a5-11776e6846f1":"17-ideas-for-web-apps-in-2023","b5480bfc-3980-430b-b193-71101c547238":"converting-story-points-to-hours-why-doesnt-it-work","35168ee0-162e-4ba9-8f33-51638b1deff4":"epic-story-and-tasks-in-agile","5bc932b6-8ad3-4385-85ed-0f77dccb4efe":"sprint-backlog-vs-product-backlog-most-important-differences","1bf6256f-668c-47dd-aadf-89f8b53d67a7":"sdlc-vs-agile-which-one-is-the-best","a2989e5f-e5c6-4253-af26-bf4db2e67e9c":"agile-meetings-types-goals-and-benefits","89f3ad6f-2ae9-4d8a-be50-f6bffaefc293":"daily-scrum-meetings-purpose-participants-and-guidance","7e42867d-edfc-4f00-8996-d71ad1867b84":"software-development-cost-guide-with-man-day-rate-estimates","9c52d063-769c-465f-9c61-164602619dbe":"what-is-bespoke-software-what-are-the-pros-and-cons","cb74ad7b-efe2-4458-b7a4-73f6d48d4780":"custom-software-development-trends-in-2026-how-ai-shifts-the-real-bottlenecks","0f88cfc6-008b-4645-a648-4adb2ca3f3b4":"ai-in-c-projects-which-problems-are-worth-solving-first-and-which-are-not","668a64e2-486e-4824-8626-adc7f412df53":"vibe-coding-what-do-senior-developers-verify-before-ai-generated-code-reaches-production","5f3c0247-8093-45c5-861a-a2bfa8017ec9":"3-real-life-vibe-coding-failures-and-what-they-reveal-in-production","3c95e66d-932b-4abb-b049-31e558f12589":"why-ai-slows-down-digital-banking-delivery-before-it-speeds-it-up","f28a6024-0dcd-4d0f-a308-1e078763e362":"mvp-handover-moving-from-agency-built-product-to-internal-team","3cfd1a44-094f-4680-9af8-d9d4bd0a2302":"ai-agents-in-b2b-software-your-next-user-may-not-be-a-person","10320fad-190b-4aa4-bc78-0a870a5e3d38":"cyber-resilience-act-reporting-can-your-software-team-meet-the-24-hour-deadline","51eca83c-e62c-4924-a9dc-ddd8b6a8eee7":"support-for-net-8-and-net-9-ends-on-10-november-2026-what-must-production-teams-upgrade","8ffa5d34-6520-463c-a1e7-acf11e1aee7f":"how-to-coordinate-ai-agents-in-a-multi-repository-net-migration-case-study","c6c83886-4e6e-4726-8b98-2994b5fac462":"4-types-of-system-integration-methods","7c10a08b-d604-4d4d-a009-2400c53b6b59":"the-ultimate-cto-checklist-for-planning-a-custom-software-or-ai-project-in-2026","9454dbcd-bc62-415c-bfed-d96a2bc5b6de":"digital-identity-and-payment-services-in-the-eu-in-2024-key-updates","97214077-bcd4-40ec-828a-7d09f468d2e2":"psd2-vs-psd3-the-evolution-of-payment-services-regulation","b6396e37-eb43-4db2-bca5-a03e145e6106":"a-deep-dive-into-gpt-4-vs-gpt-3-5-differences-and-ability-to-revolutionize-software-development","2a11e22a-6e89-486a-b8ff-55b31ec7c4d1":"10-ai-tools-for-developers-you-should-know-about-in-2023","0209d4a6-fddf-4ffb-a2e9-9acb2eff0266":"software-engineer-hourly-rates-in-2022-based-on-experience-and-location","0c4a3683-e9a6-438e-b603-d37be9207c56":"the-best-programming-languages-for-app-development-in-2022","307ea89a-ac2b-44a5-93b1-bae7f4971035":"16-software-development-project-ideas","825368fb-fea4-4fd5-8174-c6974a6395f5":"the-scrum-sprint-cycle-explained","f7c13630-7f06-4094-9c61-eff39839d00c":"scrum-vs-extreme-programming-xp-whats-the-difference","f70b9e85-0929-488a-ba8e-82dfb0d47772":"use-cases-vs-user-stories-relationships-and-differences","71d08135-3493-42e5-852d-4c1075789b6c":"tcp-networking-in-cordova","31fa69f4-cf69-4ebd-8250-34491671b0c8":"ai-in-a-net-application-architecture-and-where-it-belongs","5d6baaa0-37c3-4fa7-be18-6f601c838476":"threat-modeling-for-llm-apps-10-attack-paths-teams-should-address-first","3974df38-8b02-4304-a58a-838d4be2cbbb":"chatbot-vs-rag-assistant-what-changes-when-answers-must-be-grounded-in-your-systems-of-record","1fae3ba0-e5f2-472e-9ec3-a327bf8c6091":"regulatory-deadlines-software-teams-should-plan-for-in-2026-and-2027","a1235d08-4c7a-4e56-b7d4-fb66ad387006":"what-still-keeps-business-applications-on-windows-server-2016"}}