<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: CrisisCore-Systems</title>
    <description>The latest articles on Forem by CrisisCore-Systems (@crisiscoresystems).</description>
    <link>https://forem.com/crisiscoresystems</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3631931%2Fe251cac4-c5b1-45b9-92e0-a8c769f36a38.png</url>
      <title>Forem: CrisisCore-Systems</title>
      <link>https://forem.com/crisiscoresystems</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/crisiscoresystems"/>
    <language>en</language>
    <item>
      <title>The Stability Assumption: The Hidden Defect Source</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Tue, 07 Apr 2026 15:30:00 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/the-stability-assumption-the-hidden-defect-source-5cpd</link>
      <guid>https://forem.com/crisiscoresystems/the-stability-assumption-the-hidden-defect-source-5cpd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Part 11 of &lt;strong&gt;Protective Computing in Practice&lt;/strong&gt; — Start here: &lt;a href="https://dev.to/crisiscoresystems/offline-first-without-a-backend-a-local-first-pwa-architecture-you-can-trust-3j15"&gt;https://dev.to/crisiscoresystems/offline-first-without-a-backend-a-local-first-pwa-architecture-you-can-trust-3j15&lt;/a&gt;&lt;/p&gt;


&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  The Stability Assumption: The Hidden Defect Source
&lt;/h1&gt;

&lt;p&gt;Most software bugs are not random.&lt;/p&gt;

&lt;p&gt;A lot of them start much earlier than people think. Not in a broken function. Not in a missed test. Not in some weird edge case nobody could have seen coming.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want privacy-first, offline health tech to exist &lt;em&gt;without&lt;/em&gt; surveillance funding it: sponsor the build → &lt;a href="https://paintracker.ca/sponsor" rel="noopener noreferrer"&gt;https://paintracker.ca/sponsor&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They start in the premise layer.&lt;/p&gt;

&lt;p&gt;They start when a product is built around the assumption that the user is operating under normal conditions.&lt;/p&gt;

&lt;p&gt;Online. Rested. Safe. Focused. On a working device. With time to think. With stable access to their accounts. With enough margin to recover cleanly when something goes wrong.&lt;/p&gt;

&lt;p&gt;That assumption is everywhere, which is exactly why it hides so well.&lt;/p&gt;

&lt;p&gt;Protective Computing names it directly: the Stability Assumption.&lt;/p&gt;

&lt;p&gt;It is the false premise that the user has reliable connectivity, intact attention, safe surroundings, stable institutions, and enough breathing room to deal with failure properly. Its companion failure mode is Stability Bias: treating instability like a weird exception instead of a normal operating condition.&lt;/p&gt;

&lt;p&gt;That may sound abstract until you start tracing real product decisions back to it.&lt;/p&gt;

&lt;p&gt;A login flow that assumes immediate access to email is built on it.&lt;/p&gt;

&lt;p&gt;A dashboard that becomes useless without a network round-trip is built on it.&lt;/p&gt;

&lt;p&gt;A backup import flow that writes to state before preview or validation is built on it.&lt;/p&gt;

&lt;p&gt;A sync queue that quietly expands what it can replay over time is built on it.&lt;/p&gt;

&lt;p&gt;A so-called privacy-first app that still assumes the user has time, safety, and clarity to understand every failure state is built on it.&lt;/p&gt;

&lt;p&gt;That is why this matters.&lt;/p&gt;

&lt;p&gt;This is not just a philosophy issue. It is not one more soft conversation about empathy in product design. It is a hidden defect source.&lt;/p&gt;

&lt;p&gt;Because when stability drops out, those assumptions do not stay theoretical. They turn into lockout. Forced disclosure. Fragile recovery. Silent scope expansion. Irreversible mistakes.&lt;/p&gt;

&lt;p&gt;The system starts behaving exactly the way it was designed to behave.&lt;/p&gt;

&lt;p&gt;The problem is that it was designed for the wrong human condition.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Fake Baseline Most Teams Still Build Around
&lt;/h2&gt;

&lt;p&gt;A lot of software is built around a user who is basically fine.&lt;/p&gt;

&lt;p&gt;Maybe slightly busy. Maybe a little distracted. But still functional enough to re-authenticate, read the warning, interpret the prompt, troubleshoot the failure, and make the right choice in time.&lt;/p&gt;

&lt;p&gt;That baseline is fake.&lt;/p&gt;

&lt;p&gt;Real users are dealing with pain, fatigue, grief, executive dysfunction, weak connectivity, low battery, degraded hardware, unsafe environments, unstable housing, shared devices, legal pressure, interrupted sessions, and broken institutional support.&lt;/p&gt;

&lt;p&gt;Not once in a while.&lt;/p&gt;

&lt;p&gt;Regularly.&lt;/p&gt;

&lt;p&gt;That changes the question.&lt;/p&gt;

&lt;p&gt;You stop asking, "Does this feature work?"&lt;/p&gt;

&lt;p&gt;You start asking, "What does this become when the person using it is tired, scared, offline, rushed, watched, or cognitively maxed out?"&lt;/p&gt;

&lt;p&gt;That is the question a lot of products quietly avoid.&lt;/p&gt;

&lt;p&gt;It is also the question that exposes whether the system is actually trustworthy or just polished under ideal conditions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Stability Bias Is Convenience Mistaken for Truth
&lt;/h2&gt;

&lt;p&gt;This is where teams get themselves into trouble.&lt;/p&gt;

&lt;p&gt;They remove friction because it feels cleaner.&lt;/p&gt;

&lt;p&gt;They widen a sync scope because it is easier than maintaining a hard boundary.&lt;/p&gt;

&lt;p&gt;They centralize more state because it makes analytics simpler.&lt;/p&gt;

&lt;p&gt;They require sign-in because it makes the system feel more unified.&lt;/p&gt;

&lt;p&gt;They add telemetry because "we need visibility."&lt;/p&gt;

&lt;p&gt;Under stable conditions, all of that can sound reasonable.&lt;/p&gt;

&lt;p&gt;That is the trap.&lt;/p&gt;

&lt;p&gt;Once the Stability Assumption is baked in, convenience starts masquerading as correctness. The cleaner path starts looking like the right path. The easier architecture starts looking like the more mature architecture.&lt;/p&gt;

&lt;p&gt;Then real life shows up and exposes what those decisions actually were.&lt;/p&gt;

&lt;p&gt;Not harmless optimizations.&lt;/p&gt;

&lt;p&gt;Defect multipliers.&lt;/p&gt;

&lt;p&gt;That is Stability Bias.&lt;/p&gt;

&lt;p&gt;It is what happens when a team optimizes for the user they imagine instead of the user who actually exists.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Looks Like In Practice
&lt;/h2&gt;

&lt;p&gt;This gets real fast when you stop talking about principles and start looking at boundaries.&lt;/p&gt;

&lt;p&gt;In PainTracker, background sync is not treated like some innocent convenience layer. It is treated like a place where a small change can quietly turn the product into something else.&lt;/p&gt;

&lt;p&gt;That is why the boundary is strict.&lt;/p&gt;

&lt;p&gt;Exact method-and-path allowlisting at enqueue and replay. Same-origin only. No wildcard drift. Disallowed queue items dropped and deleted.&lt;/p&gt;

&lt;p&gt;That is not paranoia.&lt;/p&gt;

&lt;p&gt;That is what it looks like when you understand that a sync queue is one of the fastest ways a local-first app can slowly become a replay surface.&lt;/p&gt;

&lt;p&gt;Same with backup import.&lt;/p&gt;

&lt;p&gt;The goal is not "make restore easy no matter what." The goal is controlled recovery under imperfect conditions.&lt;/p&gt;

&lt;p&gt;So the flow stays narrow: settings-only backup, strict envelope, explicit allowlist, hard deny on risky keys, preview before write, typed confirmation token, bounded size, bounded key count.&lt;/p&gt;

&lt;p&gt;That is not decorative friction.&lt;/p&gt;

&lt;p&gt;That is the system refusing to pretend the user is always calm, clearheaded, and operating in a safe environment.&lt;/p&gt;

&lt;p&gt;The privacy posture follows the same logic.&lt;/p&gt;

&lt;p&gt;No account required. Local-first by default. Health data stays local by default. No health-data analytics sent to a server. Optional network behavior is bounded and does not quietly turn into broader extraction.&lt;/p&gt;

&lt;p&gt;That is what privacy looks like when it is structural.&lt;/p&gt;

&lt;p&gt;Not branding. Not vibes. Not theater.&lt;/p&gt;

&lt;p&gt;Architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hidden Bug Is Not That The App Crashed
&lt;/h2&gt;

&lt;p&gt;The hidden bug is that the software was built for the wrong version of reality.&lt;/p&gt;

&lt;p&gt;A system can be fast, polished, encrypted, compliant, and still be fundamentally wrong about the conditions it has to survive.&lt;/p&gt;

&lt;p&gt;It can pass QA and still fail the user the moment life stops behaving nicely.&lt;/p&gt;

&lt;p&gt;That is the deeper point.&lt;/p&gt;

&lt;p&gt;The Stability Assumption sits upstream of whole clusters of downstream failure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lockout bugs&lt;/li&gt;
&lt;li&gt;sync overreach&lt;/li&gt;
&lt;li&gt;forced disclosure paths&lt;/li&gt;
&lt;li&gt;brittle recovery&lt;/li&gt;
&lt;li&gt;irreversible user mistakes&lt;/li&gt;
&lt;li&gt;cloud dependence disguised as convenience&lt;/li&gt;
&lt;li&gt;core flows that only work when the user has spare attention and time&lt;/li&gt;
&lt;li&gt;products that collapse the second the real world gets involved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not weird edge cases.&lt;/p&gt;

&lt;p&gt;They are what happens when software meets life.&lt;/p&gt;

&lt;p&gt;Protective Computing does not treat that as incidental. It treats it as a design condition.&lt;/p&gt;

&lt;p&gt;As it should.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Better Audit Question
&lt;/h2&gt;

&lt;p&gt;The old question is simple:&lt;/p&gt;

&lt;p&gt;Does this work under normal conditions?&lt;/p&gt;

&lt;p&gt;The better question is harsher:&lt;/p&gt;

&lt;p&gt;What assumption about stability is this feature making, and what happens when that assumption fails?&lt;/p&gt;

&lt;p&gt;That question should sit over every auth flow, every import path, every sync mechanism, every destructive action, every dependency, every telemetry decision, every recovery path.&lt;/p&gt;

&lt;p&gt;Because once you start looking for stability assumptions, you see them everywhere.&lt;/p&gt;

&lt;p&gt;And once you see them, you start realizing how many "bugs" were never really bugs in the narrow sense.&lt;/p&gt;

&lt;p&gt;They were consequences.&lt;/p&gt;

&lt;p&gt;The code was doing exactly what the premise told it to do.&lt;/p&gt;

&lt;p&gt;Not bad code.&lt;/p&gt;

&lt;p&gt;Bad premises.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Blunt Version
&lt;/h2&gt;

&lt;p&gt;Most software is not broken because engineers are sloppy.&lt;/p&gt;

&lt;p&gt;A lot of it is broken because it was designed for a fictional user in a fictional world.&lt;/p&gt;

&lt;p&gt;A user with stable internet, stable attention, stable access, stable safety, stable time, and stable systems behind them.&lt;/p&gt;

&lt;p&gt;A lot of real users do not have that.&lt;/p&gt;

&lt;p&gt;So if your architecture depends on them behaving like they do, the defect was there long before the first ticket got filed.&lt;/p&gt;

&lt;p&gt;It was there in the assumption layer.&lt;/p&gt;

&lt;p&gt;That is the Stability Assumption.&lt;/p&gt;

&lt;p&gt;And teams should start hunting it like the defect source it is.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of Protective Computing in Practice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Companion reading: &lt;a href="https://dev.to/crisiscoresystems/protective-computing-is-not-privacy-theater-2job"&gt;Protective Computing Is Not Privacy Theater&lt;/a&gt; and &lt;a href="https://dev.to/crisiscoresystems/architecting-for-vulnerability-introducing-protective-computing-core-v10-91g"&gt;Architecting for Vulnerability: Introducing Protective Computing Core v1.0&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Support this work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sponsor the project (primary): &lt;a href="https://paintracker.ca/sponsor" rel="noopener noreferrer"&gt;https://paintracker.ca/sponsor&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Star the repo (secondary): &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;https://github.com/CrisisCore-Systems/pain-tracker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Read the full series from the start: (link)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>design</category>
      <category>softwareengineering</category>
      <category>ux</category>
    </item>
    <item>
      <title>I Ran the Protective Legitimacy Score on MyFitnessPal. It Failed.</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Sat, 04 Apr 2026 02:34:44 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/i-ran-the-protective-legitimacy-score-on-myfitnesspal-it-failed-11a8</link>
      <guid>https://forem.com/crisiscoresystems/i-ran-the-protective-legitimacy-score-on-myfitnesspal-it-failed-11a8</guid>
      <description>&lt;p&gt;For a while, I have been writing about Protective Computing as a discipline.&lt;/p&gt;

&lt;p&gt;That matters. But doctrine without contact is just theory wearing armor. If a framework cannot survive a collision with a real product, it is still only language.&lt;/p&gt;

&lt;p&gt;So I stopped speaking in abstractions and ran the first public walkthrough.&lt;/p&gt;

&lt;p&gt;I published &lt;a href="https://doi.org/10.5281/zenodo.19394090" rel="noopener noreferrer"&gt;PLS Walkthrough 0001: MyFitnessPal Public Surface Audit&lt;/a&gt; as a formal report.&lt;/p&gt;

&lt;p&gt;The audit was intentionally scoped to publicly observable product surfaces and public documentation only. No packet capture. No authenticated runtime instrumentation. No reverse engineering. Just the visible architecture, the public promises, the exposed controls, and the policies the product asks people to trust.&lt;/p&gt;

&lt;p&gt;Final result: &lt;strong&gt;7.50 out of 100&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Hard fail triggered.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That number is bad enough on its own. The harder truth is what it represents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I chose MyFitnessPal
&lt;/h2&gt;

&lt;p&gt;I did not want an obscure target. I did not want a throwaway app nobody depends on. I wanted a mainstream platform that sits close to the body, close to behavior, and close to the quiet pressure people live under every day.&lt;/p&gt;

&lt;p&gt;A food and fitness tracker is not neutral software. It collects routines, measurements, habits, and intimate forms of self observation. It enters the part of life where people are tired, ashamed, hopeful, depleted, recovering, spiraling, trying again, or simply trying to hold a pattern together long enough to function.&lt;/p&gt;

&lt;p&gt;That is exactly where software should be judged more harshly, not less.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this audit was actually measuring
&lt;/h2&gt;

&lt;p&gt;The Protective Legitimacy Score is not a vibe check. It is not a trust badge. It is not a branding exercise.&lt;/p&gt;

&lt;p&gt;It is a structured way of asking whether a system deserves to be trusted under real human conditions.&lt;/p&gt;

&lt;p&gt;Not ideal conditions. Not demo conditions. Not investor deck conditions.&lt;/p&gt;

&lt;p&gt;Real conditions.&lt;/p&gt;

&lt;p&gt;What happens when the user is cognitively overloaded. What happens when they are in pain. What happens when they are being watched. What happens when they do not have perfect energy, perfect privacy, perfect connectivity, or perfect control over their environment.&lt;/p&gt;

&lt;p&gt;A lot of software looks acceptable until you introduce reality.&lt;/p&gt;

&lt;p&gt;Then the seams start showing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the public surface already reveals
&lt;/h2&gt;

&lt;p&gt;One of the more dangerous habits in software criticism is pretending you need full internal access before you are allowed to make a serious judgment.&lt;/p&gt;

&lt;p&gt;Sometimes the system tells on itself immediately.&lt;/p&gt;

&lt;p&gt;Sometimes the public surface is already enough.&lt;/p&gt;

&lt;p&gt;If the visible product posture depends on tracking, account dependence, unclear recovery, exposure-prone defaults, or missing coercion-aware safety framing, that is not a minor detail. That is the architecture speaking in plain sight.&lt;/p&gt;

&lt;p&gt;And that is the point of this walkthrough.&lt;/p&gt;

&lt;p&gt;Not to claim omniscience. Not to pretend a public-surface audit is the whole story. But to prove something much simpler and much more uncomfortable:&lt;/p&gt;

&lt;p&gt;You can often detect structural failure before touching the internals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the fail matters
&lt;/h2&gt;

&lt;p&gt;This is not about theatrics. It is not about making a number sound dramatic. It is about what it means when a mainstream health-adjacent platform can be evaluated from its own public posture and still land at &lt;strong&gt;7.50 out of 100&lt;/strong&gt; with a hard fail already triggered.&lt;/p&gt;

&lt;p&gt;That should bother people.&lt;/p&gt;

&lt;p&gt;Not because the score is sacred. Not because one report ends the conversation. But because the visible layer of the product is already telling you that the burden is being placed in the wrong place.&lt;/p&gt;

&lt;p&gt;On the user.&lt;/p&gt;

&lt;p&gt;On the tired person. On the sick person. On the person who is expected to navigate settings, disclosures, permissions, exports, deletion paths, and trust boundaries while also trying to live.&lt;/p&gt;

&lt;p&gt;That is the part the industry keeps getting away with.&lt;/p&gt;

&lt;p&gt;Software keeps presenting itself as helpful while quietly assuming stable conditions that many people do not have.&lt;/p&gt;

&lt;p&gt;Stable attention. Stable privacy. Stable bandwidth. Stable housing. Stable emotional regulation. Stable safety.&lt;/p&gt;

&lt;p&gt;Those assumptions are not neutral. They are load-bearing. And when they collapse, the product’s true design philosophy becomes visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The larger problem
&lt;/h2&gt;

&lt;p&gt;Too much writing about privacy and trust still collapses into theater.&lt;/p&gt;

&lt;p&gt;A company says it cares about privacy. A product adds a settings menu. A policy page grows longer. A dashboard gains one more toggle. Everyone acts like this is maturity.&lt;/p&gt;

&lt;p&gt;It is not maturity if the underlying posture is still fragile. It is not care if the user is still carrying the cognitive burden alone. It is not protection if the design only works for people who are already safe.&lt;/p&gt;

&lt;p&gt;That is why I care about Protective Computing.&lt;/p&gt;

&lt;p&gt;Because I am not interested in whether a system sounds ethical. I am interested in whether it remains defensible when life stops being clean.&lt;/p&gt;

&lt;p&gt;Can the system preserve agency under stress.&lt;/p&gt;

&lt;p&gt;Can it reduce exposure instead of merely disclosing it.&lt;/p&gt;

&lt;p&gt;Can it degrade honestly.&lt;/p&gt;

&lt;p&gt;Can it avoid turning confusion, urgency, or dependency into a coercive condition.&lt;/p&gt;

&lt;p&gt;Those are engineering questions.&lt;/p&gt;

&lt;p&gt;They deserve engineering answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I published this as a formal report
&lt;/h2&gt;

&lt;p&gt;I did not want this to live as another opinion post floating through the feed. I wanted a real artifact. Something citable. Something stable. Something that can be examined, challenged, reused, and built on.&lt;/p&gt;

&lt;p&gt;That is why the first walkthrough exists as a DOI-backed report instead of a loose thread of claims.&lt;/p&gt;

&lt;p&gt;If I am going to argue that software should be judged against human vulnerability instead of convenience theater, then I need to be willing to make that judgment in public, under my own name, with a method and a paper trail.&lt;/p&gt;

&lt;p&gt;So that is what this is.&lt;/p&gt;

&lt;p&gt;The beginning of a series that takes Protective Computing out of the realm of doctrine and puts it under load against real software.&lt;/p&gt;

&lt;p&gt;In public. With receipts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the audit
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://doi.org/10.5281/zenodo.19394090" rel="noopener noreferrer"&gt;PLS Walkthrough 0001: MyFitnessPal Public Surface Audit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Framework basis: &lt;a href="https://doi.org/10.5281/zenodo.18783432" rel="noopener noreferrer"&gt;Protective Legitimacy Score (PLS) rubric&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Target policy reviewed: &lt;a href="https://www.myfitnesspal.com/privacy-policy" rel="noopener noreferrer"&gt;MyFitnessPal Privacy Policy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the first walkthrough.&lt;/p&gt;

&lt;p&gt;It will not be the last.&lt;/p&gt;

&lt;p&gt;Because if a framework cannot survive contact with real software, it does not deserve to exist.&lt;/p&gt;

&lt;p&gt;And if software cannot withstand evaluation under real human conditions, it does not deserve blind trust.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>webdev</category>
      <category>ethics</category>
    </item>
    <item>
      <title>Why Sovereignty Is Not Enough: The Missing Operational Layer in AI Stewardship</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Wed, 25 Mar 2026 16:00:00 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/why-sovereignty-is-not-enough-the-missing-operational-layer-in-ai-stewardship-2i4h</link>
      <guid>https://forem.com/crisiscoresystems/why-sovereignty-is-not-enough-the-missing-operational-layer-in-ai-stewardship-2i4h</guid>
      <description>&lt;p&gt;A system can run on your machine, keep your data out of somebody else’s cloud, and still fail you at the exact moment trust is supposed to become real.&lt;/p&gt;

&lt;p&gt;That is the gap a lot of AI discourse still leaves untouched. We talk about who owns the model, who hosts the stack, who controls updates, and where the data lives, and those questions do matter. They shape leverage, dependence, and exposure. What they do not answer is the harder question: how does the system behave once conditions stop being clean?&lt;/p&gt;

&lt;p&gt;That is where sovereignty and stewardship part ways.&lt;/p&gt;

&lt;p&gt;Sovereignty is about authority. Stewardship is about what that authority becomes under strain. They belong in the same conversation, but they are not the same achievement, and too much of the current language around local and private systems still treats them as if they were.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the weaker frame keeps winning
&lt;/h2&gt;

&lt;p&gt;Sovereignty gets overcredited because it offers a visible answer to a real fear. People have watched platforms tighten terms, widen telemetry, raise prices, and quietly shift power upward while leaving users with fewer meaningful choices. So when a product arrives wrapped in the language of local control, private storage, or self hosted operation, it feels like correction. It feels like somebody finally named the problem.&lt;/p&gt;

&lt;p&gt;That reaction makes sense. It also stops too early.&lt;/p&gt;

&lt;p&gt;Location is easier to prove than conduct. A builder can point to the machine, the storage boundary, or the deployment model and make a claim that looks morally serious. The system runs here. The data stays here. The user owns the keys. All of that may be true, and none of it tells you whether the product remains legible when a process is interrupted, a retry only half succeeds, or state becomes contested.&lt;/p&gt;

&lt;p&gt;That is the seduction of the weaker frame. It lets architecture stand in for responsibility. It lets a system look protective because of where it runs without proving that it behaves protectively when the operator actually needs help.&lt;/p&gt;

&lt;p&gt;A remote system can fail you from a distance. A local system can fail you in your own hands and still leave you doing the cleanup. The fact that the blast radius moved closer to the user does not make the failure more ethical.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real audit surface is degraded use
&lt;/h2&gt;

&lt;p&gt;Most software looks respectable when nothing interrupts the path from intent to completion. Stable connectivity, stable power, full attention, complete context, and enough time to think can make even fragile systems appear trustworthy.&lt;/p&gt;

&lt;p&gt;The real audit begins when continuity breaks.&lt;/p&gt;

&lt;p&gt;A laptop sleeps halfway through a run. A browser reloads. A session expires at the wrong moment. The network drops just long enough to create uncertainty without creating a clean failure. A retry completes some work but not all of it. The interface returns something that looks settled even though the underlying state is not. The operator comes back tired and has to decide whether touching anything again will repair the situation or make it worse.&lt;/p&gt;

&lt;p&gt;That is not edge behavior. That is ordinary life.&lt;/p&gt;

&lt;p&gt;If a system only preserves clarity when nothing interferes with its ideal flow, then its public posture is stronger than its operational reality. It may still be elegant. It may still be private. It may still be sovereign. None of that changes the fact that trust begins where ambiguity stops being expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example one: the local agent that cannot account for itself
&lt;/h2&gt;

&lt;p&gt;Imagine a local agent that processes a folder of documents and writes structured notes into your workspace. There is no remote execution, no third party logging, and no outside dependency in the critical path. On paper, it checks the boxes people increasingly use as shorthand for trustworthiness.&lt;/p&gt;

&lt;p&gt;Halfway through the run, the machine sleeps.&lt;/p&gt;

&lt;p&gt;When it wakes, the interface reports completion. Only later does the operator discover that one file was never processed, another was partially written, and a retry created duplicates because the write path was not safe to repeat. Timestamps shifted during the second pass, so sequence is now unclear. There is no durable event log, no reconciliation summary, and no clean record of what committed successfully versus what was left in limbo.&lt;/p&gt;

&lt;p&gt;The system remained sovereign throughout the entire sequence. That is exactly the point. The failure was not about ownership. It was about the system’s inability to preserve truth once interruption entered the picture. Instead of containing uncertainty, it handed uncertainty to the human and forced them to reconstruct reality from fragments.&lt;/p&gt;

&lt;p&gt;That is not a minor implementation flaw. It is a trust failure at the architectural level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example two: the sync engine that hides unresolved state
&lt;/h2&gt;

&lt;p&gt;Now take a different product class: a notes tool with optional sync. It advertises local ownership, encrypted storage, and user controlled export. Again, the posture sounds strong.&lt;/p&gt;

&lt;p&gt;A common failure path is easy to imagine. The user edits the same project across two devices. One device has been offline longer than expected. The other completed a background retry after a temporary authentication lapse. When connectivity returns, the product announces that everything is up to date.&lt;/p&gt;

&lt;p&gt;It is not.&lt;/p&gt;

&lt;p&gt;One change was dropped during conflict resolution because the merge strategy preferred recency over meaning. An attachment reference survived in metadata even though the underlying blob never finished uploading. A background retry succeeded on one object and silently failed on another. The export panel still shows success because the export job completed, even though the dataset now contains an unresolved hole.&lt;/p&gt;

&lt;p&gt;What makes this dangerous is not simply sync failure. Systems fail. What matters is that the operator is given the appearance of closure instead of an honest account of state. Ownership is still present. Control is still present. What is missing is a system that can surface conflict, preserve causality, and tell the truth about what remains unresolved.&lt;/p&gt;

&lt;p&gt;Once a product makes truth expensive to recover, it starts charging the human in time, stress, and risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  What stewardship has to require
&lt;/h2&gt;

&lt;p&gt;If stewardship is going to mean anything, it cannot remain a mood or a marketing signal. It has to describe a set of behaviors that hold under interruption, fatigue, and uncertainty.&lt;/p&gt;

&lt;p&gt;The first requirement is bounded failure. A serious system limits blast radius. It distinguishes between what can pause, what can degrade, what can be retried safely, and what must stop until state is reconciled. Without those boundaries, capability only increases the size of the mess.&lt;/p&gt;

&lt;p&gt;The second is real recovery. Not recovery promised in documentation for a calm operator with spare time, but recovery that exists in the product itself through resumable operations, durable checkpoints, preserved history, safe retries, and completion states that can actually be verified. If retrying might duplicate work, deepen corruption, or further obscure what happened, then the system does not really recover. It asks the human to compensate for its uncertainty.&lt;/p&gt;

&lt;p&gt;The third is truthful state. This is where polished systems often become untrustworthy. They hide uncertainty because uncertainty looks messy, and they collapse partial failure into optimistic language because composure is easier to ship than honesty. But a protective system should make four things cheap to know: what happened, what is true now, what remains unresolved, and what can be done safely next. If those answers are difficult to obtain, then the system has already pushed operational risk downward onto the operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  A better standard
&lt;/h2&gt;

&lt;p&gt;When a product claims to be local, private, sovereign, or self hosted, that should open the real evaluation rather than close it. The useful test is not whether control moved closer to the user. It is whether the product can survive interruption without manufacturing confusion, preserve state in a way the operator can verify quickly, resume without turning retries into roulette, degrade without quietly damaging truth, and distinguish between real success and motion that merely reached a stopping point.&lt;/p&gt;

&lt;p&gt;Those are not peripheral concerns. They are the conditions under which trust becomes operational instead of rhetorical.&lt;/p&gt;

&lt;p&gt;Anyone can produce a clean architecture diagram and call it responsibility. The harder task is building a system that remains legible when context collapses, dependencies wobble, attention thins out, and reality becomes inconvenient. That is where stewardship either proves itself or disappears.&lt;/p&gt;

&lt;h2&gt;
  
  
  The verdict
&lt;/h2&gt;

&lt;p&gt;Sovereignty matters. We need more systems that reduce dependence, narrow outside leverage, and return authority to the operator.&lt;/p&gt;

&lt;p&gt;But sovereignty is not the verdict. It is the opening requirement.&lt;/p&gt;

&lt;p&gt;A product does not become trustworthy because computation moved closer to the user. It does not become protective because the data stayed on the right machine. It does not become responsible because its language learned how to speak in the register of control.&lt;/p&gt;

&lt;p&gt;The real question is harsher than that. When the run is interrupted, when state turns uncertain, when sync becomes contested, when completion is partial, and when the operator is too tired to play forensic analyst, does the system preserve orientation or does it preserve appearances?&lt;/p&gt;

&lt;p&gt;That is the line that matters. Not where the system runs, but whether under degraded conditions it still lets the operator know what is true and what can be done safely next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>privacy</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Protective Computing Is Not Privacy Theater</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Tue, 24 Mar 2026 16:00:00 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/protective-computing-is-not-privacy-theater-2job</link>
      <guid>https://forem.com/crisiscoresystems/protective-computing-is-not-privacy-theater-2job</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Part 15 of &lt;strong&gt;Protective Computing in Practice&lt;/strong&gt; — Start here: &lt;a href="https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37"&gt;https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37&lt;/a&gt;&lt;/p&gt;


&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Protective Computing Is Not Privacy Theater
&lt;/h1&gt;

&lt;p&gt;Privacy features are easy to ship. A toggle. A consent modal. An export button. Protective Computing asks a different question: does this system stay legible and non coercive when the person using it can no longer advocate for themselves? Those are not the same problem. One is a compliance posture. The other is a structural property.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;If you want privacy-first, offline health tech to exist &lt;em&gt;without&lt;/em&gt; surveillance funding it: sponsor the build → &lt;a href="https://paintracker.ca/sponsor" rel="noopener noreferrer"&gt;https://paintracker.ca/sponsor&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Difference Is Structural
&lt;/h2&gt;

&lt;p&gt;A consent modal is privacy theater when the system behind it transmits sensitive state regardless of what the user clicked.&lt;/p&gt;

&lt;p&gt;An export button is privacy theater when the exported file silently drops the encryption metadata needed to restore the data.&lt;/p&gt;

&lt;p&gt;An "offline first" badge is privacy theater when startup requires a remote configuration call.&lt;/p&gt;

&lt;p&gt;Privacy theater is often sincere work implemented at the wrong layer. A team ships a GDPR consent flow, checks the box, and ships. The data modeling underneath remains unchanged. The feature is real. The protection is not.&lt;/p&gt;

&lt;p&gt;Protective Computing starts from a different premise: not what does the UI say, but what does the architecture actually do?&lt;/p&gt;

&lt;p&gt;That distinction between rhetorical protection and structural protection is the entire discipline.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Protective Computing Is
&lt;/h2&gt;

&lt;p&gt;Protective Computing is a systems engineering discipline for software intended to remain safe, legible, and useful under conditions of instability and human vulnerability. The &lt;a href="https://zenodo.org/records/18688516" rel="noopener noreferrer"&gt;Overton Framework&lt;/a&gt; formalizes this as a structural engineering constraint with testable properties, not a design philosophy or a values statement.&lt;/p&gt;

&lt;p&gt;A protective system must preserve five things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local authority — the user retains control over their data, device state, export paths, and ability to leave&lt;/li&gt;
&lt;li&gt;Exposure minimization — collect, store, transmit, and render the minimum data necessary, by default, not as an option&lt;/li&gt;
&lt;li&gt;Reversibility — users can recover from mistakes, panic, interruption, or incomplete actions without disproportionate harm&lt;/li&gt;
&lt;li&gt;Degraded functionality resilience — core tasks survive degraded conditions: no internet, low battery, broken service workers, interrupted sessions&lt;/li&gt;
&lt;li&gt;Coercion resistance — the system does not become a tool of surveillance, forced disclosure, or manipulation, even passively&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those are features. They are architectural properties. They are either true of the whole system at the structural level, or not true regardless of what the UI labels say.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Stability Assumption Is the Hidden Adversary
&lt;/h2&gt;

&lt;p&gt;Most software is designed for someone who is rested, online, cognitively available, and in a safe environment with reliable hardware. The Overton Framework names this the Stability Assumption and formalizes what it produces as Stability Bias: an architectural distortion caused by dependency accumulation, vulnerability amplification, and irreversible system design.&lt;/p&gt;

&lt;p&gt;Stability Bias is not a bug report. It is a defect class. It needs to be hunted, not just patched.&lt;/p&gt;

&lt;p&gt;The actual use conditions for software that holds health records, legal evidence, housing documents, or communication logs include pain, illness, trauma, grief, fatigue, executive dysfunction, displacement, weak or intermittent connectivity, low battery, degraded hardware, unsafe surroundings, legal vulnerability, coercive relationships, cognitive overload, interrupted sessions, device sharing, and loss of trusted access.&lt;/p&gt;

&lt;p&gt;That is not an edge case inventory. It is a description of any person in crisis. Software optimized for the Stability Assumption is implicitly optimized for the people who need protection least.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why "Privacy First" Is Not Enough
&lt;/h2&gt;

&lt;p&gt;Privacy first is a claim. Protective legitimacy is structural, not rhetorical.&lt;/p&gt;

&lt;p&gt;A system is not protective because it says offline first, privacy first, encrypted, trauma informed, or resilient. It is protective only if the architecture, defaults, failure behavior, and recovery paths materially support those claims. The &lt;a href="https://zenodo.org/records/18783432" rel="noopener noreferrer"&gt;Protective Legitimacy Score rubric&lt;/a&gt; makes this precise: claims do not generate score. Verifiable system behavior generates score. A conventional cloud dependent architecture scores 15.25 out of 100. A protective local first implementation scores 87.75. The gap is not branding. It is architecture.&lt;/p&gt;

&lt;p&gt;Here is what the structural version looks like in practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specimen one: background sync.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;pain-tracker&lt;/a&gt; codebase keeps a document called &lt;code&gt;SECURITY_INVARIANTS.md&lt;/code&gt;, a registry of the eight chokepoints where a small change quietly turns the system into a different kind of system. The first chokepoint is background sync. The invariant: no wildcard &lt;code&gt;/api/*&lt;/code&gt; permissions. Same origin only. Drop and delete disallowed queue items. No "skip but keep."&lt;/p&gt;

&lt;p&gt;The threat it defends against: when the app goes offline, pending requests are serialized to IndexedDB for later replay. Without strict origin validation at both enqueue time and replay time, a malicious queue item could redirect sensitive health data to an attacker controlled domain when connectivity restores.&lt;/p&gt;

&lt;p&gt;Privacy theater would have put "we never transmit your data" in the README. The structural answer is two separate enforcement points with a regression test that fails if the allowlist ever becomes a wildcard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specimen two: backup import.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The second chokepoint covers &lt;code&gt;BackupSettings.tsx&lt;/code&gt;. The invariant: no writes until the user explicitly types the confirm token &lt;code&gt;IMPORT&lt;/code&gt;. Not a checkbox. Not a button. The literal word.&lt;/p&gt;

&lt;p&gt;That friction is not a UX oversight. It is a coercion barrier. It prevents an automated process, a shoulder surfing attacker, or a panicked accidental action from writing arbitrary data into application state without a deliberate, eyes open confirmation step. The friction is load bearing. Removing it would not improve the user experience. It would remove a structural protection and replace it with nothing.&lt;/p&gt;

&lt;p&gt;Two specimens. Same pattern in both: the claimed protection is enforced at the architecture level, testable, and documented as a chokepoint rather than trusted as a policy.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Structural Version Looks Like
&lt;/h2&gt;

&lt;p&gt;Privacy theater versus structural protection, paired:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"We never sell your data"&lt;/strong&gt;&lt;br&gt;
The structural version: the app has no server side storage of health records. All writes go to local IndexedDB. The CSP enforces &lt;code&gt;connect-src 'self'&lt;/code&gt;. Any external egress routes through a same origin chokepoint. The policy is the minimum possible claim because the architecture leaves nothing else to claim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Export your data anytime"&lt;/strong&gt;&lt;br&gt;
The structural version: the export preserves the full backup envelope with an allowlist applied on both export and import. Denied keys never leave. Denied keys never enter. Invalid schema versions are rejected. The restore round trip is tested, not assumed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Offline first"&lt;/strong&gt;&lt;br&gt;
The structural version: core writes succeed locally before any sync attempt. Sync is secondary. The app does not call a remote configuration endpoint on startup. Essential function survives with the network fully cut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Encrypted"&lt;/strong&gt;&lt;br&gt;
The structural version: defines exactly what is encrypted, where the key lifecycle lives, and what happens when the passphrase is lost. Lock state, unlocked state, absent state, error state, and corrupted state are explicit and tested. Encryption metadata is preserved through export and restore. The backup does not silently drop the material needed to decrypt it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Trauma informed"&lt;/strong&gt;&lt;br&gt;
The structural version: destructive actions are explicit, correctly scoped, and legible. Error states tell users what is still safe, not just what failed. No manipulative urgency. No irreversible reveals. Safe exit is always available. The interface does not become cognitively punishing under stress.&lt;/p&gt;

&lt;p&gt;In every case the structural answer makes the claimed property auditable. It is not a statement of intent. It is a behavior the architecture either exhibits or does not.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Series Is
&lt;/h2&gt;

&lt;p&gt;This series exists to turn protective claims into auditable design rules.&lt;/p&gt;

&lt;p&gt;Seven parts. One question repeated across all of them:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What design rules make software stay usable, legible, and non coercive when human stability breaks down?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The material is not theoretical. The &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;pain-tracker&lt;/a&gt; app is the reference implementation of the Protective Computing canon, built to demonstrate that these constraints are implementable in production software under real conditions. The series is grounded in that implementation, not doctrine invented to fill posts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Part 2 — The Stability Assumption Is a Hidden Bug&lt;/li&gt;
&lt;li&gt;Part 3 — Local Authority: Who Controls the System When Conditions Degrade&lt;/li&gt;
&lt;li&gt;Part 4 — Bounded Failure: How Systems Break Without Turning Coercive&lt;/li&gt;
&lt;li&gt;Part 5 — Trust Cases, Not Trust Claims&lt;/li&gt;
&lt;li&gt;Part 6 — Friction as Protection&lt;/li&gt;
&lt;li&gt;Part 7 — How to Audit a Product for Protective Computing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No manifestos. Patterns, failure modes, and implementation level evidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Blunt Version
&lt;/h2&gt;

&lt;p&gt;Privacy theater is what happens when a team solves the audit problem instead of the user problem.&lt;/p&gt;

&lt;p&gt;Protective Computing is what happens when you ask what a system does to a scared, exhausted, offline person at 2am and you take the answer seriously at the architectural level instead of the marketing level.&lt;/p&gt;

&lt;p&gt;One of those is a posture. The other is a discipline.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is Part 1 of Protective Computing in Practice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Next: Why the Stability Assumption is the hidden defect source in modern software.&lt;/em&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;About Protective Computing:&lt;/strong&gt; A formally published systems engineering discipline. Full canon at the &lt;a href="https://zenodo.org/communities/protective-computing" rel="noopener noreferrer"&gt;Protective Computing Zenodo community&lt;/a&gt;. Living specification at &lt;a href="https://protective-computing.github.io" rel="noopener noreferrer"&gt;protective-computing.github.io&lt;/a&gt;. PainTracker is the reference implementation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Support this work
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Sponsor the project (primary): &lt;a href="https://paintracker.ca/sponsor" rel="noopener noreferrer"&gt;https://paintracker.ca/sponsor&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Star the repo (secondary): &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;https://github.com/CrisisCore-Systems/pain-tracker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Read the full series from the start: (link)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>discuss</category>
      <category>privacy</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Who Was the Software Built to Survive?</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Sun, 15 Mar 2026 02:32:41 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/who-was-the-software-built-to-survive-42ed</link>
      <guid>https://forem.com/crisiscoresystems/who-was-the-software-built-to-survive-42ed</guid>
      <description>&lt;p&gt;This is a submission for the 2026 WeCoded Challenge: Echoes of Experience&lt;br&gt;
.&lt;/p&gt;

&lt;p&gt;When people talk about inclusion in tech, the conversation usually starts with access.&lt;/p&gt;

&lt;p&gt;Who gets hired.&lt;br&gt;
Who gets funded.&lt;br&gt;
Who gets invited into the room.&lt;/p&gt;

&lt;p&gt;That matters.&lt;/p&gt;

&lt;p&gt;But there is another question that matters just as much, and it gets asked far less often:&lt;/p&gt;

&lt;p&gt;Who was the software built to survive?&lt;/p&gt;

&lt;p&gt;Because a lot of software feels inclusive only as long as the user is calm, connected, housed, charged, focused, and safe.&lt;/p&gt;

&lt;p&gt;It works beautifully right up until reality enters the interface.&lt;/p&gt;

&lt;p&gt;Right up until the person using it is in pain. Or exhausted. Or scared. Or offline. Or displaced. Or trying to make important decisions on a dying phone battery with weak signal and nowhere private to think.&lt;/p&gt;

&lt;p&gt;That is where the truth of a system shows itself.&lt;/p&gt;

&lt;p&gt;Not in the pitch deck.&lt;br&gt;
Not in the mission statement.&lt;br&gt;
Not in the polished design file.&lt;/p&gt;

&lt;p&gt;In the failure mode.&lt;/p&gt;

&lt;p&gt;I did not learn that lesson from a conference talk or a polished sprint retrospective.&lt;/p&gt;

&lt;p&gt;I learned it the hard way.&lt;/p&gt;

&lt;p&gt;I learned it while dealing with pain, stress, housing instability, weak connectivity, low battery, legal pressure, and the humiliating experience of needing a system most at the exact moment it was least capable of meeting me where I was.&lt;/p&gt;

&lt;p&gt;There were nights in winter in British Columbia when I sat in a McDonald’s for as long as I could, nursing a single coffee because one more hour indoors mattered. I stayed until they closed the seating area, and then I was outside again. More than once, I slept near the building under a tarp, with an extension cord hooked to an outlet high up near the roofline so I could charge my scooter while I slept. All night, I could hear every car rolling through the drive-thru.&lt;/p&gt;

&lt;p&gt;That changes how you understand a loading spinner.&lt;/p&gt;

&lt;p&gt;That changes how you understand a recovery flow.&lt;/p&gt;

&lt;p&gt;That changes how you understand the phrase “just try again later.”&lt;/p&gt;

&lt;p&gt;I have looked at “we sent you a code” differently when signal kept cutting out.&lt;/p&gt;

&lt;p&gt;I have looked at password recovery differently when the recovery path assumed uninterrupted attention, stable device access, and enough calm to troubleshoot like nothing else in life was on fire.&lt;/p&gt;

&lt;p&gt;I have looked at cloud dependency differently when battery life, connectivity, and personal safety were all unstable at the same time.&lt;/p&gt;

&lt;p&gt;Those experiences changed the way I understand technology.&lt;/p&gt;

&lt;p&gt;A cloud dashboard stops sounding advanced when you know what it means to depend on a network that might vanish.&lt;/p&gt;

&lt;p&gt;A beautiful onboarding flow stops sounding thoughtful when it assumes a quiet room, emotional surplus, and the luxury of making mistakes.&lt;/p&gt;

&lt;p&gt;“Sync it later” stops sounding harmless when you know that, for some people, later is where things disappear.&lt;/p&gt;

&lt;p&gt;That is the part of inclusion I think tech still struggles to name.&lt;/p&gt;

&lt;p&gt;We are getting better at asking who is represented in the industry. That matters deeply. But we are still not honest enough about how many products are built around a hidden assumption of stability:&lt;/p&gt;

&lt;p&gt;Stable housing.&lt;br&gt;
Reliable internet.&lt;br&gt;
Consistent power.&lt;br&gt;
Private device access.&lt;br&gt;
Cognitive bandwidth.&lt;br&gt;
Predictable energy.&lt;br&gt;
Institutional trust.&lt;br&gt;
Enough spare calm to recover gracefully when something breaks.&lt;/p&gt;

&lt;p&gt;Those are not neutral defaults.&lt;/p&gt;

&lt;p&gt;They are privileges disguised as design assumptions.&lt;/p&gt;

&lt;p&gt;And because they are rarely named, they quietly shape everything. They shape what gets called intuitive. They shape which failures are tolerated. They shape who gets blamed when the system collapses.&lt;/p&gt;

&lt;p&gt;Tech loves the phrase edge case.&lt;/p&gt;

&lt;p&gt;But for millions of people, the so-called edge case is not an exception.&lt;/p&gt;

&lt;p&gt;It is the baseline.&lt;/p&gt;

&lt;p&gt;It is pain.&lt;br&gt;
It is displacement.&lt;br&gt;
It is low battery.&lt;br&gt;
It is device sharing.&lt;br&gt;
It is trying to hold your life together through an interface that was designed as if your life would already be holding.&lt;/p&gt;

&lt;p&gt;For a long time, I thought technical excellence mostly meant making systems faster, smoother, smarter, and more automated.&lt;/p&gt;

&lt;p&gt;Some of it does. Performance matters. Clarity matters. Good tooling matters.&lt;/p&gt;

&lt;p&gt;But I no longer believe speed is the highest proof of care.&lt;/p&gt;

&lt;p&gt;A system is not humane because it is frictionless.&lt;/p&gt;

&lt;p&gt;A system is not trustworthy because the landing page says “secure.”&lt;/p&gt;

&lt;p&gt;A system is not inclusive because it works beautifully for users whose lives already match its assumptions.&lt;/p&gt;

&lt;p&gt;Real trust shows up in architecture.&lt;/p&gt;

&lt;p&gt;It shows up in whether the tool can still function when the network fails.&lt;/p&gt;

&lt;p&gt;It shows up in whether recovery is possible under stress.&lt;/p&gt;

&lt;p&gt;It shows up in whether privacy is structural instead of optional.&lt;/p&gt;

&lt;p&gt;It shows up in whether usefulness quietly demands surrender.&lt;/p&gt;

&lt;p&gt;That realization changed how I build.&lt;/p&gt;

&lt;p&gt;I stopped thinking about privacy as a settings page and started thinking about it as a boundary the system has no right to cross.&lt;/p&gt;

&lt;p&gt;I stopped treating offline support as a feature and started treating it as respect.&lt;/p&gt;

&lt;p&gt;I stopped treating reliability as convenience and started seeing it for what it often is:&lt;/p&gt;

&lt;p&gt;dignity under pressure.&lt;/p&gt;

&lt;p&gt;That shift changes engineering decisions.&lt;/p&gt;

&lt;p&gt;Local-first storage stops looking niche.&lt;/p&gt;

&lt;p&gt;Graceful degradation stops looking secondary.&lt;/p&gt;

&lt;p&gt;Shorter recovery paths stop looking like polish.&lt;/p&gt;

&lt;p&gt;Data minimization stops sounding paranoid.&lt;/p&gt;

&lt;p&gt;Lower cognitive load stops being a UX preference and becomes a survival requirement.&lt;/p&gt;

&lt;p&gt;These are not decorative improvements.&lt;/p&gt;

&lt;p&gt;They are moral decisions expressed through technical structure.&lt;/p&gt;

&lt;p&gt;Because if software is meant to support human beings under pain, fear, coercion, instability, or exhaustion, then it should not quietly punish them for being human.&lt;/p&gt;

&lt;p&gt;And if a product claims to care about trust, then trust should be visible in the system itself, not outsourced to branding, legal language, and hope.&lt;/p&gt;

&lt;p&gt;That is a large part of what pushed me toward local-first and privacy-first thinking.&lt;/p&gt;

&lt;p&gt;Not because it was trendy.&lt;/p&gt;

&lt;p&gt;Because it felt necessary.&lt;/p&gt;

&lt;p&gt;I wanted to build software that did not treat unstable people as defective versions of ideal users.&lt;/p&gt;

&lt;p&gt;I wanted to build tools that did not require exposure as the cost of usefulness.&lt;/p&gt;

&lt;p&gt;I wanted to build software that could still hold its shape when life no longer looked like a product demo.&lt;/p&gt;

&lt;p&gt;That may sound philosophical.&lt;/p&gt;

&lt;p&gt;It is not.&lt;/p&gt;

&lt;p&gt;It is brutally practical.&lt;/p&gt;

&lt;p&gt;A person in pain may not be able to navigate a dense form.&lt;/p&gt;

&lt;p&gt;A person in crisis may not remember six recovery steps.&lt;/p&gt;

&lt;p&gt;A person in an unsafe environment may not be able to risk their data living on someone else’s server.&lt;/p&gt;

&lt;p&gt;A person under stress may not need a smarter experience. They may need one that fails less cruelly.&lt;/p&gt;

&lt;p&gt;Yet so much of the industry still treats those realities like peripheral accommodations instead of first-order engineering constraints.&lt;/p&gt;

&lt;p&gt;To me, that is one of the deepest forms of exclusion tech still struggles to name.&lt;/p&gt;

&lt;p&gt;Not just exclusion from opportunity.&lt;/p&gt;

&lt;p&gt;Exclusion from usability.&lt;/p&gt;

&lt;p&gt;Exclusion from safety.&lt;/p&gt;

&lt;p&gt;Exclusion from recoverability.&lt;/p&gt;

&lt;p&gt;Exclusion from the basic assumption that your life deserves to remain survivable inside the system itself.&lt;/p&gt;

&lt;p&gt;I do not think every developer needs to have lived through instability to understand this.&lt;/p&gt;

&lt;p&gt;But I do think the industry improves when more of us take seriously the people who have.&lt;/p&gt;

&lt;p&gt;Not as inspiration.&lt;/p&gt;

&lt;p&gt;Not as branding.&lt;/p&gt;

&lt;p&gt;Not as a resilience anecdote pasted over product ambition.&lt;/p&gt;

&lt;p&gt;As sources of design truth.&lt;/p&gt;

&lt;p&gt;Because lived experience exposes architectural lies faster than strategy ever will.&lt;/p&gt;

&lt;p&gt;It shows you where the defaults break.&lt;/p&gt;

&lt;p&gt;It shows you which “best practices” were only best for people with surplus.&lt;/p&gt;

&lt;p&gt;It shows you that some systems do not merely inconvenience vulnerable users.&lt;/p&gt;

&lt;p&gt;They abandon them exactly when they are most needed.&lt;/p&gt;

&lt;p&gt;So yes, inclusion in tech matters at the hiring level. Deeply.&lt;/p&gt;

&lt;p&gt;But if we stop there, we leave the harder question untouched:&lt;/p&gt;

&lt;p&gt;What kind of life does this system assume is normal?&lt;/p&gt;

&lt;p&gt;Because every product embeds an answer.&lt;/p&gt;

&lt;p&gt;Every workflow.&lt;br&gt;
Every dependency.&lt;br&gt;
Every default.&lt;br&gt;
Every recovery path.&lt;/p&gt;

&lt;p&gt;And if the answer is a life with stable housing, strong signal, private device access, spare focus, emotional bandwidth, institutional trust, and enough calm to troubleshoot on demand, then a lot of what we call good software is only good software for the already protected.&lt;/p&gt;

&lt;p&gt;That is the lesson I keep returning to.&lt;/p&gt;

&lt;p&gt;A lot of software is built for users at their best.&lt;/p&gt;

&lt;p&gt;Very little is built for users at their most fragile.&lt;/p&gt;

&lt;p&gt;And the distance between those two choices is often the distance between support and abandonment.&lt;/p&gt;

&lt;p&gt;If we want a technology industry worthy of the word inclusive, then we cannot stop at asking who gets to build the future.&lt;/p&gt;

&lt;p&gt;We also have to ask:&lt;/p&gt;

&lt;p&gt;Who is allowed to remain intact inside the systems we ship?&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>wecoded</category>
      <category>dei</category>
      <category>career</category>
    </item>
    <item>
      <title>How ProofVault turned trust from a documentation claim into a reproducible release artifact</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Sat, 14 Mar 2026 13:50:24 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/how-proofvault-turned-trust-from-a-documentation-claim-into-a-reproducible-release-artifact-22pb</link>
      <guid>https://forem.com/crisiscoresystems/how-proofvault-turned-trust-from-a-documentation-claim-into-a-reproducible-release-artifact-22pb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Part 14 of &lt;strong&gt;Protective Computing in Practice&lt;/strong&gt; — Start here: &lt;a href="https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37"&gt;https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;ProofVault now carries part of its own proof burden in the repository.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most projects say they care about security, privacy, or integrity. Far fewer can point to a concrete specimen, regenerate it from the repository, detect drift automatically, show what tampering looks like, and identify the exact hosted-green release tree tied to a public tag.&lt;/p&gt;

&lt;p&gt;ProofVault now does.&lt;/p&gt;

&lt;p&gt;This post is about building a trust case that is not just described in prose, but enforced through code, generated artifacts, CI, and release discipline.&lt;/p&gt;

&lt;p&gt;The result is &lt;strong&gt;ProofVault Trust Case v1.0.1&lt;/strong&gt;: a reproducible trust case for an offline-first encrypted evidence app, tied to an exact public release and stabilized across hosted CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with trust claims
&lt;/h2&gt;

&lt;p&gt;ProofVault is an offline-first encrypted evidence and incident capture application built for unstable, privacy-sensitive, and high-stress conditions.&lt;/p&gt;

&lt;p&gt;A system like that carries a higher burden than ordinary product software.&lt;/p&gt;

&lt;p&gt;It is not enough to say the app encrypts data. It is not enough to say the app exports records. It is not enough to say it has verification features.&lt;/p&gt;

&lt;p&gt;Those claims stay abstract unless they are tied to something concrete, inspectable, and repeatable.&lt;/p&gt;

&lt;p&gt;That was the gap this trust-case work set out to close.&lt;/p&gt;

&lt;p&gt;The goal was to create a public artifact that answers, in checkable form:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what ProofVault guarantees&lt;/li&gt;
&lt;li&gt;what it does not guarantee&lt;/li&gt;
&lt;li&gt;what evidence supports those claims&lt;/li&gt;
&lt;li&gt;how a third party can reproduce trust-critical output&lt;/li&gt;
&lt;li&gt;how release integrity is preserved when the environment changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What the trust case added
&lt;/h2&gt;

&lt;p&gt;The result is a trust dossier under &lt;code&gt;docs/trust-case/&lt;/code&gt; and a pinned specimen under &lt;code&gt;docs/trust-case/demo/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That package includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a bounded trust case&lt;/li&gt;
&lt;li&gt;an explicit threat model&lt;/li&gt;
&lt;li&gt;a verification walkthrough grounded in a real specimen&lt;/li&gt;
&lt;li&gt;a frozen demo case with pinned observed outputs&lt;/li&gt;
&lt;li&gt;automated regeneration and drift detection&lt;/li&gt;
&lt;li&gt;a CI workflow that enforces the specimen on GitHub's hosted runner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key point is not that these pieces exist individually.&lt;/p&gt;

&lt;p&gt;The key point is that they are connected.&lt;/p&gt;

&lt;p&gt;The repository can now say:&lt;/p&gt;

&lt;p&gt;Here is the specimen.&lt;br&gt;&lt;br&gt;
Here is how it is regenerated.&lt;br&gt;&lt;br&gt;
Here is what counts as expected output.&lt;br&gt;&lt;br&gt;
Here is how drift is detected.&lt;br&gt;&lt;br&gt;
Here is what tampering looks like.&lt;br&gt;&lt;br&gt;
Here is the exact release tree that passed hosted CI.&lt;br&gt;&lt;br&gt;
Here is the public tag tied to that proof.&lt;/p&gt;

&lt;p&gt;That is a different class of credibility than a sentence in a README.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the specimen mattered
&lt;/h2&gt;

&lt;p&gt;The pinned specimen changed the conversation.&lt;/p&gt;

&lt;p&gt;Instead of talking about integrity in the abstract, the trust case now includes a real export, a real proof manifest, real verification reports, real fingerprint data, and a real tampered case showing mismatch behavior.&lt;/p&gt;

&lt;p&gt;That shifts the burden of trust in an important way.&lt;/p&gt;

&lt;p&gt;The project no longer asks a reader to assume that the export path, manifest sealing, backup verification, and release process all fit together. It shows one exact instance of those things fitting together, and it gives the repository a way to notice when that example stops matching reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drift detection as enforcement
&lt;/h2&gt;

&lt;p&gt;A trust case without drift detection decays quickly.&lt;/p&gt;

&lt;p&gt;Once a specimen is checked in, the obvious risk is that future changes silently alter trust-critical output while the documentation continues to describe old behavior. That is how trust language collapses into theater.&lt;/p&gt;

&lt;p&gt;ProofVault avoids that by treating the specimen as a checked invariant.&lt;/p&gt;

&lt;p&gt;The local gate and the GitHub Actions workflow regenerate the specimen and compare it against the pinned outputs. If the trust-critical surface changes, the build fails until the change is explicitly reviewed and the specimen is intentionally updated.&lt;/p&gt;

&lt;p&gt;That matters because it binds trust claims to maintenance discipline. The trust case is not merely published once. It is kept under pressure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosted CI mattered more than local success
&lt;/h2&gt;

&lt;p&gt;One of the most important parts of this work happened after the local system already looked correct.&lt;/p&gt;

&lt;p&gt;The specimen was green on Windows. It was green under &lt;code&gt;TZ=UTC&lt;/code&gt;. It was green in a Linux clone under WSL.&lt;/p&gt;

&lt;p&gt;But GitHub's hosted runner still failed.&lt;/p&gt;

&lt;p&gt;That was the decisive moment.&lt;/p&gt;

&lt;p&gt;At that point, the responsible move was not to weaken the check, normalize away the problem, or assume CI was flaky. The responsible move was to treat the hosted runner as part of the real release surface and keep digging until the mismatch had a concrete explanation.&lt;/p&gt;

&lt;p&gt;A trust case that only passes on the author's machine is not yet a release artifact. It is still a local belief.&lt;/p&gt;

&lt;h2&gt;
  
  
  What had to be fixed
&lt;/h2&gt;

&lt;p&gt;The hosted mismatch surfaced three environment-sensitive faults in the specimen generation path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;timestamp rendering that depended on host-local presentation&lt;/li&gt;
&lt;li&gt;archive metadata that drifted across environments&lt;/li&gt;
&lt;li&gt;pinned specimen metadata that incorrectly stamped the live Node patch version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of those faults was fixed at source. The check stayed strict.&lt;/p&gt;

&lt;p&gt;The easiest way to get a green build would have been to weaken the invariant, normalize away the mismatch, or quietly stop comparing the unstable parts. That would have made the trust case look cleaner while making it less meaningful.&lt;/p&gt;

&lt;p&gt;Instead, the mismatches were traced and fixed where they originated.&lt;/p&gt;

&lt;p&gt;Temporary CI diagnostics were added only long enough to expose the hosted-runner disagreement, then removed before the final release tag was cut.&lt;/p&gt;

&lt;p&gt;That sequence matters as much as the fixes themselves. It shows that the release process was not green by accident. It was made legible under the same hosted surface the public repository actually depends on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why v1.0 and v1.0.1 both matter
&lt;/h2&gt;

&lt;p&gt;The release history is part of the trust case.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;proofvault-trust-case-v1.0&lt;/code&gt; remains the first public trust-case cut. It was not moved or rewritten after publication.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;proofvault-trust-case-v1.0.1&lt;/code&gt; exists because the project found and corrected real cross-environment specimen drift, proved the fixes on hosted CI, removed temporary diagnostics, and tagged the final non-debug tree.&lt;/p&gt;

&lt;p&gt;That preserves something important: provenance.&lt;/p&gt;

&lt;p&gt;Instead of silently rewriting the first tag, the project kept the original public cut intact and published a corrected release with a clear explanation of what changed.&lt;/p&gt;

&lt;p&gt;That is stronger than pretending the first release had been universally stable all along.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this proves
&lt;/h2&gt;

&lt;p&gt;This work does not prove that ProofVault solves every trust or security problem.&lt;/p&gt;

&lt;p&gt;It does prove that the project can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;define a bounded trust model&lt;/li&gt;
&lt;li&gt;connect that model to code and generated artifacts&lt;/li&gt;
&lt;li&gt;make tampering visible through a verifier path&lt;/li&gt;
&lt;li&gt;detect cross-environment drift in trust-critical output&lt;/li&gt;
&lt;li&gt;fix release-surface mismatches without weakening the invariant&lt;/li&gt;
&lt;li&gt;publish a public tag tied to an exact hosted-green tree&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the core of the trust case.&lt;/p&gt;

&lt;p&gt;ProofVault is no longer asking for trust on the strength of intent alone. It is carrying part of its own proof burden in the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters beyond one project
&lt;/h2&gt;

&lt;p&gt;This pattern is reusable.&lt;/p&gt;

&lt;p&gt;Any system that makes claims about privacy, integrity, recoverability, or verification can benefit from the same discipline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;define the bounded claim surface&lt;/li&gt;
&lt;li&gt;publish one reproducible specimen&lt;/li&gt;
&lt;li&gt;encode expected outputs&lt;/li&gt;
&lt;li&gt;treat drift as a first-class failure&lt;/li&gt;
&lt;li&gt;require the real release surface to pass, not just a local machine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For ProofVault, that makes the trust case a credibility pillar.&lt;/p&gt;

&lt;p&gt;More broadly, it provides a reference specimen for what doctrine looks like when it is translated into architecture, tests, CI, and release hygiene.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final release state
&lt;/h2&gt;

&lt;p&gt;The corrected public trust-case release is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;proofvault-trust-case-v1.0.1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The final hosted-green non-debug release commit is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dc5fbe9&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The original public cut remains:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;proofvault-trust-case-v1.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That is the final shape of the trust case.&lt;/p&gt;

&lt;p&gt;Not a statement of values, but a system that can show its work.&lt;/p&gt;




&lt;p&gt;If this kind of work interests you, the useful question is not just whether a product has security features.&lt;/p&gt;

&lt;p&gt;It is whether the product can make its trust claims legible, reproducible, and release-bound.&lt;br&gt;
&lt;strong&gt;Next up:&lt;/strong&gt; &lt;a href="https://dev.to/crisiscoresystems/protective-computing-is-not-privacy-theater-2job"&gt;https://dev.to/crisiscoresystems/protective-computing-is-not-privacy-theater-2job&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>security</category>
      <category>privacy</category>
      <category>showdev</category>
    </item>
    <item>
      <title>The Micro-Coercion of Speed: Why Friction Is an Engineering Prerequisite</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Sun, 08 Mar 2026 06:10:51 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/the-micro-coercion-of-speed-why-friction-is-an-engineering-prerequisite-g4j</link>
      <guid>https://forem.com/crisiscoresystems/the-micro-coercion-of-speed-why-friction-is-an-engineering-prerequisite-g4j</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Part 12 of &lt;strong&gt;Protective Computing in Practice&lt;/strong&gt; — Start here: &lt;a href="https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37"&gt;https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Modern software tools promise a simple future: remove friction, increase velocity, ship faster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Autocomplete, AI copilots, instant scaffolding—everything is designed to reduce the distance between thought and execution.&lt;/p&gt;

&lt;p&gt;On the surface this feels like progress.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want privacy-first, offline health tech to exist &lt;em&gt;without&lt;/em&gt; surveillance funding it: sponsor the build → &lt;a href="https://github.com/sponsors/CrisisCore-Systems" rel="noopener noreferrer"&gt;https://github.com/sponsors/CrisisCore-Systems&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But something subtle is happening inside that optimization.&lt;/p&gt;

&lt;p&gt;When tools remove all friction, they do not just make developers faster.&lt;/p&gt;

&lt;p&gt;They &lt;strong&gt;shift the burden of verification&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that shift creates a form of micro-coercion.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Illusion of Velocity
&lt;/h2&gt;

&lt;p&gt;Most engineering environments optimize for the &lt;strong&gt;fast path&lt;/strong&gt;: generating working code as quickly as possible.&lt;/p&gt;

&lt;p&gt;Tools like GitHub Copilot and Cursor collapse the time between an idea and implementation to almost zero.&lt;/p&gt;

&lt;p&gt;At first this feels empowering.&lt;/p&gt;

&lt;p&gt;But software development is not a single step called writing code.&lt;/p&gt;

&lt;p&gt;It is two cognitive processes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Generation&lt;/strong&gt; — producing possible solutions
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification&lt;/strong&gt; — proving those solutions are correct&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AI tooling accelerates generation dramatically.&lt;/p&gt;

&lt;p&gt;Verification, the process that protects system integrity, remains slow.&lt;/p&gt;

&lt;p&gt;Under fatigue, deadlines, or cognitive overload, the brain takes the easier path: if the code looks polished and confident, we assume it works.&lt;/p&gt;

&lt;p&gt;The tool stops being an assistant.&lt;/p&gt;

&lt;p&gt;It becomes an &lt;strong&gt;unverified authority&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is the micro-coercion of speed.&lt;/p&gt;

&lt;p&gt;Not an explicit demand, but a subtle pressure: accept the output, move forward, ship.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Cognitive Bypass
&lt;/h2&gt;

&lt;p&gt;Human cognition operates through two modes of reasoning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fast, intuitive pattern recognition
&lt;/li&gt;
&lt;li&gt;slow, deliberate verification
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Autocomplete systems are optimized to feed the first.&lt;/p&gt;

&lt;p&gt;When a block of code appears instantly—formatted, structured, seemingly coherent—it triggers a shortcut. The brain interprets polish as correctness.&lt;/p&gt;

&lt;p&gt;The burden of proof quietly moves.&lt;/p&gt;

&lt;p&gt;Instead of the tool proving the code is correct, the developer must prove that it is wrong.&lt;/p&gt;

&lt;p&gt;But proving something wrong requires effort: reading line by line, checking assumptions, tracing data flow, testing edge cases.&lt;/p&gt;

&lt;p&gt;When the system continuously offers new solutions faster than they can be verified, verification begins to collapse.&lt;/p&gt;

&lt;p&gt;The developer becomes less of an engineer and more of a &lt;strong&gt;passenger in their own system&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Physical World Standard
&lt;/h2&gt;

&lt;p&gt;Software engineering is unusual among engineering disciplines in one critical way: it often assumes the operator will behave perfectly.&lt;/p&gt;

&lt;p&gt;Mechanical, electrical, and industrial systems assume the opposite.&lt;/p&gt;

&lt;p&gt;They assume operators will be tired.&lt;br&gt;&lt;br&gt;
They assume shortcuts will be attempted.&lt;br&gt;&lt;br&gt;
They assume speed pressure will override caution.&lt;/p&gt;

&lt;p&gt;So they design systems where certain mistakes are &lt;strong&gt;physically impossible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In industrial maintenance this appears in practices such as lockout and tagout, formalized in standards like OSHA 29 CFR 1910.147. Machines must be physically isolated from power before service begins.&lt;/p&gt;

&lt;p&gt;The point is not trust.&lt;/p&gt;

&lt;p&gt;The point is eliminating the possibility of catastrophic error.&lt;/p&gt;

&lt;p&gt;Technicians know exactly what happens when speed overrides safeguards.&lt;/p&gt;

&lt;p&gt;Consider a pressure safety switch in a commercial refrigeration system. If pressure exceeds safe limits, the switch shuts the compressor down.&lt;/p&gt;

&lt;p&gt;A rushed technician can bypass that switch with a jumper wire. The compressor starts running again. The problem appears solved.&lt;/p&gt;

&lt;p&gt;For a moment.&lt;/p&gt;

&lt;p&gt;But the triggering pressure is still present. The compressor runs outside its safe envelope. Bearings overheat. Oil degrades. Failure arrives later.&lt;/p&gt;

&lt;p&gt;The shortcut did not remove the problem.&lt;/p&gt;

&lt;p&gt;It &lt;strong&gt;deferred the failure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Physical engineering disciplines treat this pattern as dangerous enough to embed prevention directly into system design: safety interlocks, pressure relief, thermal cutoffs, and keyed disconnects.&lt;/p&gt;

&lt;p&gt;Speed cannot bypass them.&lt;/p&gt;

&lt;p&gt;The system refuses to run until the safety model is satisfied.&lt;/p&gt;

&lt;p&gt;Software environments rarely enforce equivalent boundaries.&lt;/p&gt;

&lt;p&gt;Generated code can be accepted without verification. Critical assumptions can pass silently into production.&lt;/p&gt;

&lt;p&gt;The system runs.&lt;/p&gt;

&lt;p&gt;Just like the bypassed compressor.&lt;/p&gt;

&lt;p&gt;And failure appears later: under scale, unusual inputs, or the 3 AM incident where hidden assumptions collide with reality.&lt;/p&gt;

&lt;p&gt;In physical engineering this is &lt;strong&gt;operating outside the design envelope&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Software often calls it &lt;strong&gt;technical debt&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Systemic Failure Pattern
&lt;/h2&gt;

&lt;p&gt;The pattern created by velocity-optimized tooling can be visualized as a simple risk pipeline.&lt;/p&gt;

&lt;p&gt;When tools remove all cognitive friction, they do not just make developers faster.&lt;/p&gt;

&lt;p&gt;They subtly coerce them into accepting logic they have not fully verified because verifying it requires more effort than generating it.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;micro-coercion of speed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A UX pattern that prioritizes output over agency.&lt;/p&gt;

&lt;p&gt;When generation outruns verification, the developer stops being an engineer and becomes a &lt;strong&gt;passenger in their own system&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Designing Active Friction
&lt;/h2&gt;

&lt;p&gt;If physical engineering survives by enforcing interlocks, software must engineer &lt;strong&gt;cognitive interlocks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We cannot rely on developers always being rested, skeptical, and careful. Systems must introduce friction at the architectural level.&lt;/p&gt;

&lt;p&gt;Within the Overton Framework these mechanisms are called &lt;strong&gt;Protective Controls&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They are not intended to slow development.&lt;/p&gt;

&lt;p&gt;They protect system integrity from velocity pressure.&lt;/p&gt;




&lt;h3&gt;
  
  
  IDE Boundary Interlocks
&lt;/h3&gt;

&lt;p&gt;The development environment itself must enforce safety boundaries.&lt;/p&gt;

&lt;p&gt;Example: database queries require mandatory parameterization gates.&lt;/p&gt;

&lt;p&gt;If generated code attempts direct string interpolation, the IDE marks a red-zone violation and the build fails.&lt;/p&gt;

&lt;p&gt;Speed cannot bypass the safety model.&lt;/p&gt;

&lt;p&gt;The environment acts as an &lt;strong&gt;interlock&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Generation–Verification Separation
&lt;/h3&gt;

&lt;p&gt;In manufacturing, a new program does not run directly on production equipment.&lt;/p&gt;

&lt;p&gt;It is tested, simulated, and verified.&lt;/p&gt;

&lt;p&gt;AI-generated code should follow the same principle.&lt;/p&gt;

&lt;p&gt;Generation occurs in a sandbox.&lt;/p&gt;

&lt;p&gt;Integration requires explicit human checkpoints.&lt;/p&gt;

&lt;p&gt;The tool can propose solutions, but it cannot merge high-impact paths without deliberate approval.&lt;/p&gt;

&lt;p&gt;Before code enters the system, the developer must demonstrate understanding.&lt;/p&gt;




&lt;h3&gt;
  
  
  Cognitive Slow Paths
&lt;/h3&gt;

&lt;p&gt;Autocomplete amplifies fast intuition.&lt;/p&gt;

&lt;p&gt;Protective computing introduces &lt;strong&gt;slow paths&lt;/strong&gt; that deliberately engage analytical reasoning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;visual diff emphasis for generated blocks
&lt;/li&gt;
&lt;li&gt;commit gates requiring explanation of generated logic
&lt;/li&gt;
&lt;li&gt;contextual highlighting of sensitive data flows
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before code enters the system, the developer demonstrates ownership of the logic.&lt;/p&gt;

&lt;p&gt;Not because the tool is malicious.&lt;/p&gt;

&lt;p&gt;Because responsibility for the system belongs to the human operator.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Systemic Risk Model
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TD
  A[Velocity Pressure] --&amp;gt; B[AI Generation Speed]
  B --&amp;gt; C[Verification Gap]
  C --&amp;gt; D[System Risk]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TD
  E[Protective Computing] --&amp;gt; F[Cognitive Interlocks]
  F --&amp;gt; G[Forced Verification]
  G --&amp;gt; H[System Integrity]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Practitioner vs the Passenger
&lt;/h2&gt;

&lt;p&gt;Speed is not the enemy.&lt;/p&gt;

&lt;p&gt;But speed without understanding changes the role of the developer.&lt;/p&gt;

&lt;p&gt;When tools generate logic faster than it can be verified, ownership erodes. The codebase becomes something operated rather than understood.&lt;/p&gt;

&lt;p&gt;The developer becomes a passenger.&lt;/p&gt;

&lt;p&gt;Real engineering requires something else:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a mental model of the system&lt;/li&gt;
&lt;li&gt;a clear understanding of boundaries&lt;/li&gt;
&lt;li&gt;discipline to verify those boundaries hold&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Friction is not a flaw in that process.&lt;/p&gt;

&lt;p&gt;It is what protects it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next up:&lt;/strong&gt; &lt;a href="https://dev.to/crisiscoresystems/preview-mode-first-agent-plans-as-prs-plan-diff-invariants-4ikd"&gt;https://dev.to/crisiscoresystems/preview-mode-first-agent-plans-as-prs-plan-diff-invariants-4ikd&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Support this work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sponsor the project (primary): &lt;a href="https://github.com/sponsors/CrisisCore-Systems" rel="noopener noreferrer"&gt;https://github.com/sponsors/CrisisCore-Systems&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Star the repo (secondary): &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;https://github.com/CrisisCore-Systems/pain-tracker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Read the full series from the start: (link)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>architecture</category>
      <category>devops</category>
    </item>
    <item>
      <title>Architecting for Vulnerability: Introducing Protective Computing Core v1.0</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Fri, 06 Mar 2026 04:55:40 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/architecting-for-vulnerability-introducing-protective-computing-core-v10-91g</link>
      <guid>https://forem.com/crisiscoresystems/architecting-for-vulnerability-introducing-protective-computing-core-v10-91g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Part 11 of &lt;strong&gt;Protective Computing in Practice&lt;/strong&gt; — Start here: &lt;a href="https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37"&gt;https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37&lt;/a&gt;&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;Most software is built on a dangerous premise: the Stability Assumption.&lt;/p&gt;

&lt;p&gt;We assume the user has a stable network, stable cognitive capacity, a secure physical environment, and institutional trust. When those conditions hold, modern cloud native architecture works beautifully.&lt;/p&gt;

&lt;p&gt;But when people enter a vulnerability state, the Stability Assumption collapses. Cloud dependent apps lock people out of their own data. Helpful auto sync features broadcast metadata from compromised networks. Irreversible actions happen when someone does not have the attention or time to read a modal carefully.&lt;/p&gt;

&lt;p&gt;Here is the part we do not say out loud enough. In a crisis, software does not just fail. It can become coercive. You get logged out, you cannot recover the account, your data is suddenly somewhere else, and the only path forward is to comply with whatever the system demands.&lt;/p&gt;

&lt;p&gt;We need a systems engineering discipline for designing software under conditions of human vulnerability.&lt;/p&gt;

&lt;p&gt;Today, I am open sourcing Protective Computing Core v1.0.&lt;/p&gt;

&lt;p&gt;The formal structural paper for the discipline is now published as the Protective Computing Canon v1.0.&lt;/p&gt;

&lt;p&gt;Overton, K. (2026). &lt;em&gt;Protective Computing Canon v1.0: A Structural Map of the Discipline.&lt;/em&gt;&lt;br&gt;&lt;br&gt;
Protective Computing Community.&lt;br&gt;&lt;br&gt;
DOI: &lt;a href="https://doi.org/10.5281/zenodo.18887610" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.18887610&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Boundary notes, because truth matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This is not medical advice.&lt;/li&gt;
&lt;li&gt;This is not a regulatory compliance claim.&lt;/li&gt;
&lt;li&gt;This is not a claim of perfect security.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What is Protective Computing?
&lt;/h2&gt;

&lt;p&gt;Protective Computing is not a privacy manifesto. It is a strict, testable engineering discipline.&lt;/p&gt;

&lt;p&gt;It provides a formal vocabulary and a pattern library for building systems that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;degrade safely&lt;/li&gt;
&lt;li&gt;contain failures locally&lt;/li&gt;
&lt;li&gt;defend user agency under asymmetric power conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The v1.0 Core introduces a normative specification (MUST, SHOULD, MUST NOT), plus a conformance model you can actually review.&lt;/p&gt;

&lt;p&gt;Read the spec here:&lt;br&gt;&lt;br&gt;
&lt;a href="https://protective-computing.github.io/docs/spec/v1.0.html" rel="noopener noreferrer"&gt;https://protective-computing.github.io/docs/spec/v1.0.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The core pillars
&lt;/h2&gt;

&lt;p&gt;Protective Computing Core is built around four pillars. Each one exists because a specific failure pattern keeps hurting people.&lt;/p&gt;
&lt;h3&gt;
  
  
  1) Local Authority Pattern
&lt;/h3&gt;

&lt;p&gt;The system MUST preserve user authority over locally stored critical data in the absence of network connectivity. Network transport is treated as an optional enhancement, not a dependency for essential utility.&lt;/p&gt;

&lt;p&gt;What this prevents: the classic offline lie where the app looks usable, but the moment the network drops the user loses access to their own records.&lt;/p&gt;
&lt;h3&gt;
  
  
  2) Exposure Surface Minimization
&lt;/h3&gt;

&lt;p&gt;The system MUST NOT increase its exposure surface during crisis state escalation. Analytics, third party telemetry, and remote logging are default off and hard gated.&lt;/p&gt;

&lt;p&gt;What this prevents: silent data exhaust during the exact window when a user is least able to notice, consent, or defend themselves.&lt;/p&gt;
&lt;h3&gt;
  
  
  3) Reversible State Pattern
&lt;/h3&gt;

&lt;p&gt;The system MUST NOT introduce irreversible state transitions during declared vulnerability states unless explicitly confirmed. High impact destructive actions require bounded restoration windows where security invariants allow.&lt;/p&gt;

&lt;p&gt;What this prevents: permanent harm caused by a single misclick, mistype, or foggy moment.&lt;/p&gt;
&lt;h3&gt;
  
  
  4) Explicit Degradation Modes
&lt;/h3&gt;

&lt;p&gt;The system cannot just go offline. It MUST define explicit degradation modes (Connectivity Degradation, Cognitive Degradation, Institutional Latency) and map how essential utility is preserved in each state.&lt;/p&gt;

&lt;p&gt;What this prevents: ambiguous failure where nobody knows what is safe, what is unavailable, and what the system is doing behind the scenes.&lt;/p&gt;
&lt;h2&gt;
  
  
  The reference implementation: PainTracker
&lt;/h2&gt;

&lt;p&gt;To prove these patterns are implementable in standard web technologies, I built a reference implementation:&lt;br&gt;&lt;br&gt;
&lt;a href="https://paintracker.ca" rel="noopener noreferrer"&gt;https://paintracker.ca&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PainTracker is an offline first PWA designed for users tracking chronic health data, a highly sensitive payload often logged during high cognitive or physical distress.&lt;/p&gt;

&lt;p&gt;Instead of a traditional SaaS architecture, PainTracker implements Protective Computing through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encrypted IndexedDB persistence (primary database lives on device)&lt;/li&gt;
&lt;li&gt;Zero knowledge vault gating (local security boundary, no remote auth dependency)&lt;/li&gt;
&lt;li&gt;Unlock only bounded reversibility (pending wipe window that only a successful unlock can abort)&lt;/li&gt;
&lt;li&gt;Hard telemetry gating (verifiable kill switch for outbound requests not explicitly initiated by the user)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repo:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;https://github.com/CrisisCore-Systems/pain-tracker&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Example: bounded reversibility without weakening security
&lt;/h2&gt;

&lt;p&gt;Standard security dictates that after N failed unlock attempts, a local vault should wipe.&lt;/p&gt;

&lt;p&gt;But under cognitive overload, people mistype passwords. An immediate wipe causes irreversible loss. A generic cancel button weakens brute force resistance.&lt;/p&gt;

&lt;p&gt;Protective Computing requires a bounded restoration window that does not weaken the security invariant.&lt;/p&gt;

&lt;p&gt;Here is the shape of the solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Bounded reversibility under asymmetric power defense&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleFailedUnlock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;failedAttempts&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;failedAttempts&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;MAX_FAILED_UNLOCK_ATTEMPTS&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;privacySettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vaultKillSwitchEnabled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// 1) Enter a bounded degradation state&lt;/span&gt;
    &lt;span class="c1"&gt;// 2) Disclose the pending irreversible action&lt;/span&gt;
    &lt;span class="c1"&gt;// 3) Only a successful cryptographic unlock can abort the timer&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;enterPendingWipeState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;windowMs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;failed_unlock_threshold&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;onExpire&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;executeEmergencyWipe&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;showWarning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Vault will wipe in 10s. Enter correct passphrase to abort.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the constraint. There is no cancelWipe() function exposed to the UI. The only path to reversibility is proving local authority.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stateDiagram-v2
  [*] --&amp;gt; Normal
  Normal --&amp;gt; PendingWipe: N failed unlocks &amp;amp; kill switch enabled
  PendingWipe --&amp;gt; Normal: successful unlock within window
  PendingWipe --&amp;gt; Wiped: window expired
  Wiped --&amp;gt; [*]
  note right of PendingWipe: user sees warning UI
  note right of Normal: regular operation
  note right of Wiped: data erased
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Measuring posture: the Protective Legitimacy Score (PLS)
&lt;/h2&gt;

&lt;p&gt;In this space, marketing claims like military grade encryption or secure by design are useless. Engineers and regulators need auditable transparency.&lt;/p&gt;

&lt;p&gt;Alongside the Core spec, I am publishing a measurement instrument called the Protective Legitimacy Score (PLS). PLS is not a certification. It is a structured disclosure format that forces maintainers to state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what vulnerability conditions they assume&lt;/li&gt;
&lt;li&gt;what compliance level they claim&lt;/li&gt;
&lt;li&gt;what they do not claim&lt;/li&gt;
&lt;li&gt;where they deviate, and why&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PLS rubric (PDF):&lt;br&gt;
&lt;a href="https://protective-computing.github.io/PLS_RUBRIC_v1_0_rc1.pdf" rel="noopener noreferrer"&gt;https://protective-computing.github.io/PLS_RUBRIC_v1_0_rc1.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Audit evidence index:&lt;br&gt;
&lt;a href="https://github.com/protective-computing/protective-computing.github.io/blob/main/AUDIT_EVIDENCE.md" rel="noopener noreferrer"&gt;https://github.com/protective-computing/protective-computing.github.io/blob/main/AUDIT_EVIDENCE.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Compliance audit matrix:&lt;br&gt;
&lt;a href="https://github.com/protective-computing/protective-computing.github.io/blob/main/COMPLIANCE_AUDIT_MATRIX.md" rel="noopener noreferrer"&gt;https://github.com/protective-computing/protective-computing.github.io/blob/main/COMPLIANCE_AUDIT_MATRIX.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal is simple: replace vibes with checkable posture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The call for Reference Implementation B
&lt;/h2&gt;

&lt;p&gt;PainTracker proves the discipline works for localized health telemetry. But Protective Computing is domain agnostic.&lt;/p&gt;

&lt;p&gt;These patterns are exactly what is needed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;disaster response cache applications&lt;/li&gt;
&lt;li&gt;coercion resistant messaging interfaces&lt;/li&gt;
&lt;li&gt;offline first journalistic tooling&lt;/li&gt;
&lt;li&gt;legal aid and housing workflows under institutional delay&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to contribute, here is the most useful path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read the spec v1.0: &lt;a href="https://protective-computing.github.io/docs/spec/v1.0.html" rel="noopener noreferrer"&gt;https://protective-computing.github.io/docs/spec/v1.0.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pick one requirement you think is wrong, too vague, or unbuildable.&lt;/li&gt;
&lt;li&gt;Submit a review with a concrete counterexample and a better verification procedure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Review invitation:&lt;br&gt;
&lt;a href="https://protective-computing.github.io/docs/independent-review.html" rel="noopener noreferrer"&gt;https://protective-computing.github.io/docs/independent-review.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Independent review checklist:&lt;br&gt;
&lt;a href="https://github.com/protective-computing/protective-computing.github.io/blob/main/INDEPENDENT_REVIEW_CHECKLIST.md" rel="noopener noreferrer"&gt;https://github.com/protective-computing/protective-computing.github.io/blob/main/INDEPENDENT_REVIEW_CHECKLIST.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I do not need agreement. I need pressure testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Canonical archive (Zenodo)
&lt;/h2&gt;

&lt;p&gt;If you want the citable artifacts and stable versions, Protective Computing is archived as a Zenodo community. This is the cleanest place to reference exact releases without link rot.&lt;/p&gt;

&lt;p&gt;Community:&lt;br&gt;
&lt;a href="https://zenodo.org/communities/protective-computing/records" rel="noopener noreferrer"&gt;https://zenodo.org/communities/protective-computing/records&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Canonical paper (Protective Computing Canon v1.0):&lt;br&gt;
&lt;a href="https://doi.org/10.5281/zenodo.18887610" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.18887610&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Field Guide v0.1:&lt;br&gt;
&lt;a href="https://doi.org/10.5281/zenodo.18782339" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.18782339&lt;/a&gt;&lt;br&gt;
Part of the Protective Computing corpus. Canonical paper:&lt;br&gt;
&lt;a href="https://doi.org/10.5281/zenodo.18887610" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.18887610&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PLS rubric DOI:&lt;br&gt;
&lt;a href="https://doi.org/10.5281/zenodo.18783432" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.18783432&lt;/a&gt;&lt;br&gt;
Layer-3 document; canonical paper:&lt;br&gt;
&lt;a href="https://doi.org/10.5281/zenodo.18887610" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.18887610&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start here, and support the work if it helped
&lt;/h2&gt;

&lt;p&gt;Fastest route through the catalog (series index):&lt;br&gt;
&lt;a href="https://dev.to/crisiscoresystems/start-here-paintracker-crisiscore-build-log-privacy-first-offline-first-no-surveillance-3h0k"&gt;https://dev.to/crisiscoresystems/start-here-paintracker-crisiscore-build-log-privacy-first-offline-first-no-surveillance-3h0k&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sponsor the build (keeps it independent of surveillance funding):&lt;br&gt;
&lt;a href="https://github.com/sponsors/CrisisCore-Systems" rel="noopener noreferrer"&gt;https://github.com/sponsors/CrisisCore-Systems&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Star the repo:&lt;br&gt;
&lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;https://github.com/CrisisCore-Systems/pain-tracker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we change the architectural defaults, we can stop building software that breaks exactly when people need it most.&lt;br&gt;
&lt;strong&gt;Next up:&lt;/strong&gt; &lt;a href="https://dev.to/crisiscoresystems/the-micro-coercion-of-speed-why-friction-is-an-engineering-prerequisite-g4j"&gt;https://dev.to/crisiscoresystems/the-micro-coercion-of-speed-why-friction-is-an-engineering-prerequisite-g4j&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Next up:&lt;/strong&gt; &lt;a href="https://dev.to/crisiscoresystems/the-micro-coercion-of-speed-why-friction-is-an-engineering-prerequisite-g4j"&gt;https://dev.to/crisiscoresystems/the-micro-coercion-of-speed-why-friction-is-an-engineering-prerequisite-g4j&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>privacy</category>
      <category>offlinefirst</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Preview Mode First: Agent Plans as PRs (Plan Diff + Invariants)</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Thu, 05 Mar 2026 19:38:03 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/preview-mode-first-agent-plans-as-prs-plan-diff-invariants-4ikd</link>
      <guid>https://forem.com/crisiscoresystems/preview-mode-first-agent-plans-as-prs-plan-diff-invariants-4ikd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Part 13 of &lt;strong&gt;Protective Computing in Practice&lt;/strong&gt; — Start here: &lt;a href="https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37"&gt;https://dev.to/crisiscoresystems/testing-privacy-preserving-analytics-verifying-that-insights-dont-leak-identity-e37&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;If you’re using AI agents in delivery workflows, the safest default is not “let it run.”&lt;br&gt;
It’s &lt;strong&gt;Preview Mode First&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Think of every agent run as a PR proposal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it has a plan&lt;/li&gt;
&lt;li&gt;it has a diff&lt;/li&gt;
&lt;li&gt;it must satisfy invariants before merge&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want privacy-first, offline health tech to exist &lt;em&gt;without&lt;/em&gt; surveillance funding it: sponsor the build → &lt;a href="https://github.com/sponsors/CrisisCore-Systems" rel="noopener noreferrer"&gt;https://github.com/sponsors/CrisisCore-Systems&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That frame makes agentic work auditable, discussable, and reversible.&lt;/p&gt;




&lt;h2&gt;
  
  
  The mantra
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Permissions cannot increase. Network scope cannot widen.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Say it before shipping. Enforce it in automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Minimal schema
&lt;/h2&gt;

&lt;p&gt;Keep the schema small enough to reason about in review.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"runId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"baseCommit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"create|update|delete|exec"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"path-or-command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"justification"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"planDiff"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"added"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"plan-step-id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"changed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"plan-step-id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"removed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"plan-step-id"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"invariants"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"permissionsCannotIncrease"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"networkScopeCannotWiden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tests"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"command + status"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"staticChecks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"command + status"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"policyChecks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"rule + status"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your agent protocol can’t produce something this clear, that’s your first design bug.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example plan diff
&lt;/h2&gt;

&lt;p&gt;Here’s a practical diff reviewers can evaluate in under a minute.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="p"&gt;Agent Plan v12 -&amp;gt; v13
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ [P-104] update src/policy/invariants.ts
+ [P-105] add test src/test/invariants/network-scope.test.ts
&lt;/span&gt;~ [P-099] exec "npm run test" -&amp;gt; "npm run test -- --run src/test/invariants/*.test.ts"
&lt;span class="gd"&gt;- [P-087] exec "npm run deploy:preview"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Interpretation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added: explicit invariant implementation + targeted tests&lt;/li&gt;
&lt;li&gt;Changed: narrower test scope for faster signal during review&lt;/li&gt;
&lt;li&gt;Removed: deployment action from preview stage (good boundary)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what “agent plan as PR” should look like: plain, scoped, and reviewable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Invariant report (pass/fail)
&lt;/h2&gt;

&lt;p&gt;Make the report machine-readable and human-legible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;runId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;run_2026_03_05_1422&lt;/span&gt;
&lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fail&lt;/span&gt;
&lt;span class="na"&gt;invariants&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;permissions_cannot_increase&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pass&lt;/span&gt;
    &lt;span class="na"&gt;evidence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;new&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;OAuth&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scopes"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;RBAC&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;delta"&lt;/span&gt;
  &lt;span class="na"&gt;network_scope_cannot_widen&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fail&lt;/span&gt;
    &lt;span class="na"&gt;evidence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;new&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;outbound&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;host:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;api.newvendor.example"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;egress&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;policy&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;updated&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;allowlist[3]&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;allowlist[4]"&lt;/span&gt;
&lt;span class="na"&gt;blocking&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;network&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scope&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;widened&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;during&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;preview"&lt;/span&gt;
&lt;span class="na"&gt;required_actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;remove&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;new&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;host&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;egress&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;allowlist"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;re-run&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;invariant&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;checks"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A failed invariant is not “feedback.”&lt;br&gt;
It is a merge blocker.&lt;/p&gt;




&lt;h2&gt;
  
  
  The point
&lt;/h2&gt;

&lt;p&gt;Agents don’t fail because they’re malicious.&lt;br&gt;
They fail because they follow instructions in a messy world.&lt;/p&gt;

&lt;p&gt;Preview mode gives you a pause.&lt;br&gt;
Plan diffs show you what changed.&lt;br&gt;
Invariants stop the run when it crosses a line.&lt;/p&gt;

&lt;p&gt;That’s the whole trick.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick reply you can reuse
&lt;/h2&gt;

&lt;p&gt;If someone asks how you keep agents safe in practice, here’s the short version:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Treat agent runs like PRs: Preview first, system-computed plan diff, invariant report, then merge.&lt;br&gt;&lt;br&gt;
Mantra: permissions cannot increase / network scope cannot widen.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If AI agents are in your software supply chain, policy has to be executable.&lt;br&gt;
Preview Mode First is how you keep that true under pressure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next up:&lt;/strong&gt; &lt;a href="https://dev.to/crisiscoresystems/how-proofvault-turned-trust-from-a-documentation-claim-into-a-reproducible-release-artifact-22pb"&gt;https://dev.to/crisiscoresystems/how-proofvault-turned-trust-from-a-documentation-claim-into-a-reproducible-release-artifact-22pb&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Support this work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sponsor the project (primary): &lt;a href="https://github.com/sponsors/CrisisCore-Systems" rel="noopener noreferrer"&gt;https://github.com/sponsors/CrisisCore-Systems&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Star the repo (secondary): &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;https://github.com/CrisisCore-Systems/pain-tracker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Read the full series from the start: (link)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>devops</category>
      <category>privacy</category>
    </item>
    <item>
      <title>WorkSafeBC Claim Documentation Workflow in PainTracker Pro Composite Example</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Tue, 03 Mar 2026 17:09:00 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/how-pain-tracker-pro-streamlines-worksafebc-claims-a-composite-case-study-4ce8</link>
      <guid>https://forem.com/crisiscoresystems/how-pain-tracker-pro-streamlines-worksafebc-claims-a-composite-case-study-4ce8</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://blog.paintracker.ca/worksafe-bc-case-study-documentation-time-savings" rel="noopener noreferrer"&gt;https://blog.paintracker.ca/worksafe-bc-case-study-documentation-time-savings&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;If you want privacy-first, offline health tech to exist &lt;em&gt;without&lt;/em&gt; surveillance funding it: sponsor the build → &lt;a href="https://paintracker.ca/sponsor" rel="noopener noreferrer"&gt;https://paintracker.ca/sponsor&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.producthunt.com/products/pain-tracker?utm_source=badge-featured&amp;amp;utm_medium=badge&amp;amp;utm_campaign=badge-pain-tracker" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.producthunt.com%2Fwidgets%2Fembed-image%2Fv1%2Ffeatured.svg%3Fpost_id%3D1063103%26theme%3Dlight" alt="Pain Tracker - Privacy-first PWA for chronic pain tracking &amp;amp; management | Product Hunt" width="250" height="54"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Read this second: this case study is the worked example.&lt;br&gt;
For the full reading path, start here: &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/blog-worksafebc-documentation-workflows-start-here.md" rel="noopener noreferrer"&gt;WorkSafeBC Documentation Workflows: Start Here&lt;/a&gt;&lt;br&gt;
Read first: &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-07-worksafebc-oriented-workflows-careful-language.md" rel="noopener noreferrer"&gt;WorkSafeBC-oriented workflows without overclaims: structured summaries, careful language&lt;/a&gt;&lt;br&gt;
For the export boundary behind the download step itself, see &lt;a href="https://dev.to/crisiscoresystems/exports-are-a-security-boundary-the-moment-local-first-becomes-shareable-5ee4"&gt;Exports are a security boundary&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Support this work
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Sponsor the project (primary): &lt;a href="https://paintracker.ca/sponsor" rel="noopener noreferrer"&gt;https://paintracker.ca/sponsor&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Star the repo (secondary): &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;https://github.com/CrisisCore-Systems/pain-tracker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Read the full series from the start: (link)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Maintaining truthful docs over time: how to keep security claims honest</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Thu, 26 Feb 2026 17:06:00 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/maintaining-truthful-docs-over-time-how-to-keep-security-claims-honest-2778</link>
      <guid>https://forem.com/crisiscoresystems/maintaining-truthful-docs-over-time-how-to-keep-security-claims-honest-2778</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Part 10 of &lt;strong&gt;Protective Computing in Practice&lt;/strong&gt; — Start here: &lt;a href="https://dev.to/crisiscoresystems/offline-first-without-a-backend-a-local-first-pwa-architecture-you-can-trust-3j15"&gt;https://dev.to/crisiscoresystems/offline-first-without-a-backend-a-local-first-pwa-architecture-you-can-trust-3j15&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Series:&lt;/strong&gt; &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-00-start-here.md" rel="noopener noreferrer"&gt;Start here&lt;/a&gt; · &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-01-offline-first-local-first-architecture.md" rel="noopener noreferrer"&gt;Part 1&lt;/a&gt; · &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-02-three-storage-layers-state-cache-offline-db-encrypted-vault.md" rel="noopener noreferrer"&gt;Part 2&lt;/a&gt; · &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-03-service-workers-that-dont-surprise-you.md" rel="noopener noreferrer"&gt;Part 3&lt;/a&gt; · &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-04-zod-defensive-parsing.md" rel="noopener noreferrer"&gt;Part 4&lt;/a&gt; · &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-05-trauma-informed-ux-accessibility-as-architecture.md" rel="noopener noreferrer"&gt;Part 5&lt;/a&gt; · &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-06-exports-as-a-security-boundary.md" rel="noopener noreferrer"&gt;Part 6&lt;/a&gt; · &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-07-worksafebc-oriented-workflows-careful-language.md" rel="noopener noreferrer"&gt;Part 7&lt;/a&gt; · &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-08-analytics-without-surveillance-explicit-consent.md" rel="noopener noreferrer"&gt;Part 8&lt;/a&gt; · &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-09-quality-gates-that-earn-trust.md" rel="noopener noreferrer"&gt;Part 9&lt;/a&gt; · &lt;strong&gt;Part 10&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This post is Part 10 in a Dev.to series grounded in the open-source &lt;strong&gt;Pain Tracker&lt;/strong&gt; repo.&lt;/p&gt;

&lt;p&gt;For the full reading path around this trust layer, start with &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/blog-documentation-integrity-verifiable-trust-start-here.md" rel="noopener noreferrer"&gt;Documentation Integrity / Verifiable Trust: Start Here&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want privacy-first, offline health tech to exist &lt;em&gt;without&lt;/em&gt; surveillance funding it: sponsor the build → &lt;a href="https://paintracker.ca/sponsor" rel="noopener noreferrer"&gt;https://paintracker.ca/sponsor&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This works best as Part 2 of a 2-post trust-and-verifiability pair.&lt;br&gt;
Read first: &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-09-quality-gates-that-earn-trust.md" rel="noopener noreferrer"&gt;Quality gates that earn trust&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Together with &lt;a href="https://dev.to/crisiscoresystems/how-proofvault-turned-trust-from-a-documentation-claim-into-a-reproducible-release-artifact-22pb"&gt;How ProofVault turned trust from a documentation claim into a reproducible release artifact&lt;/a&gt; and &lt;a href="https://dev.to/crisiscoresystems/preview-mode-first-agent-plans-as-prs-plan-diff-invariants-4ikd"&gt;Preview Mode First&lt;/a&gt;, this forms the Documentation Integrity / Verifiable Trust reading path.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not medical advice.&lt;/li&gt;
&lt;li&gt;Not a compliance claim.&lt;/li&gt;
&lt;li&gt;This is about preventing doc drift from turning into false security promises.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Docs drift is inevitable — unless you design against it
&lt;/h2&gt;

&lt;p&gt;Every repo accumulates drift:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;features change, docs don’t&lt;/li&gt;
&lt;li&gt;defaults change, READMEs don’t&lt;/li&gt;
&lt;li&gt;“temporary” flags become permanent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In privacy/security contexts, drift is worse than being outdated.&lt;/p&gt;

&lt;p&gt;It becomes misinformation.&lt;/p&gt;

&lt;p&gt;So the goal isn’t “write perfect docs.”&lt;/p&gt;

&lt;p&gt;The goal is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep docs anchored to things you can &lt;em&gt;verify&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The trick: write docs that point to proof
&lt;/h2&gt;

&lt;p&gt;When you say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“offline-first”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Point to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;service worker scripts&lt;/li&gt;
&lt;li&gt;the offline DB layer&lt;/li&gt;
&lt;li&gt;tests that verify offline behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“validated inputs”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Point to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;schemas&lt;/li&gt;
&lt;li&gt;tests that prove invalid inputs fail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“quality gates exist”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Point to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;npm run check&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm run security-full&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm run accessibility:scan&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pain Tracker’s documentation style leans this way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;architecture docs under &lt;code&gt;docs/engineering/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;explicit indexes like &lt;code&gt;docs/index/accessibility.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;runnable scripts in &lt;code&gt;package.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a concrete example of this pattern becoming a release artifact instead of a writing guideline, read &lt;a href="https://dev.to/crisiscoresystems/how-proofvault-turned-trust-from-a-documentation-claim-into-a-reproducible-release-artifact-22pb"&gt;How ProofVault turned trust from a documentation claim into a reproducible release artifact&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Automate doc validation when you can
&lt;/h2&gt;

&lt;p&gt;The repo includes a docs validation script:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;npm run docs:validate&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That doesn’t “prove the docs are true,” but it does catch classes of breakage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;missing references&lt;/li&gt;
&lt;li&gt;structure drift&lt;/li&gt;
&lt;li&gt;formatting assumptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point is to make “keep docs healthy” an explicit, repeatable action.&lt;/p&gt;




&lt;h2&gt;
  
  
  Separate claims from guarantees
&lt;/h2&gt;

&lt;p&gt;A good rule for security docs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;describe what the code does&lt;/li&gt;
&lt;li&gt;avoid implying it solves threats it doesn’t&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples of safe phrasing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“data stays local unless the user exports it” (if exports are explicit)&lt;/li&gt;
&lt;li&gt;“analytics is gated behind an environment flag” (if the gate exists)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples of risky phrasing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“secure” (without scope)&lt;/li&gt;
&lt;li&gt;“compliant” (without a legal program)&lt;/li&gt;
&lt;li&gt;“protected from attackers” (without a threat model)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Truthful docs don’t undersell the work.&lt;/p&gt;

&lt;p&gt;They just don’t overpromise.&lt;/p&gt;




&lt;h2&gt;
  
  
  Use the repo’s own publishing tools to keep content consistent
&lt;/h2&gt;

&lt;p&gt;Pain Tracker ships scripts to help keep Dev.to content in sync:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;npm run devto:dry-run&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm run devto:sync-content&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm run devto:sync-titles&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The meta-lesson: publishing should be a process, not a one-time copy/paste.&lt;/p&gt;

&lt;p&gt;When that publishing flow includes agents, the same posture applies before content goes live: &lt;a href="https://dev.to/crisiscoresystems/preview-mode-first-agent-plans-as-prs-plan-diff-invariants-4ikd"&gt;Preview Mode First: Agent Plans as PRs (Plan Diff + Invariants)&lt;/a&gt; is the matching guardrail on the delivery side.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrap-up
&lt;/h2&gt;

&lt;p&gt;If you only take one thing from this series:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make your claims testable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s how you build trust without pretending to be perfect.&lt;/p&gt;

&lt;p&gt;Prev: &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker/blob/main/docs/content/blog/devto-series-09-quality-gates-that-earn-trust.md" rel="noopener noreferrer"&gt;Part 9 — Quality gates that earn trust&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next up:&lt;/strong&gt; &lt;a href="https://dev.to/crisiscoresystems/the-stability-assumption-the-hidden-defect-source-5cpd"&gt;https://dev.to/crisiscoresystems/the-stability-assumption-the-hidden-defect-source-5cpd&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Support this work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sponsor the project (primary): &lt;a href="https://paintracker.ca/sponsor" rel="noopener noreferrer"&gt;https://paintracker.ca/sponsor&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Star the repo (secondary): &lt;a href="https://github.com/CrisisCore-Systems/pain-tracker" rel="noopener noreferrer"&gt;https://github.com/CrisisCore-Systems/pain-tracker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Read the full series from the start: (link)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>documentation</category>
      <category>security</category>
      <category>softwareengineering</category>
      <category>writing</category>
    </item>
    <item>
      <title>Field Guide v0.1 What is inside and where to start</title>
      <dc:creator>CrisisCore-Systems</dc:creator>
      <pubDate>Thu, 26 Feb 2026 08:54:00 +0000</pubDate>
      <link>https://forem.com/crisiscoresystems/field-guide-v01-is-live-3f0a</link>
      <guid>https://forem.com/crisiscoresystems/field-guide-v01-is-live-3f0a</guid>
      <description>&lt;p&gt;Field Guide v0.1 is live. This post explains what is inside, who it is for, and where to start if you are new to the project. If you want the full reading path first, open Start Here and then return to this post for section level detail.&lt;/p&gt;

&lt;p&gt;Summary A quick map of Field Guide v0.1 with entry points for new readers and clear next reads.&lt;/p&gt;

&lt;h1&gt;
  
  
  Field Guide v0.1 is Live
&lt;/h1&gt;

&lt;p&gt;Protective Computing now has a second citable artifact.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Foundation artifact: &lt;strong&gt;The Overton Framework v1.3&lt;/strong&gt; (DOI: &lt;a href="https://doi.org/10.5281/zenodo.18688516" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.18688516&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Practice artifact: &lt;strong&gt;Field Guide v0.1&lt;/strong&gt; (DOI: &lt;a href="https://doi.org/10.5281/zenodo.18782339" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.18782339&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this release matters
&lt;/h2&gt;

&lt;p&gt;The Overton Framework defines the doctrine and constraints.&lt;br&gt;
The Field Guide operationalizes those constraints for systems engineers implementing real systems under hostile and degraded conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relationship to v1.3
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v1.3 (Overton Framework):&lt;/strong&gt; normative posture and principle-level architecture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v0.1 (Field Guide):&lt;/strong&gt; implementation-facing execution companion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together they provide a clearer bridge from principle to engineering practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Call for case studies
&lt;/h2&gt;

&lt;p&gt;We are now collecting implementation case studies from teams building in vulnerability contexts (health, crisis response, journalism, civil society, public-interest tooling).&lt;/p&gt;

&lt;p&gt;What to share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;threat context and operating constraints,&lt;/li&gt;
&lt;li&gt;architecture decisions tied to principles,&lt;/li&gt;
&lt;li&gt;verification evidence (pass/fail outcomes),&lt;/li&gt;
&lt;li&gt;failures and lessons learned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/protective-computing/protective-computing.github.io" rel="noopener noreferrer"&gt;https://github.com/protective-computing/protective-computing.github.io&lt;/a&gt;&lt;br&gt;
Site: &lt;a href="https://protective-computing.github.io/" rel="noopener noreferrer"&gt;https://protective-computing.github.io/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you deploy Protective Computing in production or field conditions, we welcome independent review and reproducible evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to read next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/crisiscoresystems/start-here-paintracker-crisiscore-build-log-privacy-first-offline-first-no-surveillance-3h0k"&gt;Start Here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/crisiscoresystems/architecting-for-vulnerability-introducing-protective-computing-core-v10-5edd"&gt;Protective Computing Core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/crisiscoresystems/quality-gates-that-earn-trust-checks-you-can-run-not-promises-you-cant-58a3"&gt;Quality gates and evidence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>security</category>
      <category>documentation</category>
    </item>
  </channel>
</rss>
