Skip to main content

Arckit

@magistr/arckitv2026.08.19.1· 23d agoMODELSSKILLS
01README

Standalone swamp port of ArcKit (https://github.com/tractorjuice/arc-kit — the Enterprise Architecture Governance Harness): a skill-driven governance state machine with the full arc-kit template corpus bundled. No ArcKit Claude plugin and no Python CLI required.

Model type @magistr/arckit/workspace:

State machine (one governance project per state artifact)

startProject -> foundation -> context -> risk -> business-case ->
requirements -> design -> procurement -> design-review -> delivery ->
operations -> assurance -> story -> complete   (abandon from any state)

advance re-scans the disk and refuses unless every gate group of the current phase has an ARC-* artifact present; skipPhase records an explicit bypass of skippable phases. Profiles (standard | uk-gov | mod | ai | nl-gov) add gate groups (uk-gov: tcop + secure; mod: mod-secure; ai: data-model + ai-playbook + atrs; nl-gov: nl-tbb + nl-cloud + nl-bio + nl-exit + eu-sovereignty). 000-global artifacts (e.g. principles) satisfy gates workspace-wide.

Netherlands sovereign-cloud overlay (nl-gov)

Six artifact types grounded in current Dutch and EU instruments — Herziening rijksbreed cloudbeleid 2026 (3 juli 2026), VIRBI 2025 with the Te Beschermen Belangen systematiek, Cbw + Wwke (in force 15 August 2026), BIO2, and the EU Cloud Sovereignty Framework v1.2.1. Two of them are computable rather than prose-only.

Methods

  • startProject / status / advance / skipPhase / abandon — the lifecycle
  • template / templates / provisionTemplates — 71 bundled templates (65 arc-kit v6.2.0 plus 6 NL/EU), served with doc code, target ARC filename, and mandatory input artifacts
  • init / scan / gaps — workspace scaffold, full artifact inventory, mandatory-dependency violation report
  • migrateClassification — port of arckit migrate-classification; ladder selects the target ladder (uae = UK → UAE Smart Data, the default and unchanged; nl = UK → NL rubricering), report-only by default
  • euSovereigntyScore — EU Cloud Sovereignty Framework v1.2.1 weighted score over SOV-1..SOV-8, the overall SEAL (the framework's actual rejection gate — the minimum SEAL across all eight objectives), and, with caller-supplied minimum SEAL floors, pass/fail per objective. Records an assessment; it does not certify
  • nlCloudEligibility — public-cloud eligibility under the Herziening rijksbreed cloudbeleid 2026, returning allowed | conditional | discouraged | prohibited with every fired clause and a plain-language reason

Ships the arckit skill that drives Claude through the loop: status → fetch template → read mandatory inputs → produce artifact → human approval → advance.

02Models1
@magistr/arckit/workspacev2026.08.19.1extensions/models/arckit_workspace.ts

Global Arguments

ArgumentTypeDescription
pathstringAbsolute path to the ArcKit workspace root (the directory containing projects/)
maxFileBytesnumberReject/skip any single artifact or bundled template file larger than this many bytes (default 10 MiB)
fn init()
Idempotently scaffold the ArcKit workspace skeleton (.arckit/ and projects/000-global/) at the configured path. Existing directories are left untouched and reported.
fn scan()
Inventory the whole workspace in one run: every projects/NNN-name directory, its ARC-* artifacts parsed into doc type / command / version, with file size and mtime.
fn gaps()
Rescan the workspace and evaluate every project against ArcKit's mandatory-dependency matrix: violations (artifact present, mandatory input missing), commands present, and next critical-path step. Global (000-global) artifacts satisfy dependencies workspace-wide.
fn startProject(title: string, profile: enum, dir?: string)
Start a governance project: allocate the next projects/NNN-slug directory (or adopt an explicit dir), create it, and enter the foundation phase. Refuses to restart a project that is already in flight.
ArgumentTypeDescription
titlestringHuman project title
profileenumGovernance profile — adds gate groups (uk-gov: tcop+secure, mod: mod-secure, ai: data-model+ai-playbook+atrs)
dir?stringExplicit NNN-slug project directory (allocated from the title when omitted)
fn status(project: string)
Report one project's lifecycle status: current phase gate evaluated against artifacts actually on disk, present commands, and the suggested next action (command, template file, target ARC filename, mandatory inputs). The skill's main dispatch point.
ArgumentTypeDescription
projectstringProject dir, e.g. 001-payments
fn advance(project: string, note?: string)
Advance a project to the next phase — gated: rescans the disk and refuses unless every gate group of the current phase has an artifact present. From the last phase (story) advances to complete.
ArgumentTypeDescription
projectstringProject dir, e.g. 001-payments
note?stringOptional note recorded in the transition history
fn skipPhase(project: string, reason: string)
Skip the project's current phase with an explicit recorded reason. Only phases marked skippable (business-case, procurement, design-review, delivery, operations, story) can be skipped.
ArgumentTypeDescription
projectstringProject dir, e.g. 001-payments
reasonstringWhy this phase does not apply
fn abandon(project: string, reason: string)
Abandon a governance project from any state, recording the reason.
ArgumentTypeDescription
projectstringProject dir, e.g. 001-payments
reasonstringWhy the project is abandoned
fn templates()
Catalog the bundled arc-kit templates: producing command, ARC doc code, template file, and size.
fn template(command: string, project?: string)
Serve one bundled template by command name (e.g. requirements, risk, adr, wardley.doctrine), with its ARC doc code, suggested target filename (when a project is given), and mandatory input artifacts to read first.
ArgumentTypeDescription
commandstringArcKit command whose template to fetch, e.g. requirements
project?stringProject dir (e.g. 001-payments) — fills in targetDir and suggested ARC filename
fn provisionTemplates()
Copy every bundled arc-kit template (including _partials) into the workspace's .arckit/templates/ directory, refreshing defaults. Customizations belong in .arckit/templates-custom/, which is never touched.
fn migrateClassification(apply: boolean, ladder: enum)
Port of `arckit migrate-classification`: walk every ARC-* markdown artifact and map Document Control Classification values from the UK ladder to the target classification ladder — uae (default, UAE Smart Data: PUBLIC→Open, OFFICIAL→Shared, OFFICIAL-SENSITIVE→Confidential) or nl (NL rubricering/VIRBI 2025: PUBLIC→Ongerubriceerd, SECRET→Stg. GEHEIM, TOP SECRET→Stg. ZEER GEHEIM — SECRET/TOP SECRET sourced from the German BMI's NATO-equivalence table, PUBLIC reasoned floor-to-floor; OFFICIAL and OFF
ArgumentTypeDescription
applybooleanWrite the proposed changes (default: report only)
ladderenumTarget classification ladder — uae (UAE Smart Data, default) or nl (NL rubricering, VIRBI 2025)
fn euSovereigntyScore(subject: string, project?: string, objectives: array, sealFloors?: record)
EU Cloud Sovereignty Framework v1.2.1: score a subject (service or provider) against the eight weighted Sovereignty Objectives (SOV-1..SOV-8), report overallSeal (the framework's actual rejection gate — the minimum SEAL across all eight objectives) and, when caller-supplied SEAL floors are given, pass/fail per objective. Computes an assessment — it does not certify.
ArgumentTypeDescription
subjectstringThe service or provider being assessed
project?stringProject dir, e.g. 001-payments — prefixes the written resource name
objectivesarrayExactly the eight EU CSF v1.2.1 Sovereignty Objectives SOV-1..SOV-8, any order
sealFloors?recordCaller-supplied minimum SEAL per objective id — never hardcoded; the tender specification defines these, per the EU CSF
fn nlCloudEligibility(subject: string, project?: string, rubricering?: enum, tbbCategory?: enum, processingRegion: string, supplierJurisdiction: string, isPrimaryProcess: boolean, isBasisregistratie: boolean, isEmailOrWorkplace: boolean, continuityEstablishedIndependently: boolean, riskAnalysisAndExitPlanTested: boolean, ministerialApprovalObtained: boolean, isVitaleAanbieder: boolean, isWwkeEntity: boolean, isCbwEssentialEntity: boolean)
Herziening rijksbreed cloudbeleid 2026: evaluate whether a subject's public-cloud use is allowed | conditional | discouraged | prohibited, from rubricering/TBB classification, processing region, supplier jurisdiction, and the entity/clause-4.5/clause-4.3 governance facts. Every governance input is required (fail-closed); rubricering and tbbCategory are validated against the NL rubricering and TBB enums at the argument boundary.
ArgumentTypeDescription
subjectstringThe service or provider being assessed
project?stringProject dir, e.g. 001-payments — prefixes the written resource name
rubricering?enumNL VIRBI 2025 rubricering level (at least one of rubricering/tbbCategory required; Stg. = staatsgeheim)
tbbCategory?enumTe Beschermen Belang category, TBB 1 (highest) .. TBB 4 (lowest) — TBB systematiek, Gereedschap v1.0
processingRegionstringWhere the data is stored and processed (e.g. EEA, Switzerland, United States)
supplierJurisdictionstringJurisdiction(s) the supplier and its sub-processors fall under — distinct from processingRegion
isPrimaryProcessbooleanWhether the service supports the entity's primary process
isBasisregistratiebooleanWhether the service holds basisregistratie source data
isEmailOrWorkplacebooleanWhether the service is email/workplace storage (clause 4.5)
continuityEstablishedIndependentlybooleanClause 4.5 condition: continuity established independently of the supplier
riskAnalysisAndExitPlanTestedbooleanClause 4.5 condition: risk analysis and exit plan tested
ministerialApprovalObtainedbooleanClause 4.5 condition: ministerial approval obtained
isVitaleAanbiederbooleanWhether the entity is a vitale aanbieder
isWwkeEntitybooleanWhether the entity is a Wwke (Cyberbeveiligingswet) entity
isCbwEssentialEntitybooleanWhether the entity is a Cbw (NIS2) essential entity

Resources

workspace(infinite)— Inventory of the ArcKit workspace: every project directory with its parsed ARC-* artifacts (doc type, producing command, version, size, mtime).
gaps(infinite)— Governance-gap analysis per project: mandatory-dependency violations, commands present, and the next step on the standard critical path.
initResult(infinite)— Result of workspace scaffolding: which skeleton directories were created vs already present.
projectState(infinite)— Lifecycle state of one governance project (data name = project dir): current phase, profile, skipped phases, and full transition history. Persists across sessions.
projectStatus(infinite)— Compact per-project status written by the status method: current gate with satisfaction per group, present commands, and the suggested next action (command, template, target filename). Derived — non-authoritative.
templateCatalog(infinite)— Catalog of the bundled arc-kit templates: command, doc code, file, size.
templateDoc(infinite)— One bundled template's full content plus its doc code, suggested target filename, and mandatory input artifacts.
provisionResult(infinite)— Result of copying the bundled templates into the workspace's .arckit/templates/ directory.
classificationMigration(infinite)— Report (or applied result) of a classification ladder migration (uae or nl) across all ARC-* artifacts.
sovereigntyAssessment(infinite)— EU Cloud Sovereignty Framework v1.2.1 score for one subject (service or provider): per-objective (SOV-1..SOV-8) weighted contribution, total score, overallSeal (the framework's actual rejection gate — the minimum SEAL across all eight objectives, undefined if any objective has no recorded SEAL) with overallSealGovernedBy naming which objective(s) achieve it, and — when caller-supplied SEAL floors were given — pass/fail per objective. An assessment record, not a certification.
cloudEligibility(infinite)— Herziening rijksbreed cloudbeleid 2026 public-cloud eligibility verdict for one subject: allowed | conditional | discouraged | prohibited, every fired clause, and a human-readable reason.
03Skills1
arckit3 files
04Previous Versions4
2026.08.14.1

2026.08.14.1

Ports three verified upstream arc-kit defects in the EU Cloud Sovereignty Framework v1.2.1 implementation into this fork, found against the Commission's own Implementation guidance PDF and Annex Sovereignty assessment calculator XLSX, plus one related backward-compatible widening. TDD RED round: the weight fix's test asserted all eight weights individually against unmodified source first, capturing SOV-1/SOV-5/SOV-7 failing by name before any production code changed — a sum-only assertion would have missed all three, since both the wrong and the right weight sets sum to 100.

  • SOV_WEIGHTS had three wrong values. SOV-1 was 15 (should be 20), SOV-5 was 20 (should be 10), SOV-7 was 10 (should be 15) — ground truth is guidance p.7 / calculator cells D4/D45/D76/D102/D133/D169/D195/D231. The wrong set summed to 100 too, which is exactly why it survived review. Previously-written sovereigntyAssessment records were scored against the wrong weights and are NOT recomputed by this upgrade — that resource is lifetime: "infinite", so such records persist; re-run euSovereigntyScore for any assessment that still matters.
  • SEAL_LABELS.SEAL3.en was wrong. Corrected "Digital resilience""Technological sovereignty" (guidance p.2-3, p.10). SEAL_LABELS.SEAL3.nl is UNCHANGED"Digitale veerkracht" is a verified, deliberate divergence from the Commission's English name, quoted verbatim from the NDS Cloudprogramma notitie "Verkenning Overheidsbrede Soevereine Clouddiensten" (11 juni 2026), Tabel 1 p.8 — not a bug, and not something a future pass should "fix" to match the English.
  • No overall SEAL was computed, even though it is the framework's actual rejection gate (guidance p.9: "The overall SEAL level is the lowest SEAL level achieved in any of the objectives" — calculator cell F2: ="SEAL-"&MIN(H5:H251)). computeSovereigntyScore now returns overallSeal (a MINIMUM across all eight objectives, never an average or a mode; undefined — never fabricated as SEAL0 — when any objective has no recorded SEAL) and overallSealGovernedBy (every objective id tied at that minimum). SovereigntyAssessmentSchema gains both fields.
  • maxScore had no default and no documented ceiling. Added an exported SOV_MAX_SCORES constant with the calculator's actual per-objective maxima (SOV-1 1000.03 · SOV-2 1002 · SOV-3 1000 · SOV-4 1002 · SOV-5 1001 · SOV-6 1000 · SOV-7 1001 · SOV-8 1000 — a nominal 1000 is design intent, not arithmetic; the workbook rounds each criterion's answer value to 2dp). objectives[].maxScore is now OPTIONAL: when omitted, the accept/reject GUARD widens to the objective's actual SOV_MAX_SCORES[id] ceiling (a flat-1000 clamp would have falsely rejected a legitimate maximal SOV-2 response of 1002), while the contribution DIVISOR stays the calculator's flat nominal 1000 — the same formula the calculator itself uses for every objective regardless of that objective's true ceiling. Consequence, kept faithful rather than hidden: a maximal response across all eight objectives (every objective at its SOV_MAX_SCORES ceiling, maxScore omitted throughout) scores 100.0756%, not 100%. An explicit caller-supplied maxScore is honoured exactly as before for both roles — the new defaulting only applies when it is omitted.

manifest.yaml and model.version bumped in lockstep with a fifth identity upgrades[] entry — additive/corrective resource-shape changes only, no data transformation. New suite file arckit_workspace_csf_test.ts (26 tests) plus corrections to three stale assertions in arckit_workspace_nl_test.ts that hard-coded the old wrong weights (a local SOV_WEIGHTS duplicate, one sanity-test title, one hard-coded 15 in the fractional-contribution test). Suite is now 274, all green; deno lint/deno fmt --check clean.

2026.08.07.1

2026.08.07.1

Release of the NL sovereign-cloud overlay, with two defects closed that the pre-publish adversarial review found in 2026.08.06.1. 2026.08.06.1 was never published — the registry moves 2026.08.02.12026.08.07.1 directly. See the 2026.08.06.1 section below for the overlay itself.

  • computeSovereigntyScore's fail-closed guard was one-sided. It rejected a missing objective but silently accepted a duplicate id — a repeated SOV-1 changed the computed score from 50 to 57.5, the later entry winning via the new Map(...) construction — and silently ignored an unrecognized id. The objective set is now validated closed and exact (SOV-1..SOV-8, each exactly once) before scoring, naming the offending id.
  • MigrationSchema.ladder was required with no default, so a classificationMigration record written before the field existed failed to parse. That resource is lifetime: "infinite", so such records persist and can be restored from the datastore. It now defaults to "uae" — the only ladder that ever existed — matching the .default([]) precedent set for skipped/unmappedFiles. MigrationSchema is exported so a test pins it.

Both passed a fully green 244-test suite: the tests only exercised the missing-objective direction and never parsed a legacy record. Suite is now 248. quality.yaml gains its entry and lists arckit_workspace_nl_test.ts under the coverage role.

Modified 1 models

2026.08.02.1

2026.08.02.1

Real-fix pass closing all six remaining latent bugs tracked on the LOCAL arckit-latent-bugs issue-lifecycle model (NEVER filed to the swamp.club Lab) — LB2 (MEDIUM) and LB3..LB7 (LOW). arckit_workspace.ts was no longer byte-frozen after the LB1 fix in 2026.08.01.1; this is the second production change.

  • LB2 (MEDIUM) — migrateClassification apply=true non-atomic overwrite, no backup. The apply branch now copies the pre-migration content to a <artifact>.bak recovery sibling, writes the proposed text to a sibling temp file, then Deno.renames it over the artifact — an atomic replace on the same filesystem, so a reader always sees the whole old or whole new file, never a truncated partial, and a crash mid-write leaves the artifact intact plus a recoverable .tmp orphan.
  • LB3 (LOW) — unbounded readTextFile in template / migrateClassification. Added a defaulted global arg maxFileBytes (default 10 MiB) to GlobalArgsSchema. migrateClassification cap-checks via the scan snapshot's sizeBytes WITHOUT reading, recording an oversize artifact in the new skipped[] field (reason: "oversize") in both report and apply modes; template Deno.stats the bundled file and rejects before reading if it exceeds the cap.
  • LB4 (LOW) — non-enum projectState.state vacuously satisfies the gate. ProjectStateSchema.state is now z.enum(PROJECT_STATES) (PHASES plus complete/abandoned) instead of z.string() — a schema seam change only. readProjectState (the sole reader for status/advance/skipPhase/abandon) now rethrows a friendly Corrupted project state for <dir>: ... error instead of a raw ZodError when a hand-edited/datastore-restored state falls outside the enum, so advance can no longer auto-complete a bogus phase. nextPhase and gateFor/evaluateGate are UNCHANGED pure functions — the frozen contract-fixture (nextPhase("bogus") === "complete") and coverage_test.ts's gateFor/evaluateGate bogus-phase assertions stay byte-behaviorally identical; the schema simply makes them unreachable from the public API. Trade-off: abandon on a corrupted record now also rejects (fail-closed, cannot rescue a corrupted record via abandon) — accepted for a LOW corruption-recovery path.
  • LB5 (LOW) — project-id allocation breaks past 999. parseProjectDir's regex and the startProject allowlist guard both widen \d{3} to \d{3,} (3-OR-MORE digits); nextProjectDir's padStart(3, "0") is unchanged, so ids <=999 keep their existing 3-digit zero-padding and ids >=1000 widen naturally. The guard's character class still forbids /, \, ., so every LB1 traversal payload stays rejected; ARTIFACT_RE (artifact filename ids) is untouched and stays 3-digit.
  • LB6 (LOW/info) — templates vs provisionTemplates inventory divergence. templates now additionally walks the bundled templates/ directory (the same source provisionTemplates copies) and surfaces any file with no TEMPLATE_MAP command in a new defaulted unmappedFiles: string[] field on TemplateCatalogSchema, reconciling the two methods' inventories. templateCount and the sizeBytes:0 missing-file behavior are unchanged.
  • LB7 (LOW/info) — symlinked artifacts silently skipped. listFilesRecursive and scanWorkspace now resolve a symlink entry's target kind via Deno.stat — a symlinked artifact or project directory is inventoried like a real one (bounded by the existing depth cap). Write-safety cross-cut with LB1/LB2: migrateClassification's apply branch Deno.lstats before writing and skips (reason "symlink", reusing the LB3 skipped[] field) rather than writing through a symlink to a target outside the workspace; report-only mode still reads through the symlink and proposes.

extensions/models/arckit_workspace.ts: all six fixes land in a single consolidated ordered block inside migrateClassification's per-file apply loop (LB3 cap-check → read+propose → LB7 symlink skip / LB2 backup+atomic write), plus the schema/regex/directory-walk changes above. manifest.yaml/model.version bumped 2026.08.01.12026.08.02.1 in lockstep. Added upgrades[] (previously absent on this model) with identity upgradeAttributes: (old) => old entries — maxFileBytes is a defaulted global arg and skipped/unmappedFiles are defaulted resource-schema arrays, so no stored data needs transformation.

  • extensions/models/arckit_workspace_adversarial_test.ts: flipped LB2 (:121), LB4 (:197, :221), LB5 (:251), LB6 (:270), and LB7 (:306) from pin (arckit-latent-bugs LBN, SEVERITY):-titled current-behavior pins to fix regression (arckit-latent-bugs LBN, SEVERITY):-titled POST-fix assertions; relabeled the two LB3 500 KB pins from "
2026.07.16.2

Release 2026.07.16.2 — align model versions with manifests

Maintenance release across the @magistr extensions. For most packages this carries no functional change: the only edit is the model's version: field, brought back in line with its manifest version so the published model type version and the package version no longer drift.

Functional changes in this release are limited to:

  • anime-cron: normalizeTitle now strips a ": subtitle" suffix and a trailing parenthesized year before comparison, fixing dedup false-misses where the torrent title carries a subtitle or year that the AniList romaji does not.

  • arckit: first publish. Standalone ArcKit port — a 12-phase architecture governance state machine with 65 bundled templates, driven by a bundled skill.

Also tracks three extensions (kaiten, observability-agent, music-library) that previously existed only as untracked working-tree directories, recovered from stashes.

05Stats
A
100 / 100
Downloads
0
Archive size
566.7 KB
  • Has README or module doc2/2earned
  • README has a code example1/1earned
  • README is substantive1/1earned
  • Most symbols documented1/1earned
  • No slow types (deprecated)1/1earned
  • Dependencies pass trust audit2/2earned
  • Has description1/1earned
  • Platform support declared (or universal)2/2earned
  • License declared1/1earned
  • Verified public repository2/2earned
06Platforms
07Labels