{"id":14073,"date":"2026-07-16T19:07:59","date_gmt":"2026-07-16T19:07:59","guid":{"rendered":"https:\/\/prizmlaw.com\/site\/?p=14073"},"modified":"2026-08-15T16:59:14","modified_gmt":"2026-08-15T16:59:14","slug":"elementor-14073","status":"publish","type":"post","link":"https:\/\/prizmlaw.com\/site\/2026\/07\/16\/elementor-14073\/","title":{"rendered":"A Better Framework for Tracking Software Development Progress in AI-Assisted Development Environments."},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"14073\" class=\"elementor elementor-14073\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c5707a e-flex e-con-boxed e-con e-parent\" data-id=\"0c5707a\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4299174 elementor-widget elementor-widget-text-editor\" data-id=\"4299174\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h4>A Better Framework for Tracking Software Development Progress in AI-Assisted Development Environments.<\/h4>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3dd1c3b elementor-widget elementor-widget-text-editor\" data-id=\"3dd1c3b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><em>You started with an AI coding agent and a clear idea. Features shipped. Tests passed. Then complexity arrived and could answer the simplest question: &#8220;Does the app actually support feature X?&#8221; Here&#8217;s what I&#8217;m learning building a sophisticated document drafting application, and why it might matter for your next serious AI-assisted project.<\/em><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a90c0de elementor-widget elementor-widget-text-editor\" data-id=\"a90c0de\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>A lot of us have used AI coding agents on small projects. But as that project grows in complexity, tracking the functionality of that project (and the gaps in that functionality) becomes more and more difficult.<\/p><p>Your development rhythm may look like this: You describe what you want. The agent writes code. You run it. It works. You add the next feature. The agent remembers most of the requirements. The test suite grows. The README gets a bullet point. Maybe you ship something or maybe this experiment ends here.<\/p><p>For a todo app, a landing page, or a single-purpose tool, that loop is enough. The product <span style=\"text-decoration: underline;\"><em><strong>is<\/strong><\/em><\/span> the feature list. &#8220;Do it support dark mode?&#8221; is a one-line answer.<\/p><p>If the project gets large enough, we hit the wall where that stops working. Not because the agents failed, but because the <span style=\"text-decoration: underline;\"><em><strong>question itself<\/strong><\/em><\/span> got harder.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-484afd4 e-flex e-con-boxed e-con e-parent\" data-id=\"484afd4\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3f03509 elementor-widget elementor-widget-text-editor\" data-id=\"3f03509\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h2>A Little Context: What I&#8217;m Building<\/h2>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c90535b elementor-widget elementor-widget-text-editor\" data-id=\"c90535b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><strong>TrustDrafting<\/strong><\/span> (don&#8217;t worry it&#8217;s just a temp placeholder name) is an estate planning platform. Think of it as software that helps an attorney move through a client interview to a complete document package: revocable living trust, pour-over will, powers of attorney, health-care directives, and the rest. Currently, it&#8217;s meant to be an internal tool for my own practice to replace the stale, expensive 3rd-party tools I&#8217;m unhappy with.<\/p><p>It&#8217;s not a chatbot that drafts a will from a prompt. It&#8217;s meant to be a professional instrument: intake captures facts, a configurator records the my decisions regarding document architecture, a sophisticated clause library supplies real trust language (from lawyers, not invented by AI), and a rules engine catches inconsistencies before anything is finalized.<\/p><p>Early on, the question was straightforward: &#8220;Can I generate a valid, coherent trust?&#8221;<\/p><p>Eventually the question became: &#8220;Can the system generate a complex estate plan documents that handle express disinheritance across both trust and will, validates that the named people match, drafts the right prose for this trust&#8217;s voice, and surfaces the gap if it doesn&#8217;t have it the right clauses or configuration options without silently pretending it does?&#8221;<\/p><p>That&#8217;s a different kind of question. And my old tools for answering it weren&#8217;t built for this kind of analysis.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-399d0bc e-flex e-con-boxed e-con e-parent\" data-id=\"399d0bc\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-722276f elementor-widget elementor-widget-text-editor\" data-id=\"722276f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h2>The Feature\/Issue List Stopped Being Enough<\/h2>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e0675c0 elementor-widget elementor-widget-pix-img\" data-id=\"e0675c0\" data-element_type=\"widget\" data-widget_type=\"pix-img.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"pix-img-element d-inline-block \" ><div class=\"pix-img-el    text-left d-inline-block  w-100 rounded-lg\"  ><img fetchpriority=\"high\" decoding=\"async\" class=\"card-img2 pix-img-elem rounded-lg  h-1002\" style=\"height:auto;\" width=\"1314\" height=\"531\" srcset=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_github.jpg 1314w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_github-300x121.jpg 300w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_github-1024x414.jpg 1024w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_github-768x310.jpg 768w\" sizes=\"(max-width: 1314px) 100vw, 1314px\" src=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_github.jpg\" alt=\"GitHub Issues List\" \/><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b358c0 elementor-widget elementor-widget-text-editor\" data-id=\"7b358c0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>I was originally organizing my todo list of features and bug fixes through GitHub issues on the repository (above). However, this became increasingly inadequate as several things compounded at once&#8230;<\/p><p><em><strong>The product became a pipeline, not a screen.<\/strong><\/em> A single outcome, for example, &#8220;excluding an estranged child&#8221;, touches intake, advisor recommendations, configuration UI, two document generators, validation rules, and cross-document coordination. Checking off that feature as done\/green on one step doesn&#8217;t mean green on the whole journey.<\/p><p><em><strong>Correctness became cross-cutting.<\/strong><\/em> I could have a clause in the library, a field in the configurator, and a rule that fires \u00a0and still fail the attorney on a real client because the <strong>combination<\/strong> their plan needed wasn&#8217;t backed by any specific clause variant. The test suite was green. The demo looked fine. The client was blocked.<\/p><p><em><strong>AI made me faster at building the wrong thing confidently.<\/strong><\/em> Coding agents are extraordinarily good at implementing what you ask for. They are not good at telling you what you forgot to ask for. Speed without a map just gets you to the wrong place faster.<\/p><p><em><strong>I couldn&#8217;t distinguish &#8220;the platform don&#8217;t support this&#8221; from &#8220;I haven&#8217;t looked.&#8221;<\/strong><\/em>\u00a0Those sound similar in a backlog. They&#8217;re completely different in a product where a silent gap can mean an attorney ships an inconsistent plan.<\/p><p>The solution for this became its own development project called Atlas. It wasn&#8217;t in the original spec. I didn&#8217;t \u00a0sat down day one and design a &#8220;Coverage Atlas.&#8221; It emerged when I kept having the same internal conversations:<\/p><ul><li>&#8220;I thought it supported that&#8230;&#8221;<\/li><li>&#8220;Oh it does \u2014 in the will.&#8221;<\/li><li>&#8220;But the trust?&#8221;<\/li><li>&#8220;\u2026I&#8217;m not sure. Let me grep the codebase.&#8221;<\/li><\/ul><p>That is not a sustainable development loop.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bf897a5 e-flex e-con-boxed e-con e-parent\" data-id=\"bf897a5\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bb6142c elementor-widget elementor-widget-text-editor\" data-id=\"bb6142c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h2>Introducing &#8216;Atlas&#8217; Project<\/h2>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64245a3 elementor-widget elementor-widget-pix-gallery\" data-id=\"64245a3\" data-element_type=\"widget\" data-widget_type=\"pix-gallery.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"pix-lightbox\"><div class=\"pix_masonry  pix-3-columns\" style=\"width:100%\"><div class=\"grid-sizer\"><\/div><div class=\"gutter-sizer\"><\/div><div class=\" grid-item pix-mb-20 \"><a class=\"card pix-lightbox pix-lightbox-item pix-hover-item  tilt rounded-lg\" data-fancybox=\"gallery\" data-caption=\"The overall current Atlas screen.\" href=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_atlas_full.jpg\"><img decoding=\"async\" class=\"card-img  rounded-lg pix-gallery-item pix-gallery-sm\" src=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_atlas_full.jpg\" width=\"1855\" height=\"1055\" alt=\"The overall current Atlas screen.\" \/><div class=\"card-img-overlay d-flex align-items-end pix-p-10\"><div class=\"card-content-box pix-p-20 rounded-lg w-100 shadow  bg-white d-flex justify-content-between align-items-center\"><div class=\"card-title font-weight-bold h6  text-heading-default m-0 w-100\" style=\"\">Atlas Screenshot<\/div><div class=\"m-0 font-weight-bold h6  text-heading-default\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"\/><\/svg>\n<\/div><\/div><\/div><\/a><\/div><div class=\" grid-item pix-mb-20 \"><a class=\"card pix-lightbox pix-lightbox-item pix-hover-item  tilt rounded-lg\" data-fancybox=\"gallery\" data-caption=\"The remediation workflow.\" href=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_remed_agent.jpg\"><img decoding=\"async\" class=\"card-img  rounded-lg pix-gallery-item pix-gallery-sm\" src=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_remed_agent.jpg\" width=\"1115\" height=\"670\" alt=\"The remediation workflow.\" \/><div class=\"card-img-overlay d-flex align-items-end pix-p-10\"><div class=\"card-content-box pix-p-20 rounded-lg w-100 shadow  bg-white d-flex justify-content-between align-items-center\"><div class=\"card-title font-weight-bold h6  text-heading-default m-0 w-100\" style=\"\">Remediation Agent<\/div><div class=\"m-0 font-weight-bold h6  text-heading-default\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"\/><\/svg>\n<\/div><\/div><\/div><\/a><\/div><div class=\" grid-item pix-mb-20 \"><a class=\"card pix-lightbox pix-lightbox-item pix-hover-item  tilt rounded-lg\" data-fancybox=\"gallery\" data-caption=\"Tracking coverage progress across agent runs.\" href=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_remed_agent-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"card-img  rounded-lg pix-gallery-item pix-gallery-sm\" src=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_remed_agent-1.jpg\" width=\"1115\" height=\"670\" alt=\"Tracking coverage progress across agent runs.\" \/><div class=\"card-img-overlay d-flex align-items-end pix-p-10\"><div class=\"card-content-box pix-p-20 rounded-lg w-100 shadow  bg-white d-flex justify-content-between align-items-center\"><div class=\"card-title font-weight-bold h6  text-heading-default m-0 w-100\" style=\"\">Release History<\/div><div class=\"m-0 font-weight-bold h6  text-heading-default\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"\/><\/svg>\n<\/div><\/div><\/div><\/a><\/div><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-690f2f3 elementor-widget elementor-widget-text-editor\" data-id=\"690f2f3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>I started building <span style=\"text-decoration: underline;\"><strong>Atlas<\/strong><\/span> (short for the &#8220;Coverage Atlas&#8221;) because I wanted a kind of dashboard that could act as an easier way to view overall dev progress. Atlas is basically a requirements traceability matrix with live auditing functionality built in. It is meant\u00a0to answer one question honestly:<\/p><p><em><strong>&#8220;Does this product actually handle X, and what&#8217;s the evidence?&#8221;<\/strong><\/em><\/p><p>Where X is not a feature (&#8220;a toggle to trigger disinheritance of a person&#8221;) but an <em><strong>obligation<\/strong><\/em>: something a competent estate plan may need to do. This is similar to a user story. For example: <em>&#8220;an intentionally excluded heir is expressly excluded in the trust instrument, not only in the will.<\/em><\/p><p>Atlas is not the drafting engine. It doesn&#8217;t sit in the path when a document generates. It&#8217;s a <em><strong>living map<\/strong><\/em>\u00a0between three things:<\/p><p>1. <strong>Outcomes the product should serve<\/strong> (the obligations)<br \/>2. <strong>Machinery that serves them<\/strong>\u00a0(schemas, configurator fields, clause families, rules, tests)<br \/>3. <strong>Proof the machinery is real<\/strong> (named checks the system resolves against the live app code)<\/p><p>If the map says <strong>&#8220;verified&#8221;<\/strong> but the clause family it points to was deleted last week, Atlas treats that as a hard error. A typo in a reference is not &#8220;I don&#8217;t cover this.&#8221; It&#8217;s a broken promise. The distinction matters.<\/p><p>Atlas also never claims legal sufficiency. It describes product machinery and evidence. <em>&#8220;system cover disinheritance through the coordinate stage&#8221;<\/em> is a product statement. <em>&#8220;This plan is legally adequate&#8221;<\/em> is an attorney&#8217;s judgment. Keeping that line clear is part of the design.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-76628b0 e-flex e-con-boxed e-con e-parent\" data-id=\"76628b0\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5b471c5 elementor-widget elementor-widget-text-editor\" data-id=\"5b471c5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h2>The Insight that Changed How I Track Progress<\/h2>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8e886b5 elementor-widget elementor-widget-pix-img\" data-id=\"8e886b5\" data-element_type=\"widget\" data-widget_type=\"pix-img.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"pix-img-element d-inline-block \" ><div class=\"pix-img-el    text-left d-inline-block  w-100 rounded-lg\"  ><img loading=\"lazy\" decoding=\"async\" class=\"card-img2 pix-img-elem rounded-lg  h-1002\" style=\"height:auto;\" width=\"991\" height=\"522\" srcset=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_tax_v2.jpg 991w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_tax_v2-300x158.jpg 300w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_tax_v2-768x405.jpg 768w\" sizes=\"(max-width: 991px) 100vw, 991px\" src=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_tax_v2.jpg\" alt=\"Image link\" \/><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c4141d0 elementor-widget elementor-widget-text-editor\" data-id=\"c4141d0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>I eventually felt like I needed to check-in with more experienced estate planning attorneys regarding how they viewed the overall market and how different estate plan structures were used in different wealth, family, and asset contexts with clients. This eventually lead to building an initial taxonomy of structures organized across wealth and family axis. I could then ask Claude\/Codex to analyze the code to tell me which structures TrustDrafting currently supported (green) and which it did not (red).<\/p><p>Eventually I saw that this simple red\/green framework was incomplete. The biggest conceptual shift was this: <strong>coverage of a topic is staged, not a simple true\/false<\/strong>.<\/p><p>Now I assess every obligation across seven stages of a plan&#8217;s life:<\/p><p><strong>Detect \u2192 Analyze \u2192 Configure \u2192 Draft \u2192 Validate \u2192 Coordinate \u2192 Maintain<\/strong><\/p><p>An obligation isn&#8217;t &#8220;done&#8221; or &#8220;not done.&#8221; An example analysis of a given obligation might look like this:<\/p><p>&#8211; <strong>Detect: Verified<\/strong> (I can learn the client needs this)<br \/>&#8211; <strong>Configure: Verified<\/strong> (the attorney can configure the necessary document properties in the UI<br \/>&#8211; <strong>Draft: Verified<\/strong>\u00a0 (I have real clause prose for it and the engine can draft the document)<br \/>&#8211; <strong>Validate: Verified<\/strong> (internal statutory and firm rules engine catches mistakes)<br \/>&#8211; <strong>Coordinate: Verified<\/strong> (trust and will drafts stay aligned)<br \/>&#8211; <strong>Analyze: Partial Coverage<\/strong> (the advisor agent helps on the will side but not the trust\/will coordination story)<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-213ad4d elementor-widget elementor-widget-pix-img\" data-id=\"213ad4d\" data-element_type=\"widget\" data-widget_type=\"pix-img.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"pix-img-element d-inline-block \" ><div class=\"pix-img-el    text-left d-inline-block  w-100 rounded-lg\"  ><img loading=\"lazy\" decoding=\"async\" class=\"card-img2 pix-img-elem rounded-lg  h-1002\" style=\"height:auto;\" width=\"1297\" height=\"281\" srcset=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_stages.jpg 1297w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_stages-300x65.jpg 300w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_stages-1024x222.jpg 1024w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_stages-768x166.jpg 768w\" sizes=\"(max-width: 1297px) 100vw, 1297px\" src=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_stages.jpg\" alt=\"Image link\" \/><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a6eeb8c elementor-widget elementor-widget-text-editor\" data-id=\"a6eeb8c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>That last cell is the honest picture. A simple feature checklist would show &#8220;disinheritance: <img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/2705.svg\" alt=\"\u2705\" \/>&#8221; because the toggle exists and documents generate. The staged map shows exactly where the product is strong and where it still leaves the attorney alone.<\/p><p>I also classify gaps deliberately:<\/p><ul><li><span style=\"text-decoration: underline;\"><strong>Known Gap<\/strong><\/span>: I&#8217;ve looked. The platform don&#8217;t cover this. It&#8217;s written down.\u00a0<\/li><li><span style=\"text-decoration: underline;\"><strong>Blind Gap<\/strong><\/span>: I don&#8217;t know yet. I haven&#8217;t really take the time to assess this.\u00a0<\/li><li><span style=\"text-decoration: underline;\"><strong>Partial<\/strong><\/span>: Some machinery exists. The obligation isn&#8217;t fully served.<\/li><li><span style=\"text-decoration: underline;\"><strong>Verified<\/strong><\/span>: All stages of this obligation function and this has been verified through code analysis.<\/li><\/ul><p>Collapsing &#8220;Known Gap&#8221; and &#8220;Blind Gap&#8221; into the same backlog item destroys the information you need most. A team that has catalogued its ignorance is in a completely different position from a team that simply hasn&#8217;t noticed a hole.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-03ecbe8 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"03ecbe8\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5b4e97b e-flex e-con-boxed e-con e-parent\" data-id=\"5b4e97b\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4c1b323 elementor-widget elementor-widget-text-editor\" data-id=\"4c1b323\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h2>What Atlas Looked Like When I First Turned It On<\/h2>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f4867e elementor-widget elementor-widget-pix-img\" data-id=\"0f4867e\" data-element_type=\"widget\" data-widget_type=\"pix-img.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"pix-img-element d-inline-block \" ><div class=\"pix-img-el    text-left d-inline-block  w-100 rounded-lg\"  ><img loading=\"lazy\" decoding=\"async\" class=\"card-img2 pix-img-elem rounded-lg  h-1002\" style=\"height:auto;\" width=\"855\" height=\"108\" srcset=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_failures.jpg 855w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_failures-300x38.jpg 300w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_failures-768x97.jpg 768w\" sizes=\"(max-width: 855px) 100vw, 855px\" src=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_failures.jpg\" alt=\"Image link\" \/><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ea2e2bb elementor-widget elementor-widget-text-editor\" data-id=\"ea2e2bb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The first honest Atlas report was humbling.<\/p><p>Across an initial slice of obligations, <em><strong>zero were fully covered end-to-end<\/strong><\/em>. Ten stage cells were strictly verified. Eleven were partial. Six were known gaps. Five were blind gaps.<\/p><p>That wasn&#8217;t a failure. It was the first accurate photograph of the product.<\/p><p>Before Atlas, my mental model was shaped by what I&#8217;d recently built, what demos showed well, and what tests happened to cover. After Atlas, I could say things like: &#8220;Post-execution remarriage is a <strong>Blind Gap<\/strong> at the maintain stage. I have execution date and marital status, but no canonical dated marriage event, so I correctly don&#8217;t claim I can detect staleness.&#8221;<\/p><p>That&#8217;s a useful sentence. You can prioritize from it. You can&#8217;t prioritize from &#8220;grep didn&#8217;t find anything.&#8221;<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1aa3780 e-flex e-con-boxed e-con e-parent\" data-id=\"1aa3780\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c19ec68 elementor-widget elementor-widget-text-editor\" data-id=\"c19ec68\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h2>Adding the Remediation Agent<\/h2>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-177afaf elementor-widget elementor-widget-pix-img\" data-id=\"177afaf\" data-element_type=\"widget\" data-widget_type=\"pix-img.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"pix-img-element d-inline-block \" ><div class=\"pix-img-el    text-left d-inline-block  w-100 rounded-lg\"  ><img loading=\"lazy\" decoding=\"async\" class=\"card-img2 pix-img-elem rounded-lg  h-1002\" style=\"height:auto;\" width=\"1115\" height=\"670\" srcset=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_remed_agent.jpg 1115w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_remed_agent-300x180.jpg 300w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_remed_agent-1024x615.jpg 1024w, https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_remed_agent-768x461.jpg 768w\" sizes=\"(max-width: 1115px) 100vw, 1115px\" src=\"https:\/\/prizmlaw.com\/site\/wp-content\/uploads\/2026\/07\/screenshot_remed_agent.jpg\" alt=\"Image link\" \/><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c4dad7 elementor-widget elementor-widget-text-editor\" data-id=\"5c4dad7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Once Atlas made gaps visible and classifiable, the next bottleneck was <strong>closing them<\/strong>. Filling a gap often touched schemas, clause libraries, rules, advisor prompts, tests, and the coverage registry itself. Manual coordination of this by me typing prompts into Claude\/Codex was slow.<\/p><p>So I built an agentic remediation workflow on top of Atlas as a disciplined and hopefully more efficient way to close cells the map exposed.<\/p><p>The workflow looks like this:<\/p><ol><li>A human selects a matrix cell (partial, known gap, or blind gap)<\/li><li>An AI agent investigates in an <strong>isolated copy<\/strong> of the codebase and proposes a plan<\/li><li>A human <strong>approves the plan<\/strong> before any code changes<\/li><li>The agent implements, runs deterministic verification gates, and proposes a coverage delta<\/li><li>A human runs <strong>guided smoke tests<\/strong> (with evidence required for high-risk changes)<\/li><li>A human approves the exact registry change<\/li><li>Only then does the system merge and capture an immutable release snapshot of the work.<\/li><\/ol><p>The critical invariant, spelled out in instructions the agent cannot override:<\/p><p>&gt; <em><strong>You are building real product coverage, not improving the reported coverage number.<\/strong><\/em><\/p><p>The agent may not edit the canonical coverage map to look greener. It may not weaken tests to pass. It may not delete a gap by redefining scope. If it can&#8217;t close a gap honestly, it reports the gap honestly.<\/p><p>This is the lesson I think transfers most broadly to AI-assisted development: <em><strong>separate the scoreboard from the factory.<\/strong><\/em>\u00a0Agents are extraordinary factory workers. Left alone with the scoreboard, they will optimize the scoreboard.<\/p><p>Atlas and this agent process are still new for me so while I hope this brings are more disciplined and efficient approach to development of the main drafting tool, it&#8217;s too early to say. It&#8217;s also too early to say if this boundary between development and the scoreboard will be honestly maintained by the agent\/agents.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-226f961 e-flex e-con-boxed e-con e-parent\" data-id=\"226f961\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a78991a elementor-widget elementor-widget-text-editor\" data-id=\"a78991a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h2>Lessons That Travel Beyond Estate Planning<\/h2>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c18235d elementor-widget elementor-widget-text-editor\" data-id=\"c18235d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>You don&#8217;t need to build trusts to need these ideas. They show up wherever an AI-assisted product is <span style=\"text-decoration: underline;\"><strong>outcome-based<\/strong><\/span>, <span style=\"text-decoration: underline;\"><strong>multi-step<\/strong><\/span>, and <span style=\"text-decoration: underline;\"><strong>cross-cutting<\/strong><\/span>. This may increasingly become the default for serious AI work.<\/p><h4>1. Track Outcomes, not Features<\/h4><p><em>&#8220;We have a disinheritance toggle&#8221;<\/em> is a feature.<\/p><p><em>&#8220;An excluded heir is consistently excluded across all relevant documents, with validation and attorney guidance&#8221;<\/em> is an outcome.<\/p><p>Feature lists lie gently. Outcome maps lie only if you let them. Atlas&#8217; design is specifically about not letting them.<\/p><p><strong>Applies to:<\/strong> contract assembly, compliance workflows, clinical decision support, onboarding flows, any multi-artifact AI product.<\/p><h4>2. Use Stages, not Checkboxes<\/h4><p>If your product has a pipeline, such as: intake, reasoning, configuration, generation, validation, coordination, ongoing monitoring, then assess coverage <strong>per stage<\/strong>.<\/p><p>Otherwise you&#8217;ll ship the draft step and call the outcome done while coordination is silently broken.<\/p><p><strong>Applies to:<\/strong> document generation, agentic workflows with tool use, RAG systems (<em>&#8220;we retrieve&#8221;<\/em> \u2260 <em>&#8220;we answer correctly end-to-end&#8221;<\/em>).<\/p><h4>3. Make the map resolve against reality<\/h4><p>A roadmap in the spec rots. A spreadsheet rots. Even good documentation rots.<\/p><p>Atlas binds claims to <strong>resolvable references<\/strong> in the live system. Drift is an error, not a footnote.<\/p><p>The general pattern is &#8220;contract testing for product capabilities&#8221;. Your spec and your implementation stay coupled by machinery, not by someone&#8217;s memory.<\/p><p><strong>Applies to:<\/strong> any complex system where prompts, schemas, rules, and templates all affect behavior.<\/p><h4>4. Classify ignorance honestly<\/h4><p>Ask your team: for outcome X, is the answer <em>&#8220;we don&#8217;t support it&#8221;<\/em> or <em>&#8220;we don&#8217;t know&#8221;<\/em>?<\/p><p>Most teams can&#8217;t answer that question. The backlog hides the difference.<\/p><p><strong>Applies to:<\/strong> everywhere, but especially regulated or high-stakes domains.<\/p><h4>5. Agent-Assisted Development Needs Anti-Gaming Guardrails<\/h4><p>If you use coding agents seriously, you&#8217;ve probably seen the failure mode: tests weakened to pass, edge cases redefined away, <em>&#8220;it works in the demo&#8221;<\/em> substituted for <em>&#8220;it works for the job.&#8221;<\/em><\/p><p>The remediation workflow&#8217;s pattern is portable:<\/p><ul><li>Human selects the gap (not the agent)<\/li><li>Plan before code<\/li><li>Isolated implementation environment<\/li><li>Deterministic verification profiles<\/li><li>Human smoke tests with evidence<\/li><li>Human approves canonical truth changes<\/li><li>Immutable release history<\/li><\/ul><p>The agent improves machinery. Humans approve changes to what &#8220;done&#8221; means.<\/p><p><strong>Applies to:<\/strong> any team using AI coding agents on production systems, not just toys.<\/p><h4>6. Governance is a feature, not overhead<\/h4><p>Immutable release snapshots. Append-only history. <em>&#8220;You cannot retroactively decide you always covered something.&#8221;<\/em><\/p><p>That sounds like enterprise paperwork until you need to answer: <em><strong>&#8220;What did we believe we shipped in March, and what evidence did we have?&#8221;<\/strong><\/em><\/p><p><strong>Applies to:<\/strong> legal tech, fintech, health tech, and any AI product where trust and auditability matter.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ba277b3 e-flex e-con-boxed e-con e-parent\" data-id=\"ba277b3\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a5ba9a4 elementor-widget elementor-widget-text-editor\" data-id=\"a5ba9a4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h2>What I Wouldn&#8217;t Recommend<\/h2><h4>(yet)<\/h4><p>\u00a0<\/p><p>Atlas is not free. The obligation inventory for estate planning was enormous work involving exemplar trusts, court filings, practitioner judgment, a lot of engineering. You cannot copy the matrix UI and get the value. <strong>The taxonomy is the hard part, but also super-valuable.<\/strong><\/p><p>For a simple AI app (one model call, one screen, one output) this is overkill. The overhead pays off when complexity has <strong>already outrun <\/strong>your ability to track it, and when silent gaps are expensive.<\/p><p>I also wouldn&#8217;t pretend this is solved forever. Atlas tells me what the product does today. Maintaining the map is ongoing work. But that&#8217;s the point. The alternative is unconscious drift.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-eb9add8 e-flex e-con-boxed e-con e-parent\" data-id=\"eb9add8\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a408b5a elementor-widget elementor-widget-text-editor\" data-id=\"a408b5a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h2>The Punchline<\/h2><p>AI coding agents lower the cost of <em><strong>building<\/strong><\/em>. They do not lower the cost of <em><strong>knowing what you built<\/strong><\/em>.<\/p><p>On a simple project, the agent plus tests plus your own attention is enough. On a sophisticated AI-assisted product (multi-step, multi-artifact, outcome-based, high-stakes) you need something else: a system that externalizes outcomes, assesses coverage in stages, proves claims against live machinery, classifies gaps honestly, and closes them without letting anyone (human or agent) quietly rewrite the map.<\/p><p>That&#8217;s what Atlas is becoming for me. Not a drafting engine. Not a feature roadmap. A <em><strong>self-awareness layer for the product. <\/strong><\/em>I hope it also becomes\u00a0a disciplined way to improve it.<\/p><p>If you&#8217;re heading toward complexity you can&#8217;t hold in your head anymore, it&#8217;s time to take a step back and figure out how to address that problem from a systems perspective. \u00a0I&#8217;m not sure I&#8217;ve built the right solution yet, but this has been an interesting process.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4c61d8a e-flex e-con-boxed e-con e-parent\" data-id=\"4c61d8a\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Coding agents are extraordinarily good at implementing what you ask for. They are not good at telling you what you forgot to ask for.<\/p>\n","protected":false},"author":1,"featured_media":14109,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_siteseo_robots_primary_cat":"4","pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[4,27],"tags":[],"class_list":["post-14073","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles","category-legal-tech"],"_links":{"self":[{"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/posts\/14073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/comments?post=14073"}],"version-history":[{"count":76,"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/posts\/14073\/revisions"}],"predecessor-version":[{"id":14174,"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/posts\/14073\/revisions\/14174"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/media\/14109"}],"wp:attachment":[{"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/media?parent=14073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/categories?post=14073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prizmlaw.com\/site\/wp-json\/wp\/v2\/tags?post=14073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}