<?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>DEV Community: FrozonFreak</title>
    <description>The latest articles on DEV Community by FrozonFreak (@frozonfreak).</description>
    <link>https://dev.to/frozonfreak</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4119175%2Fb0030d26-db2b-45c8-aaa9-c4ac40bdad48.png</url>
      <title>DEV Community: FrozonFreak</title>
      <link>https://dev.to/frozonfreak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/frozonfreak"/>
    <language>en</language>
    <item>
      <title>The Web HIG: a versioned behavioral contract for humans, CI, and AI agents</title>
      <dc:creator>FrozonFreak</dc:creator>
      <pubDate>Thu, 10 Sep 2026 11:16:10 +0000</pubDate>
      <link>https://dev.to/frozonfreak/the-web-hig-a-versioned-behavioral-contract-for-humans-ci-and-ai-agents-1cbe</link>
      <guid>https://dev.to/frozonfreak/the-web-hig-a-versioned-behavioral-contract-for-humans-ci-and-ai-agents-1cbe</guid>
      <description>&lt;p&gt;Your design system probably nails color, type, and button variants. WCAG covers accessibility conformance. Your framework docs cover routing and data fetching.&lt;br&gt;
Then you ask an AI agent to “add a delete project flow,” and you get a modal that optimistically removes the row, no focus trap, hex colors sprinkled in the CSS, and a toast that says “Success!” without telling anyone &lt;em&gt;what&lt;/em&gt; succeeded.&lt;br&gt;
That gap — &lt;strong&gt;portable, testable product behavior&lt;/strong&gt; — is what &lt;a href="https://github.com/frozonfreak/hig" rel="noopener noreferrer"&gt;The Web HIG&lt;/a&gt; is for.&lt;/p&gt;
&lt;h2&gt;
  
  
  Not a component library
&lt;/h2&gt;

&lt;p&gt;The Web HIG is an open, MIT-licensed &lt;strong&gt;behavioral standard&lt;/strong&gt; for the modern web:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vendor-neutral requirements for interaction, states, tokens, motion, performance, and security UX&lt;/li&gt;
&lt;li&gt;Stable rule IDs (&lt;code&gt;HIG-A11Y-003&lt;/code&gt;, &lt;code&gt;HIG-MUT-001&lt;/code&gt;, …) you can cite in PRs, audits, and agent prompts&lt;/li&gt;
&lt;li&gt;Progressive disclosure: a ~5 minute quick reference, practical modules, and a full normative spec
You keep MUI, shadcn, Tailwind, or a home-grown token file. You keep React, Vue, or Astro. The HIG does not replace WCAG or HTML — it sits &lt;strong&gt;between&lt;/strong&gt; your design system and application code, the way a platform HIG does, but for the web and without locking you to one vendor.
&amp;gt; &lt;strong&gt;Design systems define &lt;em&gt;what&lt;/em&gt; it looks like.&lt;/strong&gt; &lt;strong&gt;The Web HIG defines &lt;em&gt;how&lt;/em&gt; it behaves.&lt;/strong&gt;
Current release: &lt;strong&gt;v1.9.0&lt;/strong&gt;. &lt;a href="https://github.com/frozonfreak/hig/blob/main/HIG-QUICK.md" rel="noopener noreferrer"&gt;Quick Reference&lt;/a&gt; · &lt;a href="https://hig.aruviflow.com/" rel="noopener noreferrer"&gt;Live demo&lt;/a&gt; · &lt;a href="https://frozonfreak.github.io/hig/" rel="noopener noreferrer"&gt;Documentation site&lt;/a&gt;
## Why “just use a checklist” fails at scale
Informal checklists and blog posts help once. They do not:&lt;/li&gt;
&lt;li&gt;Pin &lt;strong&gt;semver&lt;/strong&gt; when you upgrade the contract across repos&lt;/li&gt;
&lt;li&gt;Map rules to &lt;strong&gt;CI severity&lt;/strong&gt; (block vs warn vs observe)&lt;/li&gt;
&lt;li&gt;Compose cleanly with &lt;strong&gt;agent context windows&lt;/strong&gt; (load topics on demand, not a 200-page PDF)
The Web HIG is built for &lt;strong&gt;testable behavior&lt;/strong&gt;: RFC 2119 vocabulary in the full spec, Layer 8 gate classes for automation, and a manifest (&lt;a href="https://github.com/frozonfreak/hig/blob/main/rules/manifest.yaml" rel="noopener noreferrer"&gt;&lt;code&gt;rules/manifest.yaml&lt;/code&gt;&lt;/a&gt;) so tools (and agents) can load only the module they need — forms, mutations, accessibility, and so on.
## One standard, three levels
You do not have to read everything on day one.
| Level | Document | When |
| --- | --- | --- |
| &lt;strong&gt;Quick&lt;/strong&gt; | &lt;a href="https://github.com/frozonfreak/hig/blob/main/HIG-QUICK.md" rel="noopener noreferrer"&gt;HIG-QUICK.md&lt;/a&gt; — 98 rules | Daily work, agents, PR review |
| &lt;strong&gt;Practical&lt;/strong&gt; | &lt;a href="https://github.com/frozonfreak/hig/blob/main/HIG-LITE.md" rel="noopener noreferrer"&gt;HIG-LITE.md&lt;/a&gt; + &lt;code&gt;rules/&lt;/code&gt; | Features — IDs, modules, archetypes |
| &lt;strong&gt;Full&lt;/strong&gt; | &lt;a href="https://github.com/frozonfreak/hig/blob/main/HIG.md" rel="noopener noreferrer"&gt;HIG.md&lt;/a&gt; | Edge cases, CI gates, disputes |
Same rule IDs at every layer. Escalate only when you need to.
## Scope before rules (Layer 0)
Not every rule applies to every page. Before enforcing anything, resolve a &lt;strong&gt;page archetype&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;content&lt;/code&gt; — marketing, docs, blog&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;commerce&lt;/code&gt; — catalog, cart, checkout&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;application&lt;/code&gt; — dashboards, settings, tools&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;auth&lt;/code&gt; — login, signup, account recovery
A landing page should not inherit the same mutation and streaming defaults as a logged-in app shell. Archetypes keep agents and humans from “HIG-maximalism” on simple routes.
## Rules agents (and reviewers) can actually cite
Quick Reference rules are imperative and short. A few that show up constantly in AI-generated UI:
&lt;strong&gt;States &amp;amp; feedback&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Every async operation needs idle, loading, success, error, or empty — never a blank screen while data loads.&lt;/li&gt;
&lt;li&gt;Error copy must say what failed and how to recover, not “Something went wrong.”
&lt;strong&gt;Destructive actions&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Confirmation must match severity; irreversible deletes need intentional multi-step confirmation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never&lt;/strong&gt; use optimistic UI for destructive confirmation — wait for server acknowledgment (&lt;code&gt;HIG-MUT-001&lt;/code&gt; territory).
&lt;strong&gt;Accessibility &amp;amp; tokens&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Prefer native HTML over ARIA when the platform already gives you the behavior.&lt;/li&gt;
&lt;li&gt;No raw hex in application CSS — semantic or component tokens only.&lt;/li&gt;
&lt;li&gt;Respect &lt;code&gt;prefers-reduced-motion&lt;/code&gt;; cap decorative micro-motion.
When you push back on a shortcut, citing &lt;code&gt;HIG-MUT-001&lt;/code&gt; or &lt;code&gt;HIG-A11Y-003&lt;/code&gt; is clearer than “our team doesn’t like that.”
## Where it sits in your stack
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────────────┐
│  HTML, CSS, ARIA (platform)          │
└──────────────────┬───────────────────┘
                   │
┌──────────────────▼───────────────────┐
│  WCAG 2.2 (accessibility target)     │
└──────────────────┬───────────────────┘
                   │
┌──────────────────▼───────────────────┐
│  Your design system (visual language)│
└──────────────────┬───────────────────┘
                   │
┌──────────────────▼───────────────────┐
│  The Web HIG (behavior &amp;amp; enforcement)│
└──────────────────┬───────────────────┘
                   │
┌──────────────────▼───────────────────┐
│  Your product code                   │
└──────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;More background: &lt;a href="https://github.com/frozonfreak/hig/blob/main/RATIONALE.md" rel="noopener noreferrer"&gt;RATIONALE.md&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Built for the AI-assisted workflow
&lt;/h2&gt;

&lt;p&gt;A typical loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer → pinned HIG → AI agent → code → review → CI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pin &lt;strong&gt;&lt;code&gt;HIG-QUICK.md&lt;/code&gt;&lt;/strong&gt; (and optionally &lt;strong&gt;&lt;code&gt;HIG-CORE.md&lt;/code&gt;&lt;/strong&gt;) under something like &lt;code&gt;docs/hig/&lt;/code&gt;. Add a scope file that maps routes to archetypes. Drop in one agent rule file:&lt;br&gt;
| Tool | Template in repo |&lt;br&gt;
| --- | --- |&lt;br&gt;
| Cursor | &lt;code&gt;examples/agent-rules/cursor-hig.mdc&lt;/code&gt; |&lt;br&gt;
| Claude Code | &lt;code&gt;examples/agent-rules/CLAUDE-hig.md&lt;/code&gt; |&lt;br&gt;
| GitHub Copilot | &lt;code&gt;examples/agent-rules/copilot-instructions-hig.md&lt;/code&gt; |&lt;br&gt;
| Multi-agent | &lt;code&gt;examples/agent-rules/AGENTS-hig.md&lt;/code&gt; |&lt;br&gt;
&lt;strong&gt;Default agent prompt:&lt;/strong&gt; &lt;em&gt;“Follow The Web HIG Quick Reference.”&lt;/em&gt;&lt;br&gt;
Human prompt with teeth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build a delete-project dialog for &lt;code&gt;/app/projects&lt;/code&gt;. Archetype: application. Follow The Web HIG Quick Reference; cite rule IDs if you decline a pattern.&lt;br&gt;
You should see citations like &lt;code&gt;HIG-MUT-001&lt;/code&gt;, &lt;code&gt;HIG-A11Y-008&lt;/code&gt;, and &lt;code&gt;HIG-A11Y-004&lt;/code&gt; instead of vibes-based UX.&lt;/p&gt;
&lt;h2&gt;
  
  
  Try it in one afternoon
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pin&lt;/strong&gt; — copy &lt;code&gt;VERSION&lt;/code&gt;, &lt;code&gt;HIG-QUICK.md&lt;/code&gt;, and optional &lt;code&gt;HIG-CORE.md&lt;/code&gt; to &lt;code&gt;docs/hig/&lt;/code&gt; (&lt;a href="https://github.com/frozonfreak/hig/blob/main/PROFILES.md" rel="noopener noreferrer"&gt;profiles guide&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope&lt;/strong&gt; — adapt &lt;a href="https://github.com/frozonfreak/hig/blob/main/examples/hig-scope.example.md" rel="noopener noreferrer"&gt;&lt;code&gt;examples/hig-scope.example.md&lt;/code&gt;&lt;/a&gt; to &lt;code&gt;docs/hig-scope.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agents&lt;/strong&gt; — one file from &lt;a href="https://github.com/frozonfreak/hig/tree/main/examples/agent-rules" rel="noopener noreferrer"&gt;&lt;code&gt;examples/agent-rules/&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade safely&lt;/strong&gt; — vendor the repo and run &lt;code&gt;npm run validate&lt;/code&gt; when you bump the pinned version.
Walkthrough: &lt;a href="https://github.com/frozonfreak/hig/blob/main/examples/adoption/quick-profile-walkthrough.md" rel="noopener noreferrer"&gt;quick-profile walkthrough&lt;/a&gt;.
Team adoption: &lt;a href="https://github.com/frozonfreak/hig/blob/main/INTEGRATION.md" rel="noopener noreferrer"&gt;INTEGRATION.md&lt;/a&gt;.
Minimal PR checklist once the HIG is pinned:&lt;/li&gt;
&lt;li&gt;[ ] Archetype noted in the PR description
&lt;/li&gt;
&lt;li&gt;[ ] No raw hex in component CSS
&lt;/li&gt;
&lt;li&gt;[ ] Destructive actions use proportional confirmation, not optimistic delete
&lt;/li&gt;
&lt;li&gt;[ ] Visible focus on interactive controls
## What’s inside (v1.9.0 snapshot)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;98&lt;/strong&gt; quick rules
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;16&lt;/strong&gt; topic modules (forms, mutations, performance, security UX, …)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4&lt;/strong&gt; page archetypes
&lt;/li&gt;
&lt;li&gt;Layers covering applicability, UX, IA, tokens, server-driven UI, a11y, perf, CI gates, and security UX
Index: &lt;a href="https://github.com/frozonfreak/hig/blob/main/SPECIFICATION.md" rel="noopener noreferrer"&gt;SPECIFICATION.md&lt;/a&gt;.
Roadmap for machine-readable registries and linters: &lt;a href="https://github.com/frozonfreak/hig/blob/main/MACHINE_READABLE.md" rel="noopener noreferrer"&gt;MACHINE_READABLE.md&lt;/a&gt;.
## Open standard, your stack
The Web HIG is deliberately &lt;strong&gt;adopt, don’t rewrite&lt;/strong&gt;: pin the contract, wire your agents, optionally gate CI later. Framework notes live under &lt;a href="https://github.com/frozonfreak/hig/tree/main/framework" rel="noopener noreferrer"&gt;&lt;code&gt;framework/&lt;/code&gt;&lt;/a&gt; (React, Next, Vue, Nuxt, Astro) without mandating any of them.
If you are standardizing how your team — and your coding agents — handle loading states, destructive flows, and token discipline, &lt;strong&gt;&lt;a href="https://github.com/frozonfreak/hig" rel="noopener noreferrer"&gt;star or pin the repo&lt;/a&gt;&lt;/strong&gt; and tell us what you are building in &lt;a href="https://github.com/frozonfreak/hig/blob/main/ADOPTERS.md" rel="noopener noreferrer"&gt;ADOPTERS.md&lt;/a&gt; or a GitHub issue.
Contributions welcome: &lt;a href="https://github.com/frozonfreak/hig/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>a11y</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
