npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ucirs

v0.5.3

Published

Structural enforcement layer for irreversible actions with explicit assumption declaration

Readme

UCIRS

Unified Cognitive Infrastructure for Irreversible Systems

A structural enforcement layer for Git workflows. UCIRS detects irreversible actions in commits and requires explicit assumption declarations before proceeding.


What This Is

UCIRS is a Git hook system that:

  • Detects patterns indicating irreversible changes (database migrations, destructive operations, API breaking changes)
  • Blocks commits when irreversible changes lack explicit assumptions
  • Explains why a block occurred and what to do next
  • Records enforcement decisions for later reconstruction

What This Is Not

  • A security scanner
  • A vulnerability detector
  • A code quality tool
  • An AI system that "understands" code

Limitations

  1. Pattern-based detection: UCIRS uses regex patterns to identify irreversible actions. Novel patterns not in the detection rules will not be caught.
  2. No semantic understanding: UCIRS cannot determine if an assumption is correct, only that one exists.
  3. Local enforcement only: Cross-repo features (v3+) propagate warnings, never blocks.
  4. Heuristic classification: Security detection (v4) uses content patterns with explicit confidence levels.

Installation

npm (CLI + Library)

# Global install for CLI
npm install -g ucirs

# Local install for library API
npm install ucirs

VS Code Extension

ext install asapabhii.ucirs

Or search "UCIRS" in VS Code Extensions.

Git Hooks

After installing, add hooks to your repository:

ucirs install-hooks

Quick Start

1. Make an irreversible change

-- migrations/001_drop_column.sql
ALTER TABLE users DROP COLUMN legacy_field;

2. Attempt to commit

git add migrations/
git commit -m "drop legacy column"

3. UCIRS blocks with explanation

╔══════════════════════════════════════════════════╗
║              UCIRS PAUSED COMMIT                 ║
╚══════════════════════════════════════════════════╝

WHAT HAPPENED:
  No assumption declared for this change

WHY IT MATTERS:
  Irreversible changes need an explicit assumption before proceeding

WHAT WAS DETECTED:
  • migrations/001_drop_column.sql: HIGH irreversibility

WHAT TO DO NEXT:
  1. Declare an assumption in .ucirs/assumptions.yaml
  2. Split into smaller, reversible commits
  3. Adjust the change to avoid irreversible patterns

4. Declare an assumption

Create .ucirs/assumptions.yaml:

assumptions:
  - id: "asm/20241221/migrations/a1b2"
    description: "Column removal tested on staging with 50k records. No active queries use this column."
    scope:
      files:
        - "migrations/"
      services: []
    origin:
      type: manual
      ref: "JIRA-1234"
    timestamp: "2024-12-21T10:00:00Z"
    dependencies: []
    status: active

5. Commit succeeds

git commit -m "drop legacy column"
# [main abc1234] drop legacy column

Assumption Schema

Required Fields

| Field | Type | Description | |-------|------|-------------| | id | string | Unique identifier. Auto-generated format: asm/YYYYMMDD/scope/hash | | description | string | Human-readable explanation of what was verified | | scope.files | string[] | File patterns this assumption covers | | scope.services | string[] | Service names this assumption covers | | origin.type | enum | commit, merge, deploy, manual | | origin.ref | string | Reference (PR number, commit hash, ticket ID) | | timestamp | ISO-8601 | When the assumption was created | | dependencies | string[] | IDs of assumptions this depends on | | status | enum | active, aged, expired, unknown |

Optional Fields (v2+)

| Field | Type | Description | |-------|------|-------------| | createdAt | ISO-8601 | Explicit creation timestamp | | expiresAt | ISO-8601 | When assumption becomes invalid | | reviewAfter | ISO-8601 | When assumption should be reviewed | | provenance.triggeringDetector | string | Pattern that triggered enforcement | | provenance.filesInvolved | string[] | Files that caused the trigger |

Optional Fields (v3+)

| Field | Type | Description | |-------|------|-------------| | crossRepo.declaredIn | string | Repository where assumption was created | | crossRepo.dependedBy | string[] | Repositories depending on this assumption | | crossRepo.visibility | enum | local, linked | | trust.level | enum | local, team, org | | trust.reviewers | string[] | Who validated this assumption | | ownedBy.team | string | Responsible team | | ownedBy.contact | string | Contact email or handle |

Optional Fields (v4)

| Field | Type | Description | |-------|------|-------------| | security.relevant | boolean | Whether this is security-related | | security.rationale | string | Why this is security-relevant | | security.category | enum | access_control, data_exposure, auth_bypass, encryption, logging, api_exposure, permission_change, other | | relatedVulnerabilities | array | References to CVEs or internal IDs (for context only, no scanning) |

Optional Fields (v5)

| Field | Type | Description | |-------|------|-------------| | topology.links | array | Structural relationships to other assumptions (amplifies, masks, weakens, depends_on) | | epistemicDebt.description | string | What is unknown (unresolved unknowns) | | epistemicDebt.introducedAt | ISO-8601 | When the unknown was introduced | | epistemicDebt.scope | enum | local, cross-repo, org-wide | | reasoningContext.mode | enum | under_time_pressure, incident_response, exploratory, cost_driven, normal | | reasoningContext.notes | string | Optional notes about decision context |


What UCIRS Detects

UCIRS detects irreversible decision pressure + assumption risk — not bugs, CVEs, or code quality issues.

Database & Data Layer

| Pattern | Level | Examples | |---------|-------|----------| | Schema changes | HIGH | DROP TABLE, DROP COLUMN, ALTER COLUMN TYPE, ADD NOT NULL | | Data deletion | EXTREME | DELETE FROM without WHERE, TRUNCATE, bulk deletes | | Migration patterns | HIGH | One-way migrations, backfill without verification |

API & Interface Changes

| Pattern | Level | Examples | |---------|-------|----------| | Public API changes | HIGH | Removing endpoints, changing response shape, removing fields | | Contract drift | MEDIUM | OpenAPI/GraphQL schema changes, versionless mutations |

Auth, Permissions & Security

| Pattern | Level | Examples | |---------|-------|----------| | Permission broadening | HIGH | IAM role expansion, *:* permissions, relaxed ACLs | | Exposure changes | HIGH | Internal → public service, private bucket → public | | Encryption & secrets | EXTREME | Changing encryption modes, logging sensitive data, hardcoded secrets |

Filesystem & Infrastructure

| Pattern | Level | Examples | |---------|-------|----------| | Destructive actions | EXTREME | rm -rf, recursive deletes, config overwrites | | Infrastructure changes | HIGH | Terraform destroy, resource deletions, region changes |

Deployment & Config

| Pattern | Level | Examples | |---------|-------|----------| | Deployment coupling | MEDIUM | Schema + code changes together, breaking change without feature flags | | Config drift | MEDIUM | Env var changes, feature flag deletions, default value changes |

Cross-Repo & System-Level (v3+)

| Pattern | Level | Examples | |---------|-------|----------| | Cross-repo dependencies | MEDIUM | One repo assuming behavior of another, implicit coupling | | Cross-repo drift | MEDIUM | Assumption updated in one repo, downstream repos stale |

Assumption & Epistemic Signals (v5)

| Pattern | Level | Examples | |---------|-------|----------| | Missing assumptions | BLOCKING | Irreversible change with zero assumptions | | Aged/expired assumptions | WARNING | Assumptions older than declared validity | | Scope drift | WARNING | Change affects files outside assumption scope | | Contradictions | WARNING | Two assumptions asserting incompatible states |

What UCIRS Does NOT Detect

  • Bugs, CVEs, vulnerability severity
  • Exploitability, performance regressions
  • Correctness, safety, intent, "best practices"

One-line summary: UCIRS detects irreversible changes, assumption gaps, security exposure, and organizational decision patterns before context is lost.


CLI Commands

| Command | Version | Description | Usage | |---------|---------|-------------|-------| | ucirs install-hooks | v1 | Install Git hooks in repo | Run in repo root | | ucirs uninstall-hooks | v1 | Remove Git hooks | Run in repo root | | ucirs verify | v2 | CI/PR verification (read-only) | Run in CI pipelines | | ucirs replay <commit> | v2 | Reconstruct enforcement state at commit | ucirs replay HEAD | | ucirs incident [target] | v3 | Cross-repo incident graph | ucirs incident | | ucirs counterfactual <commit> --assumption=<id> | v5 | Replay assumption dependencies | ucirs counterfactual HEAD --assumption=asm/123 | | ucirs github --pr=<num> | v5 | Post read-only PR context comment | GITHUB_TOKEN=xxx ucirs github --pr=123 | | ucirs --version | v1 | Show version | | | ucirs --help | v1 | Show help | |


Library API

For programmatic use in Node.js:

const ucirs = require('ucirs');

// Core functions
ucirs.loadAssumptions(dir);         // Load assumptions from .ucirs/
ucirs.createAssumption({...});      // Create new assumption
ucirs.validateAssumption(obj);      // Validate assumption schema

// Irreversibility detection
ucirs.classifyByFilePath(path);     // Classify by file path
ucirs.classifyByContent(content);   // Classify by content

// Security (v4)
ucirs.classifySecurityRelevance(file, content);

// Meta-reasoning (v5)
ucirs.buildTopologyMap(assumptions);         // Assumption relationships
ucirs.compileEpistemicDebt(assumptions);     // Unresolved unknowns
ucirs.calculatePressureMetrics([], n1, n2);  // Irreversibility pressure
ucirs.detectBlindSpots(assumptions, []);     // Org blind spots
ucirs.detectConfidenceCascades(assumptions); // Repeated approvals
ucirs.generateSelfAwarenessMessage([]);      // UCIRS self-limits

VS Code Extension

Commands available:

  • UCIRS: Show State — View enforcement mode and recent actions
  • UCIRS: Declare Assumption — Create new assumption with context auto-fill
  • UCIRS: Validate Assumptions — Check schema validity
  • UCIRS: Analyze Current File — Check irreversibility classification
  • UCIRS: Show Visibility Panel — Read-only view of assumptions and drift (v3+)
  • UCIRS: Create Assumptions File — Generate template file

Version History

v1.0.0

Core enforcement: irreversibility detection, assumption requirements, Git hooks, VS Code integration.

v2.0.0

Lifecycle awareness: assumption aging/expiry, provenance tracking, incident replay, CI verification.

v3.0.0

Cross-repo coordination: linked assumptions, trust domains, ownership mapping, drift detection across repos.

v4.0.0

Security memory: security-critical classification, vulnerability context binding, security drift detection, decision pattern memory.

v5.0.0 (current)

Meta-reasoning: assumption topology mapping, counterfactual replay, confidence cascades, blind spots, epistemic debt, historical matching, GitHub PR integration.

See CHANGELOG.md for detailed changes.


Configuration

UCIRS uses .ucirs/state.json for local state (auto-generated, gitignored).

Enforcement modes:

  • blocking (default): Block on violations
  • advisory: Log violations, allow commit

Behavior Guarantees

| Guarantee | Status | |-----------|--------| | Silent when no irreversible actions detected | ✓ Yes | | Explains every block with remediation options | ✓ Yes | | Never modifies files without explicit action | ✓ Yes | | Degrades to advisory if state is corrupted | ✓ Yes | | Detects all possible irreversible patterns | ✗ No | | Validates assumption correctness | ✗ No | | Prevents all mistakes | ✗ No |


Contributing

This project follows these principles:

  1. Accuracy over ambition
  2. Clarity over cleverness
  3. Explicit limits are required
  4. No anthropomorphic verbs (knows, thinks, decides)
  5. No safety guarantees

Pull requests must include tests and documentation updates.