Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 03:07 UTC

csuzngjh / principles

Owner-governed behavior alignment and co-evolution system for AI agents. Distills agent behavioral evidence into reviewed, reversible principles.

TypeScriptMIT★ 1 Stern⑂ 1 Forkseit Jan. 2026Auf GitHub ansehen ↗

csuzngjh/principles erreicht einen Gesundheitsindex von 70 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (87/100) ab, am schwächsten bei Community & Adoption (47/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

70
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

70
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

PDPersönliches Konto
9 Follower2 öffentliche Reposseit Dez. 2014

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npm@principles/pd-cli1.133.03.62870vor 24 Tagen
npmprinciples-disciple1.197.1317.697232vor 4 Tagen
npm@principles/core1.240.1019.853197vor 4 Tagen
npmcreate-principles-disciple1.104.03.52234vor 18 Tagenopenclawprinciples-disciplecliinstallerinteractive

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

87Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
13.8/36Commit-Rhythmus — 20/52 Wochen mit Commits
18/18Commit-Volumen — 1.712 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year1.712
human_commit_share0,81
days_since_last_push0
active_weeks_last_year20

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 4 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 18 Tagen
27/27Release-Rhythmus — ein Release etwa alle 11,1 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count4
latest_release_tagv1.75.1
releases_from_tagsnein
days_since_latest_release18
mean_days_between_releases11,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

47Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 1 Stars
0/25Forks — 1 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks1
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templateja
Wie die Bewertung erfolgt
62/80Downloads pro Monat — 44.700 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packages@principles/pd-cli, principles-disciple, @principles/core, create-principles-disciple
dependents
ecosystemsnpm
total_downloads
monthly_downloads44.700
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

56Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
4.1/13.5Breite der Beitragenden — 3 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled3
top_contributor_share0,998
Wie die Bewertung erfolgt
46.8/46.8Issue-Lösungsquote — 100 % der Issues geschlossen
34.9/38.3PR-Annahme — 1.007/1.105 entschiedene PRs gemergt
6/15OpenSSF Scorecard: Code-Review — Found 9/19 approved changesets -- score normalized to 4
Verwendete Eingangsdaten
merged_prs1.007
open_issues0
closed_issues132
issue_closed_ratio1
closed_unmerged_prs98
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
7.2/25Reichweite des Inhabers — 9 Follower von csuzngjh
15.5/25Kontohistorie — 2 öffentliche Repos, Kontoalter ca. 11 Jahre
Verwendete Eingangsdaten
followers9
owner_typeUser
is_verified
owner_logincsuzngjh
public_repos2
account_age_days4.248
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 4 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 4 Tagen
20/20Versionshistorie — 232 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packages@principles/pd-cli, principles-disciple, @principles/core, create-principles-disciple
ecosystemsnpm
any_deprecatednein
min_days_since_publish4

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

86Exzellent · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 12 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — eslint.config.js
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 28 out of 28 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://principles-website.pages.dev
10/10Repository-Beschreibung
10/10Topics — 12 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsai-agent, monorepo, openclaw, openclaw-plugin, principles, self-improving, sqlite, typescript, pain-signals, agent-governance, co-evolution, alignment-layer
has_wikinein
homepagehttps://principles-website.pages.dev
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

72Gut · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — keine Daten
2.5/2.5CI-Tests — 28 out of 28 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
3/7.5Code-Review — Found 9/19 approved changesets -- score normalized to 4
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
3/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 6
5/5SAST — SAST tool is run on all commits
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 50 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6,5
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): branch_protection, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages161
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:@principles/pd-cli@1.133.0 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 161 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

80Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md, GEMINI.md, packages/create-principles-disciple/templates/langs/en/core/AGENTS.md, packages/create-principles-disciple/templates/langs/zh/core/AGENTS.md, packages/openclaw-plugin/src/core/AGENTS.md, packages/openclaw-plugin/src/hooks/AGENTS.md, packages/openclaw-plugin/templates/langs/en/core/AGENTS.md, packages/openclaw-plugin/templates/langs/zh/core/AGENTS.md, packages/website/video/homepage-demo/AGENTS.md, packages/website/video/homepage-demo/CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 81 von 81 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesAGENTS.md, CLAUDE.md, GEMINI.md, packages/create-principles-disciple/templates/langs/en/core/AGENTS.md, packages/create-principles-disciple/templates/langs/zh/core/AGENTS.md, packages/openclaw-plugin/src/core/AGENTS.md, packages/openclaw-plugin/src/hooks/AGENTS.md, packages/openclaw-plugin/templates/langs/en/core/AGENTS.md, packages/openclaw-plugin/templates/langs/zh/core/AGENTS.md, packages/website/video/homepage-demo/AGENTS.md, packages/website/video/homepage-demo/CLAUDE.md
agent_instruction_max_bytes22.917
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — eslint.config.js
11/11Statische Typprüfung — packages/create-principles-disciple/tsconfig.json, packages/openclaw-plugin/tsconfig.json, packages/pd-cli/tsconfig.json, packages/pd-console/tests/e2e/tsconfig.json, packages/pd-console/tsconfig.json, packages/principles-core/tsconfig.json, scripts/nocturnal/tsconfig.json, tests/e2e-fixtures/trap-01-circular-dep/tsconfig.json, tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
2/10Belegte Agentenpraxis — 1 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 19 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
6/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 6
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configspackages/create-principles-disciple/tsconfig.json, packages/openclaw-plugin/tsconfig.json, packages/pd-cli/tsconfig.json, packages/pd-console/tests/e2e/tsconfig.json, packages/pd-console/tsconfig.json, packages/principles-core/tsconfig.json, scripts/nocturnal/tsconfig.json, tests/e2e-fixtures/trap-01-circular-dep/tsconfig.json, tsconfig.json
agent_commit_share0,01
toolchain_manifests
dependency_bot_commit_share0,19
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
54.4/55Handhabbare Dateigrößen — 16/1.463 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes200.404
source_files_sampled1.463
oversized_source_files16

Eckdaten

1GitHub-Sterne
3Mitwirkende
1.712Commits, letzte 12 Monate
0Tage seit letztem Push
4Releases
1Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Could not fetch npm package '@principles/nocturnal-benchmark' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

Stern- und Fork-Verlauf 1 ★ / 1 ⇿
1Sterne
1Forks
3Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

0001111112026-052026-062026-06
Major 0Minor 2Patch 1
OpenSSF Scorecard 6.5 / 10
6.5Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-22 03:07 UTC

10Binary-Artifactsno binaries found in the repo
k. A.Branch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests28 out of 28 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
4Code-ReviewFound 9/19 approved changesets -- score normalized to 4
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
6Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 6
10SASTSAST tool is run on all commits
10Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities50 existing vulnerabilities detected
Direkte Abhängigkeiten 53
RegistryPaketVersionsvorgabeManifest
npmglob^13.0.6package.json
npm@inquirer/prompts^8.4.3packages/create-principles-disciple/package.json
npmcommander^14.0.3packages/create-principles-disciple/package.json
npmfs-extra^11.3.6packages/create-principles-disciple/package.json
npmjs-yaml^5.2.0packages/create-principles-disciple/package.json
npmora^9.4.0packages/create-principles-disciple/package.json
npmpicocolors^1.0.0packages/create-principles-disciple/package.json
npmsemver^7.8.5packages/create-principles-disciple/package.json
npmtar^7.5.15packages/create-principles-disciple/package.json
npm@principles/core^1.74.1packages/openclaw-plugin/package.json
npm@sinclair/typebox^0.34.48packages/openclaw-plugin/package.json
npmbetter-sqlite3^12.9.0packages/openclaw-plugin/package.json
npmcommander^12.0.0packages/openclaw-plugin/package.json
npmjs-yaml^5.2.0packages/openclaw-plugin/package.json
npmmicromatch^4.0.8packages/openclaw-plugin/package.json
npm@principles/core^1.74.1packages/pd-cli/package.json
npmprinciples-disciple^1.74.1packages/pd-cli/package.json
npmbetter-sqlite3^12.9.0packages/pd-cli/package.json
npmcommander^12.0.0packages/pd-cli/package.json
npmjs-yaml^4.1.1packages/pd-cli/package.json
npm@fontsource/jetbrains-mono^5.2.8packages/pd-console/package.json
npm@principles/core*packages/pd-console/package.json
npm@radix-ui/react-alert-dialog^1.1.15packages/pd-console/package.json
npm@radix-ui/react-dialog^1.1.15packages/pd-console/package.json
npm@radix-ui/react-select^2.2.6packages/pd-console/package.json
npm@radix-ui/react-slot^1.2.4packages/pd-console/package.json
npm@radix-ui/react-tooltip^1.2.11packages/pd-console/package.json
npm@tailwindcss/postcss^4.3.0packages/pd-console/package.json
npm@tailwindcss/vite^4.3.0packages/pd-console/package.json
npmautoprefixer^10.5.2packages/pd-console/package.json
npmbetter-sqlite3^12.9.0packages/pd-console/package.json
npmclass-variance-authority^0.7.1packages/pd-console/package.json
npmclsx^2.1.1packages/pd-console/package.json
npmi18next^26.1.0packages/pd-console/package.json
npmjs-yaml^4.2.0packages/pd-console/package.json
npmlucide-react^1.23.0packages/pd-console/package.json
npmpostcss^8.5.14packages/pd-console/package.json
npmpostcss-cli^11.0.1packages/pd-console/package.json
npmreact^19.2.7packages/pd-console/package.json
npmreact-dom^19.2.7packages/pd-console/package.json
npmreact-i18next^17.0.8packages/pd-console/package.json
npmreact-router-dom^7.15.0packages/pd-console/package.json
npmsemver^7.8.5packages/pd-console/package.json
npmsonner^2.0.7packages/pd-console/package.json
npmtailwind-merge^3.6.0packages/pd-console/package.json
npmtailwindcss^4.3.2packages/pd-console/package.json
npm@earendil-works/pi-agent-core^0.79.4packages/principles-core/package.json
npm@earendil-works/pi-ai^0.80.7packages/principles-core/package.json
npm@mariozechner/pi-ai^0.73.1packages/principles-core/package.json
npm@sinclair/typebox^0.34.48packages/principles-core/package.json
npmbetter-sqlite3^12.9.0packages/principles-core/package.json
npmjs-yaml^4.1.1packages/principles-core/package.json
npmtypebox^1.2.2packages/principles-core/package.json
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Abhängigkeits-Advisories 0

Die Installation von npm:@principles/pd-cli@1.133.0 zieht 161 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "ai-agent",
        "monorepo",
        "openclaw",
        "openclaw-plugin",
        "principles",
        "self-improving",
        "sqlite",
        "typescript",
        "pain-signals",
        "agent-governance",
        "co-evolution",
        "alignment-layer"
      ],
      "is_fork": false,
      "size_kb": 74437,
      "has_wiki": false,
      "homepage": "https://principles-website.pages.dev",
      "languages": {
        "CSS": 17023,
        "Vue": 59266,
        "HTML": 58196,
        "Shell": 166854,
        "Python": 202606,
        "JavaScript": 517646,
        "PowerShell": 8344,
        "TypeScript": 14877517
      },
      "pushed_at": "2026-07-22T01:58:27Z",
      "created_at": "2026-01-22T15:31:22Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T07:46:13Z",
      "description": "Owner-governed behavior alignment and co-evolution system for AI agents. Distills agent behavioral evidence into reviewed, reversible principles.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "PD",
      "type": "User",
      "login": "csuzngjh",
      "company": null,
      "location": null,
      "followers": 9,
      "avatar_url": "https://avatars.githubusercontent.com/u/10056748?v=4",
      "created_at": "2014-12-03T05:40:46Z",
      "is_verified": null,
      "public_repos": 2,
      "account_age_days": 4248
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.75.1",
          "kind": "patch",
          "published_at": "2026-07-03T10:08:10Z"
        },
        {
          "tag": "v1.74.1",
          "kind": "patch",
          "published_at": "2026-06-21T16:10:19Z"
        },
        {
          "tag": "v1.74.0",
          "kind": "minor",
          "published_at": "2026-06-06T06:31:05Z"
        },
        {
          "tag": "v1.73.0",
          "kind": "minor",
          "published_at": "2026-05-31T03:28:38Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "f7acb0f4a9c98ad4bb5614b13cf02479b4d3639a",
          "body": "…nalization-auto-consumer-service (#1235)\n\n* test: add coverage for pd-task-reconciler, evolution-dedup, and internalization-auto-consumer-service\n\nAdded comprehensive unit tests for three previously untested modules:\n\n1. pd-task-reconciler.test.ts (8 tests)\n   - Orphan job detection and logging\n   \n[…]\nruncation is removed.\n\n5. internalization-auto-consumer-service: replaced 'as any' casts with\n   OpenClawPluginServiceContext (project No-any rule) and renamed the\n   duplicated nested describe block.",
          "is_bot": false,
          "headline": "test: add coverage for pd-task-reconciler, evolution-dedup, and inter…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-17T07:46:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89c9185459e186a44e54d4e30af318c0e9e48324",
          "body": "…m #1234) (#1237)\n\n* fix(adapter): use openclaw message files\n\n* fix(adapter): use --message-file in healthCheck probe path\n\nThe previous commit renamed MessageFileRef from {arg, dir} to {filePath}\nand migrated startRun to --message-file, but missed the healthCheck\nprobe-3 path which still reference\n[…]\nAlso add an args assertion to the probe-3 health test so future\nMessageFileRef field renames are caught by tests, not just tsc.\n\n---------\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "fix(adapter): use --message-file in healthCheck probe path (split fro…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-17T07:43:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "22550fd5ac9fa38fbd3782b13dfeee1c44e460e4",
          "body": "* fix(runtime): bind trajectory context reader\n\n* test(plugin): cover trajectory reader wiring\n\n---------\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "fix(runtime): bind trajectory context reader (split from #1234) (#1236)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-17T07:34:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d43d968cd113d95b3388c00471c1df020786e3ce",
          "body": "… (#1213)\n\nProblem: prompt.ts had inconsistent trigger gating — `isUserInteraction`\n(defined inline as user/api/undefined) was used for behavioral-constraint\ninjection, but two other gates still used `trigger === 'user'`, and\nSignalCollectorHost.detectSync had its own `if (trigger !== 'user') return\n[…]\neatures/ asserts on the\ntrigger value; the .feature for story-a asserts the observable\npain → candidate → activation flow, which is unchanged (this fix makes\nMORE corrections flow through, not fewer).",
          "is_bot": false,
          "headline": "fix(prompt): align correction detection gating with isUserInteraction…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T15:29:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0762ea26268a80fa66bbe1e9f1346da60f2b4657",
          "body": "…1216)\n\nProblem: scripts/e2e-story-a.mjs had the Story A verdict computation inlined inside generateEvidence(), making it impossible to unit-test. Story A is the P0 MVP validation path — its verdict logic must be testable across all branches.\n\nChanges:\n\n- New scripts/e2e-story-a-verdict.mjs: pure fu\n[…]\n no .feature file under docs/specs/features/ corresponds to the e2e harness; the harness itself is the executable validation for Story A'.\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "refactor(e2e): extract Story A verdict computation for testability (#…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T15:05:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ea0ee1fa9ea1973234b446b2fefde310f1e8db87",
          "body": "… code (#1215)\n\nThree independent robustness fixes for plugin/build scripts:\n\n1. bootstrap-rules.mjs: Empty workspace throws 'No deterministic principles found in training store' which the script treated as a fatal error and exit(1). Now: source (bootstrap-rules.ts) sets err.code = 'NO_DETERMINISTIC\n[…]\nbootstrap-rules.mjs uses 'code' in err (own property check via 'in'); acceptable for plain Error objects where code is set via assignment.\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "fix(scripts): graceful empty-workspace bootstrap + truthful sync exit…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T14:49:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "978ccab0934268cb9a734018b67066a393bed25d",
          "body": "… (#1214)\n\nProblems:\n\n1. pd_shim_info canary check returned a hard-coded version string '0.1.0' that drifted from the actual pd-cli package version (currently 1.74.1), misleading operators about the installed version.\n\n2. runtime_health canary check could report 'healthy' overall status even when to\n[…]\n-action - degraded runtime_health now includes 'pain record' next action. cli-7-test-wiring - new test exercises real readCliVersion path.\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "fix(canary): report real package version and flag unexercised runtime…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T14:41:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5fdf956171f8a20410aa59aa6983f3b93113e1f6",
          "body": "…st errors) (#1217)\n\nPR #1211 added two test files that accessed array indices directly\n(result[0].id) without optional chaining, producing 38 TS2532/TS18048\nerrors under noUncheckedIndexedAccess. Same root cause as PR #1170.\nAlso notes the better-sqlite3 .get() returns {} sibling (TS2339) and\nthe m\n[…]\nty test branch (EP-09).\n\nCompressed earlier ERR-001 recurrences to reduce the field from 4.2KB\nto 2.1KB per check:error-handbook guidance.\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "docs: record ERR-001 recurrence (PR #1211 noUncheckedIndexedAccess te…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T14:23:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e363e9493ca88ea52c501c1d4f7ff792578552b5",
          "body": "…re (#1233)\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "test: add coverage for subagent-workflow modules and fix workflow-sto…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T10:33:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88152ced270752f89b9cbad4468500bd318f51ac",
          "body": "…ion (#1232)\n\nRecord EP-09 Test Reality Gap finding from PR #1218 self-review:\nquality-scorecard.test.ts line 797 used\n`expect(row.created_at >= before || row.created_at <= after).toBe(true)`\nto verify created_at falls in [before, after] window. The `||` makes\nthis a tautology true for ANY value whe\n[…]\nin ERROR_PATTERN_INDEX.md\n- Extend EP-09 Automation target with ||-joined range bounds scan\n- check:error-handbook passes: 94 entries consistent\n\nCo-authored-by: PD <csuzngjh@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs(error-handbook): record ERR-094 tautological range-bounds assert…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T01:43:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ac1ae7228b84cf7c07dc9413892c8d52833f0fd",
          "body": "…nclaw-plugin (#1223)\n\n* chore(deps-dev): bump typescript in /packages/openclaw-plugin\n\nBumps [typescript](https://github.com/microsoft/TypeScript) from 6.0.3 to 7.0.2.\n- [Release notes](https://github.com/microsoft/TypeScript/releases)\n- [Commits](https://github.com/microsoft/TypeScript/commits)\n\n-\n[…]\nsupport@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump typescript from 6.0.3 to 7.0.2 in /packages/ope…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-16T01:35:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8f3b0bbb586dba0f03fb8cc09b06217d42b67ca1",
          "body": "…ate-principles-disciple (#1222)\n\n* chore(deps-dev): bump typescript in /packages/create-principles-disciple\n\nBumps [typescript](https://github.com/microsoft/TypeScript) from 6.0.3 to 7.0.2.\n- [Release notes](https://github.com/microsoft/TypeScript/releases)\n- [Commits](https://github.com/microsoft/\n[…]\nsupport@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump typescript from 6.0.3 to 7.0.2 in /packages/cre…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-16T01:28:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "43dec3d540b84a947effdf2590ea9e1834a6b0b0",
          "body": "* test: add coverage for untested core modules and adapters\n\nAdd regression tests for critical modules that previously had zero test\ncoverage, addressing the highest-risk gaps in the principles-core package:\n\n- Adapters: OpenClawPainAdapter (31 tests), CodeReviewPainAdapter (18 tests),\n  WritingPain\n[…]\nirectory, and extract seedTestDb() helper to reduce duplication.\n\n---------\n\nCo-authored-by: Test Coverage Bot <test-coverage-bot@principles.dev>\nCo-authored-by: PD <csuzngjh@users.noreply.github.com>",
          "is_bot": false,
          "headline": "test: add coverage for untested core modules and adapters (#1228)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T01:18:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "963268fd231025b1b3feac8b5020cba5b4e0b02a",
          "body": "* test: add missing test coverage for core modules\n\nAdd comprehensive test coverage for high-risk areas:\n\n1. **evolution-store.ts** (23 tests):\n   - listEvolutionTasks: filtering by status, type, pagination, ordering\n   - getEvolutionTask: retrieval by task ID, error handling\n   - Edge cases: missin\n[…]\n to \\| and newline is replaced (not just that table rows exist).\n\n---------\n\nCo-authored-by: Test Gap Analyzer <test-gap-analyzer@principles.dev>\nCo-authored-by: PD <csuzngjh@users.noreply.github.com>",
          "is_bot": false,
          "headline": "test: add missing test coverage for core modules (#1218)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T01:08:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ae561401a6e9d9cdc3a735c65d3339af81efa4c9",
          "body": "Co-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "docs: add cloud PD quality handoff (#1231)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T00:58:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c056b641b45b798c6552a7d3b853fccf5de8c1e8",
          "body": "* fix(openclaw-plugin): capture current prompt turn\n\n* test(openclaw-plugin): remove ignored characterization input\n\n* fix(openclaw-plugin): minimize session ids in logs\n\n* fix(openclaw-plugin): retain retry after signal failure\n\n---------\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "fix(openclaw-plugin): capture current prompt turn (#1230)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T00:51:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b913224c734108a9b85ee14e596b3a0bf80bba95",
          "body": "…il-works/pi-ai-0.80.6\n\nchore(deps): bump @earendil-works/pi-ai from 0.79.4 to 0.80.7",
          "is_bot": false,
          "headline": "Merge pull request #1226 from csuzngjh/dependabot/npm_and_yarn/earend…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-16T00:11:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a7461363c9d73c25c1a05cbf5d33e56d831c3e2",
          "body": "pi-ai 0.80 moved getModel/getProviders/completeSimple into the /compat subpath. Update L2AgentLoopAdapter imports and vi.mock path so tsc and unit tests pass against 0.80.x.",
          "is_bot": false,
          "headline": "fix(adapter): migrate pi-ai imports to /compat for 0.80 compat",
          "author_name": "AI Assistant",
          "author_login": null,
          "committed_at": "2026-07-16T00:00:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ff53b86376a4b26e33e4fb48aaf30296718635c",
          "body": "Bumps [@earendil-works/pi-ai](https://github.com/earendil-works/pi/tree/HEAD/packages/ai) from 0.79.4 to 0.80.7.\n- [Release notes](https://github.com/earendil-works/pi/releases)\n- [Changelog](https://github.com/earendil-works/pi/blob/main/packages/ai/CHANGELOG.md)\n- [Commits](https://github.com/eare\n[…]\nency-name: \"@earendil-works/pi-ai\"\n  dependency-version: 0.80.6\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump @earendil-works/pi-ai from 0.79.4 to 0.80.7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-15T15:48:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "06fb7b014f4b907c2631d604bfb0d407100e663b",
          "body": "Bumps [semver](https://github.com/npm/node-semver) from 7.8.4 to 7.8.5.\n- [Release notes](https://github.com/npm/node-semver/releases)\n- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/npm/node-semver/compare/v7.8.4...v7.8.5)\n\n---\nupdated-depende\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump semver from 7.8.4 to 7.8.5 (#1224)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-15T15:46:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b1d0a2b5780489257e405ad7a67a825fe781c842",
          "body": "Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.1.0 to 26.1.1.\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)\n\n---\nupdated-depe\n[…]\ndate:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump @types/node (#1219)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-15T15:17:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c6d335cd414bc3dbe1c56b70aa8956dc9ee85fb7",
          "body": "Bumps [tsx](https://github.com/privatenumber/tsx) from 4.21.0 to 4.23.1.\n- [Release notes](https://github.com/privatenumber/tsx/releases)\n- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)\n- [Commits](https://github.com/privatenumber/tsx/compare/v4.21.0...v4.23.1)\n\n--\n[…]\ndate:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump tsx from 4.21.0 to 4.23.1 (#1227)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-15T15:09:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e766b1bd199bd7812b7f5efc0bb9ae18ddeb6de1",
          "body": "Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.3.1 to 4.3.2.\n- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)\n- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)\n- [Commits](https://github.co\n[…]\ndate:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps): bump tailwindcss from 4.3.1 to 4.3.2 (#1225)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-15T15:04:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "202bd20e29c414f910f91bbfbf2ff297516895e8",
          "body": "---\nupdated-dependencies:\n- dependency-name: tar\n  dependency-version: 7.5.20\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps): bump tar in /packages/create-principles-disciple (#1220)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-15T14:59:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df30f2a3f357b1a80433ef8c35b10b34c73e062e",
          "body": "---\nupdated-dependencies:\n- dependency-name: semantic-release\n  dependency-version: 25.0.7\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump semantic-release from 25.0.5 to 25.0.7 (#1221)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-15T12:21:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0179f816f23f72851eeb959201be6ec3890af7a6",
          "body": "…/513 (#1229)\n\n* docs(specs): add progressive disclosure design review for PRI-511/512/513\n\n评审信息共享池三层级工单的设计方案,基于 2026 业界上下文工程共识提出渐进式披露替代方案。\n\n识别工单方案的 5 个根本问题:违背最小高信号集合原则、未讨论写入时冗余 vs 读取时回溯、无 token 预算管理、无相关性排序、与代码现状的事实偏差。\n\n替代方案:三层信息披露架构(TL;DR / 结构化摘要 / 原始详情)+ ContextManifest 声明式需求 + PromptBudgetManager\n[…]\n。\n\n7. [中等] 补全 extractScribeArtifactId 的 sourceScribeArtifactId fallback 描述。\n\n新增 §11 自检评审修正日志,完整记录 v1→v2 的修正内容和仍需 Owner 判断的开放问题。\n\n---------\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "docs(specs): add progressive disclosure design review for PRI-511/512…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-15T09:43:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7bdbeb1954bf49832b70b8af4f6111ac35ef99b8",
          "body": "…ion_observer (#1212)\n\n* fix(config): switch MVP default runtime to openclaw + disable correction_observer\n\nProblem: MVP installs default to pd.default (pi-ai) profile whose provider/model/apiKeyEnv are empty placeholders, leaving the runtime in needs_setup state immediately after install. The plugi\n[…]\nrver enabled:false\n\nVerification:\n- Each affected test file run individually: all pass\n- tsc --noEmit: 0 errors (core + pd-cli)\n\n---------\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "fix(config): switch MVP default runtime to openclaw + disable correct…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-12T14:35:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36fddb45272221f4a42199952f6f86a55d7a1448",
          "body": "…e (#1211)\n\n* test(core): add unit tests for principle-injector and trajectory-store\n\nAdds 31 new unit tests covering 2 high-value core modules that previously lacked dedicated test coverage:\n\n1. principle-injector (16 tests):\n   - formatForInjection: basic formatting, empty text\n   - getRelevantPri\n[…]\ncation:\n- tsc --noEmit: 0 errors (was 38)\n- eslint: 0 errors (was 3)\n- npm run build: success\n- New tests: 31/31 pass (16 + 15)\n\n---------\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "test(core): add unit tests for principle-injector and trajectory-stor…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-12T12:22:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8d3bf660ee320e1d2508611bd7248cad76c948a9",
          "body": "…ion (>=2026.4.4) (#1207)\n\n* fix(plugin): auto-configure allowConversationAccess + fix compat version\n\ncompat.pluginApi was exact '2026.4.4', blocking plugin load on OpenClaw 2026.6.11.\n\nChanged to semver range '>=2026.4.4' so the plugin loads on newer hosts.\n\nAdded postinstall script (scripts/posti\n[…]\nr variables and unused openSync/closeSync imports.\n\n---------\n\nCo-authored-by: AI Assistant <ai-assistant@principles.local>\nCo-authored-by: Post-Commit Checker <ai-postcommit-checker@principles.local>",
          "is_bot": false,
          "headline": "fix(plugin): auto-configure allowConversationAccess + fix compat vers…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-11T14:22:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5744cd2bd6ee15f4a991a045c2cab3a7535d9cd7",
          "body": "…g-mask, and workflow-funnel-loader (#1209)\n\n* test(core): add dedicated unit tests for bridge-result-shaper, pruning-mask, and workflow-funnel-loader\n\nAdds 62 new unit tests covering 3 high-value core modules that previously\nlacked dedicated test coverage:\n\n1. bridge-result-shaper (17 tests):\n   - \n[…]\nlows. Add regression test for the double-failure scenario.\n\n---------\n\nCo-authored-by: Test Coverage Bot <test-coverage-bot@principles.dev>\nCo-authored-by: AI Assistant <ai-assistant@principles.local>",
          "is_bot": false,
          "headline": "test(core): add dedicated unit tests for bridge-result-shaper, prunin…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-10T12:54:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d676e36ffb0b5eb110a7aa378a740bb510e38c6b",
          "body": "…xes (#1204)\n\n* test: fill regression test gaps for recent security and validation fixes\n\nCovers 4 high-risk areas identified in the last 20 merged commits:\n\n1. principle-tree-ledger atomicWriteFileSync (commit 105aa921):\n   - Verifies no predictable .tmp file remains after writes\n   - Verifies .pd-\n[…]\nction instead of claiming to test env var behavior\n\n* fix: remove unused beforeEach/afterEach imports flagged by CodeQL\n\n---------\n\nCo-authored-by: Test Coverage Bot <test-coverage-bot@principles.dev>",
          "is_bot": false,
          "headline": "test: fill regression test gaps for recent security and validation fi…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-08T15:45:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cdf25a78164cb4ec5ca9a7ae9c1a8f1c83df8b2f",
          "body": "…es (#1194)\n\n* test(pd-console): add coverage for workspaces and update-history routes\n\nAdd comprehensive test coverage for two previously untested server routes:\n\n- Workspaces API (GET/POST/PATCH/DELETE /api/workspaces, POST /sync):\n  covers input validation (name length, slashes, path emptiness),\n\n[…]\nlock down the validation contract.\n- Malformed update-history files previously had no regression guard\n  for the graceful-degradation path.\n\n* test(pd-console): fix import order in update-history test",
          "is_bot": false,
          "headline": "test(pd-console): add coverage for workspaces and update-history rout…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-08T15:36:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b596746b2d72c1cb59983aec948a45557803d10",
          "body": "…#1206)\n\nPR #1200 bumped react-dom to 19.2.7 but left react at 19.2.6, causing npm to\n\ninstall duplicate copies (root 19.2.6 as peer, nested 19.2.7 for pd-console).\n\nesbuild bundles both copies, leading to: pageerror: Cannot read properties of\n\nnull (reading 'useMemo') in all 17 smoke-all-pages e2e tests.\n\nFix: bump react to ^19.2.7 in pd-console + scaffold template, and manually\n\ndedupe the lock file to hoist a single react@19.2.7 + react-dom@19.2.7 to root.",
          "is_bot": false,
          "headline": "fix(console): align react to 19.2.7 to dedupe with react-dom 19.2.7 (…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-08T15:16:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd8e748408902d294936d90e254b94c943dcd782",
          "body": null,
          "is_bot": false,
          "headline": "fix(ci): build principles-core before regression e2e tests (#1205)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-08T12:56:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bba3123b7553a10b27258d19c26f6cd23fe3f897",
          "body": "…tree-ledger (#1203)\n\n* test(core): pin atomic-write + lock hardening contract for principle-tree-ledger\n\nPR #1179 (fix(security): resolve CodeQL insecure-temporary-file alerts\nin principle-tree-ledger) added three security-relevant behaviors without\ndedicated regression tests:\n\n  1. atomicWriteFile\n[…]\nnd applies the prefix filter, then replace the\nthree inline call sites.\n\nNo behavior change; same 8 tests pass.\n\n---------\n\nCo-authored-by: PD Test Gap Analyzer <ai-test-gap-analyzer@principles.local>",
          "is_bot": false,
          "headline": "test(core): pin atomic-write + lock hardening contract for principle-…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-08T12:27:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1da60d4e2cd156668552b662f698c76d3909c9f",
          "body": "Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 1.14.0 to 1.23.0.\n- [Release notes](https://github.com/lucide-icons/lucide/releases)\n- [Commits](https://github.com/lucide-icons/lucide/commits/1.23.0/packages/lucide-react)\n\n---\nupdated-dependencies:\n-\n[…]\ndate:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps): bump lucide-react from 1.14.0 to 1.23.0 (#1202)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-08T12:22:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "99fb292963de8033175fed8eaf813fad656e03e6",
          "body": "Bumps [fs-extra](https://github.com/jprichardson/node-fs-extra) from 11.3.5 to 11.3.6.\n- [Changelog](https://github.com/jprichardson/node-fs-extra/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/jprichardson/node-fs-extra/compare/11.3.5...11.3.6)\n\n---\nupdated-dependencies:\n- dependency-name\n[…]\ndate:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps): bump fs-extra from 11.3.5 to 11.3.6 (#1201)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-08T12:17:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "637aba879139314d904c4ffce20db3788cdfad08",
          "body": "Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) from 19.2.6 to 19.2.7.\n- [Release notes](https://github.com/facebook/react/releases)\n- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/facebook/react/commits/v19.2.7/pa\n[…]\ndate:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps): bump react-dom from 19.2.6 to 19.2.7 (#1200)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-08T12:11:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c03b9064305895548bd750615b5f769bc3a9777",
          "body": "Bumps [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tooltip) from 1.2.10 to 1.2.11.\n- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tooltip/CHANGELOG.md)\n- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages\n[…]\ndate:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps): bump @radix-ui/react-tooltip from 1.2.10 to 1.2.11 (#1199)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-08T00:43:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "779e8fba13e6da2d2f3a3f1736d92677667a0390",
          "body": "Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.61.0 to 8.62.1.\n- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)\n- [Changelog](https://github.com/typescript-eslint/typescript-es\n[…]\ndate:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump @typescript-eslint/eslint-plugin (#1198)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-08T00:37:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1386ac5533b63e709bb75c65418ce7ade257bf03",
          "body": "Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.0.1 to 26.1.0.\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)\n\n---\nupdated-depe\n[…]\ndate:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump @types/node (#1197)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-08T00:31:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d2d718b2e25f78807d080e6680a8082feb4c1c9b",
          "body": "…1196)\n\nBumps [fs-extra](https://github.com/jprichardson/node-fs-extra) from 11.3.5 to 11.3.6.\n- [Changelog](https://github.com/jprichardson/node-fs-extra/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/jprichardson/node-fs-extra/compare/11.3.5...11.3.6)\n\n---\nupdated-dependencies:\n- depende\n[…]\ndate:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "chore(deps): bump fs-extra in /packages/create-principles-disciple (#…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-08T00:25:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac421e3cf3e1df33c7eb01a46043aadace70e948",
          "body": "…195)\n\nBumps [js-yaml](https://github.com/nodeca/js-yaml) from 5.2.0 to 5.2.1.\n- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/nodeca/js-yaml/compare/5.2.0...5.2.1)\n\n---\nupdated-dependencies:\n- dependency-name: js-yaml\n  dependency-version: 5.\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump js-yaml in /packages/create-principles-disciple (#1…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-08T00:10:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2bae4e31fd6ef24dc135171fdfae1bf728dd3862",
          "body": "… npm registry has no @csuzngjh scope (#1193)\n\nRoot cause: commit 0d5aebee renamed packages/openclaw-plugin/package.json name from 'principles-disciple' to '@csuzngjh/principles-disciple', but the npm registry only has the unscoped package (published by npm user 'principles-disciple', currently at v\n[…]\nn (auto-regenerated by npm install)\n\nTests: npm run build succeeds for @principles/core, principles-disciple, @principles/pd-cli; mvp-config.test.ts 217 tests pass; runtime-init.test.ts 14 tests pass.",
          "is_bot": false,
          "headline": "fix(publish): revert package name to principles-disciple (no scope) —…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-05T14:17:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d8b67c58bf84690dba096c3e9abd52c459f2cb45",
          "body": "Commit e22e1c68 (ci: migrate to npm Trusted Publishing) accidentally removed the env: NODE_AUTH_TOKEN from the Publish to npm step, mistaking --provenance as replacing auth. --provenance only generates provenance statements via OIDC; the publish operation itself still requires a NODE_AUTH_TOKEN.\n\nSy\n[…]\nAI never repeats the same mistake.' Previous descriptions were too technical ('Evolutionary programming agent framework with strategic guardrails and reflection loops.') for ClawHub marketplace users.",
          "is_bot": false,
          "headline": "fix(ci): restore NODE_AUTH_TOKEN env on Publish to npm step (P0) (#1192)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T23:41:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13f6e3222e69c1a2e20dad6570179411ae2d349d",
          "body": "…gin (#1191)\n\n* fix(publish): add prepack hook and refresh manifest fingerprint for npm publish\n\nGA workflow's build step only runs tsc, which produces dist/*.js but NOT dist/bundle.js (the plugin's setupEntry). Without prepack, the published npm tarball would be missing bundle.js, making @csuzngjh/\n[…]\n 1.196.1, and publishes @csuzngjh/principles-disciple@1.196.1 — version detaches from source.\n\nFixed 5 sites: workflow_dispatch default, options list, case branch, matrix echo, and check_and_add call.",
          "is_bot": false,
          "headline": "fix(publish): enable npm + ClawHub dual-channel publishing for PD plu…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T23:27:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f9dc8b9f7aec9d859a6227c0b2f75b779e497c13",
          "body": "… instead of 404 for missing principle (PRI-515) (#1190)\n\nBrowser auto-logs 404 network responses to console, which frontend try/catch cannot suppress. Return 200 with the same insufficientData shape the model layer already uses for principles without rules, so the frontend needs only one rendering path.\n\nERR-002/074/089 — EP-03 graceful degradation with structured reason, branch coverage parity.",
          "is_bot": false,
          "headline": "fix(console): DEFECT-006 lifecycle API returns 200 + insufficientData…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T14:30:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "566bb3b890939c3f26508b77f90f632a51421b7b",
          "body": "…sons sibling dreamer seed (PRI-514) (#1189)\n\nPreviously a single defer candidate refused by the admission gate set a\nglobal intakeFailed flag that gated the ENTIRE dreamer seed loop,\nskipping dreamer seed for all sibling candidates that succeeded intake\n(principle/rule/prompt). This is an EP-03 / E\n[…]\nefused + principle/rule/prompt consumed ->\nall 3 still dreamer_seeded), DEFECT-005-B (all intake_failed -> 0\ndreamer_seeded boundary). Full diagnose suite (43 tests) + pd-cli\nsuite (1367 tests) green.",
          "is_bot": false,
          "headline": "fix(diagnose): DEFECT-005 defer candidate intake_failed no longer poi…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T14:24:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d6e2a1f77ddeda8150f5d874fe8998c72c37db12",
          "body": "…th (#1188)\n\n* fix(pri-510): wire EvaluatorRunner repair loop into CLI production path\n\nEP-02 (Production Path Wiring): PRI-509 added isRepairLoopEnabled and seedArtificerRepairTask deps to EvaluatorRunnerDeps (core), but the two CLI production paths (runtime-internalization-run-once.ts and rulehost\n[…]\nemp dir creation as insecure (path-prediction risk). Switch to fs.mkdtempSync which is atomic and unpredictable. Both createTempWorkspace and the malformed-config test updated. Tests still pass (7/7).",
          "is_bot": false,
          "headline": "fix(pri-510): wire EvaluatorRunner repair loop into CLI production pa…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T11:38:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33ac0aa7e780783d299d0282c7be0d78755b295d",
          "body": "…#1187)\n\n* chore(website): add Cloudflare Web Analytics beacon\n\nInject the privacy-first Cloudflare Web Analytics beacon into the VitePress head config so all 31 generated HTML pages carry the snippet.\n\nToken: 17b7954b9e24419198b8837990ddb022 (public, embedded in HTML by design)\n\n* chore(website): a\n[…]\nide)\n\n- cta_read_install_guide (InstallSection)\n\n- outbound_click (ClosingSection GitHub link)\n\nImplementation uses pure HTML data-umami-event attributes (zero JS code, auto-captured by Umami script).",
          "is_bot": false,
          "headline": "chore(website): add Cloudflare Web Analytics + Umami event tracking (…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T10:43:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b43c138ed45bbfa9f7afeed86f8eb1ca7d230656",
          "body": "* feat(pri-509): evaluator-artificer repair loop with 2-round cap\n\nImplements the evaluator-to-artificer repair loop as 5 TDD vertical slices:\n\nSlice 1: register feature flag evaluator_artificer_repair_loop (quiet, default off, 2026-07-04).\n\nSlice 2: artificer-prompt-builder accepts optional repairF\n[…]\nd RepairPayload type instead of duplicating the shape inline (prevents drift).\n\nAll 116 tests pass (49 pitask-metadata + 60 artificer-runner-vslice + 7 evaluator-repair-loop). Lint clean. Build clean.",
          "is_bot": false,
          "headline": "feat(pri-509): evaluator-artificer repair loop with 2-round cap (#1186)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T09:52:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a158e8eca3215499940633e830025ffd4a92982c",
          "body": "Broaden ERR-083 to include package identity (name field) as a shared\n\ncontract — package rename must propagate to CI workflow --workspace refs.\n\nAdd recurrences:\n\n- ERR-002: readCoreVersion silent catch hid missing ./package.json export\n\n- ERR-088: markRetried multi-row UPDATE + failed-tasks pagination signal\n\nUpdate EP-02 card with package identity change guidance.",
          "is_bot": false,
          "headline": "docs(error-handbook): record PR #1182 review findings (#1185)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T07:45:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10607949fe0a8de6249fa2a6aa00c8801fa4c2e2",
          "body": "… capability boundary (#1184)\n\n* feat(pri-508): artificer dreamer 5-dim context passthrough + RuleHost capability boundary\n\nRoot cause: artificer only sees scribe's compressed principleDraft, loses dreamer 5-dim candidate (badDecision/betterDecision/rationale/riskLevel/strategicPerspective). artific\n[…]\niskLevel/strategicPerspective) absent → still resolves\n\nartificer-runner.ts line coverage: 68.33% → 86.85%. All 56 tests in\n\nartificer-runner-vslice.test.ts pass; full suite 6221 passed, 0 regression.",
          "is_bot": false,
          "headline": "feat(pri-508): artificer dreamer 5-dim context passthrough + RuleHost…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T07:04:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0d5aebee72cfef11c0278f42243421484c7e2b25",
          "body": "…iled tasks UI (#1182)\n\n* chore: restore user package.json name + add bug_report.yml template\n\n* feat(feedback-pipeline): observability — dead letter, agent draft, failed tasks UI\n\nSpec: .trae/specs/feedback-pipeline-observability\n\nCore:\n\n- Add SqliteDeadLetterStore + dead_letter_pains table (rc-9: \n[…]\nbody by ENCODED length (1800) not raw length (4000) -- encodeURIComponent can 3x expand, risking Outlook's ~2000-char mailto limit\n\n- mailto-url.test: update assertions to verify encoded-length budget",
          "is_bot": false,
          "headline": "feat(feedback-pipeline): observability — dead letter, agent draft, fa…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T06:55:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9872c478b0d767afadb1ab9bfaf481858bdd3116",
          "body": "* fix(platform): make scripts cross-platform for Linux/macOS\n\nReplace Windows-only PowerShell scripts with Node.js (.mjs) unified versions that work on all platforms. The .ps1 files are kept as 1-line wrappers for backward compatibility.\n\n- setup-private-docs-symlink.mjs: cross-platform junction/sym\n[…]\nmove unused isWin variable\n\n2. setup-worktree.mjs: remove unused os import\n\n3. install-hooks.mjs: replace existsSync+readFileSync with try/catch to\n\n   eliminate TOCTOU race condition (CodeQL finding)",
          "is_bot": false,
          "headline": "fix(platform): make scripts cross-platform for Linux/macOS (#1183)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T06:48:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "357933804c34c0b3dc28ef6bffd252dc00f75ff5",
          "body": "…e coverage) (#1181)",
          "is_bot": false,
          "headline": "docs(err-089): record PRI-442 PR #1180 recurrence (boolean-OR sub-cas…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T01:21:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efb9af2ce3c4f08503a1c5bbdec619a737d17701",
          "body": "…ure (rc-9) (#1180)\n\n* test(pri-442): A-09 add failing test for rc-9 observability on non-write-tool rejection\n\nRED commit for PRI-442 A-09 rc-9-no-silent-fallback.\n\nAsserts that when a non-WRITE_TOOL FAILURE is rejected at the tool-name\ngate, evaluatePainAdmissionForToolCall emits a structured obse\n[…]\nently (CodeRabbit nitpick)\n\nReplace (SystemLogger.log as ReturnType<typeof vi.fn>) with\nvi.mocked(SystemLogger.log) at 2 sites for consistency with line 89\nand to avoid the as-bypass pattern per rc-2.",
          "is_bot": false,
          "headline": "fix(pri-442): A-09 emit PAIN_ADMISSION_SKIPPED on non-WRITE_TOOL fail…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-04T01:16:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "105aa921356c0b77b68d12b4fe5c6840c96a5d37",
          "body": "…iple-tree-ledger (#1179)\n\n* fix(security): resolve CodeQL insecure-temporary-file alerts in principle-tree-ledger\n\natomicWriteFileSync: replace predictable '.tmp' suffix with mkdtempSync-generated unique temp directory in the same filesystem as the target. Prevents symlink-attack and predictable-na\n[…]\ne + rename + retry into a try block and cleanup into the\nfinally block guarantees tmpDir is always removed on every exit path —\nincluding early writeFileSync failures that previously bypassed cleanup.",
          "is_bot": false,
          "headline": "fix(security): resolve CodeQL insecure-temporary-file alerts in princ…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T14:06:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6cc037cb10dfc85fa4e88df646f97c4a058637a6",
          "body": "…llback (#1178)\n\nBug #1 fix (effectiveConfig extraction) in diagnose.ts/pain-retry.ts added no observability for the ok:false fallback path, violating rc-9-no-silent-fallback. Same class as the PRI-483/PR#1098 recurrence (loadPdConfig ok:false path). CodeRabbit caught the rc-9 violation + test gap; fixed in PR #1177 commit 642043a9. Updates ERR-002 Recurrence field.",
          "is_bot": false,
          "headline": "docs(err-002): record PRI-442 PR #1177 recurrence of silent config fa…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T12:45:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "023b5fdbc47f6773694976ff122ab0b41c05481d",
          "body": "…consistency (#1177)\n\n* fix(pri-442): wire effectiveConfig + sourcePainId + artificer prompt consistency\n\nBug #1: diagnose.ts and pain-retry.ts now extract effectiveConfig from configLoadResult and pass it to the 3 split-pipeline runners, so ADR-0019 LLM rate-limit degradation (isDegradationEnabled)\n[…]\nck only covered ok:true; add ok:false test asserting warn + defaults-based effectiveConfig\n\nTDD: RED (failing ok:false test) -> GREEN (add console.warn) -> REFACTOR (no extraction, 2 sites acceptable)",
          "is_bot": false,
          "headline": "fix(pri-442): wire effectiveConfig + sourcePainId + artificer prompt …",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T12:40:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1d23ff2d4cb49d2320a6a07d313807438af76710",
          "body": "…176)\n\n* feat(console): introduce slash commands step in onboarding wizard\n\nAdd Step 3 to the welcome wizard showing 7 core slash commands.\n\nRefactor commands from i18n array to TS module + flat i18n keys to comply with cr10-i18n-governance test.\n\nFix pollingError i18n key migration (step3 -> step4)\n[…]\n: progress.step4 was 'Invite' but step4 title is 'Ready to record real evidence'. Changed to 'Evidence'/'证据' to match step content and keep noun-label consistency with step1-3 (Welcome/Demo/Commands).",
          "is_bot": false,
          "headline": "feat(console): introduce slash commands step in onboarding wizard (#1…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T10:16:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0ec08231b94397a8d72fab718cf4db3ebc5292ff",
          "body": "…/505 (#1167)\n\nERR-089 recurrence: PRI-503 admission gate bypass in pain-retry/diagnose (sibling branch遗漏)\n\nERR-092 new: SystemLogger module-level cache leaks across workspaces (PRI-504)\n\nERR-040 recurrence: PRI-505 bundle-plugin.mjs missing dist/bundle.js check\n\nEP-07 broadened to cover module-level cache cross-workspace leakage pattern",
          "is_bot": false,
          "headline": "docs(err): record ERR-089/ERR-092/ERR-040 recurrences for PRI-503/504…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T07:58:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d77d453ccb0b4b74d4097ab009ba032e235b8ee0",
          "body": "…em root (#1175)\n\n* fix(runtime): guard mock-leak workspace paths from polluting filesystem root\n\nTest code historically uses Unix-style mock strings like '/fake/workspace' and '/mock/state' as mock workspaceDir values. On Windows, Node.js resolves these against the current drive letter — '/fake/wor\n[…]\n chore: suppress CodeQL false positives in io.ts and file-lock.ts\n\nBoth files write to paths alongside their target (not in os.tmpdir()),\nand file-lock.ts already uses O_EXCL for safe atomic creation.",
          "is_bot": false,
          "headline": "fix(runtime): guard mock-leak workspace paths from polluting filesyst…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T07:45:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "52bacd438e0daf00f34f52eef23c490c5e87858e",
          "body": "…(#1174)\n\n* fix(pri-442): close 3 internal-acceptance bugs (FINDING-002/003/004)\n\nFINDING-002: add PD_SKIP_GLOBAL_SHIM env var so smoke tests skip global\n\npd shim install (mirrors PD_SKIP_NPM_UPGRADE), avoiding host npm bin pollution.\n\nFINDING-003: clarify pd pain evidence docs — TRIGGER_DECISION en\n[…]\n finding (P3): Type.Union has 19 categories (incl. rate_limit),\n\nFAILURE_CATEGORY_MAP has 6 deduplicated user-facing values. Previous\n\ncomment said 18/9 due to pre-existing count drift, now corrected.",
          "is_bot": false,
          "headline": "fix(pri-442): close 3 internal-acceptance bugs (FINDING-002/003/004) …",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T05:29:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ec781ddad54e4896d70bb6e4ddd2c50d79a8425",
          "body": "…or-host edge cases (#1173)\n\n* test: add coverage for contextInjection validation and signal-collector-host edge cases\n\n- Add 19 tests for contextInjection config validation (validateContextInjectionConfig, validateEvolutionContextConfig)\n- Add 15 new tests for signal-collector-host boundary conditi\n[…]\nrtion)\non line 256. The Record<string, unknown> type is directly assignable to\nPartialContextInjectionConfig, so the  cast is redundant.\n\n---------\n\nCo-authored-by: Trae Assistant <assistant@trae.dev>",
          "is_bot": false,
          "headline": "test: add coverage for contextInjection validation and signal-collect…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T05:21:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "233a6f1cc20fdafd3e71992e5695f295c5800d9b",
          "body": "…across P0-P3) (#1166)\n\n* fix(installer): unblock first-run onboarding via version, runtimeProfile, and detection fixes\n\nOnboarding flow review P0+P1 fixes for create-principles-disciple:\n\n- Fix-1 (P0): read version from package.json instead of hardcoded 2.0.0\n\n- Fix-4 (P0): prompt LLM runtimeProfil\n[…]\nL. If the file exists (pre-existing or created concurrently), EEXIST\n\nis caught and the existing config is preserved (PRI-308).\n\nAll 235 create-principles-disciple tests pass (mvp-config + installer).",
          "is_bot": false,
          "headline": "fix(onboarding): comprehensive first-run experience review (30 fixes …",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T05:15:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b2fc61a9ea2760384c61ec1741222f7f0bfe0929",
          "body": "…(#1168)\n\nExtract checkAdmissionGate from candidate.ts to shared admission-gate.ts helper. Apply gate check before intakeService.intake() in pain-retry.ts and diagnose.ts, mirroring candidate.ts (intake/repair/backfill).\n\nERR-089 recurrence: PR #1134 fixed candidate.ts but missed these two sibling b\n[…]\nre CLI commands from re-introducing the bypass.\n\ncli-5-failure-no-mutation: gate refusal does not call intake/update/ledger. cli-6-output-next-action: refusal result carries admissionBlock.nextAction.",
          "is_bot": false,
          "headline": "fix(pri-503): close admission gate bypass in pain-retry and diagnose …",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T05:10:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "502c76f4602e93d49134ace34522fd16726ab7ce",
          "body": "…-workspace leakage (#1171)\n\nERR-092 recurrence: cachedLogFile/cachedLogDate/lastCleanupDate were module-level let variables, so the first workspace to call log() pinned the log file path for ALL subsequent workspaces in the same Node.js process. Multi-workspace E2E isolation (PRI-442) was broken: w\n[…]\natch preserved as original fire-and-forget design; cache now correctly isolated before any failure). No .feature files affected. No new ERR registration (PR #1167 already recorded ERR-092 recurrence).",
          "is_bot": false,
          "headline": "fix(pri-504): key SystemLogger cache by workspaceDir to prevent cross…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T05:03:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "12c2d953b03125891c211d9096537013b283e20b",
          "body": "…only builds (#1172)\n\n* fix(pri-505): require dist/bundle.js in PLUGIN_REQUIRED to catch tsc-only builds\n\nERR-040 recurrence: PLUGIN_REQUIRED only checked for the 'dist' directory, not the specific 'dist/bundle.js' file. If a developer ran only 'tsc' without esbuild, dist/ would exist but bundle.js \n[…]\neserve .d.ts files\n\nbuild:bundle (esbuild) cleans dist/ directory. Running it after tsc destroys the .d.ts files generated by tsc, breaking pd-cli type checking. Reorder: build:bundle first, then tsc.",
          "is_bot": false,
          "headline": "fix(pri-505): require dist/bundle.js in PLUGIN_REQUIRED to catch tsc-…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T04:53:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "95bb0cfa0796f845cda97c717559b3b6c4dd8f2d",
          "body": "* docs(specs): security baseline design draft for MVP-Core hardening\n\n* docs(security): add SECURITY.md vulnerability disclosure policy\n\nSEC-BASE-1 supply chain control. SLA: ack 48h, high/critical fix 14d, medium/low 30d. Reports via GitHub Security Advisory only — no public issues.\n\n* ci(security)\n[…]\nts (rc-9-no-silent-fallback).\n\nP3 nitpick:\n\n- spec doc: fix markdown emphasis spacing (MD037) and add language tag to fenced code block (MD040).\n\nVerification: SEC-BASE-5 tests 3/3 pass, eslint clean.",
          "is_bot": false,
          "headline": "feat(security): establish PD security baseline (SEC-BASE-1~5) (#1170)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T04:31:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1eeb864ae12255075efe01144d636244945cd7c8",
          "body": "…/pd-help listing (#1169)\n\n* fix(plugin): harden slash-command runtime validation and complete /pd-help listing\n\nFix P1 rc-1/rc-2 violations in /pd-thinking and /pd-workflow-debug:\n\n- thinking-os.ts: JSON.parse result now treated as unknown, validated via isRecord() before field access; readNumber()\n[…]\npd-help Chinese branch (language=zh) and English branch (language=en), asserting all 7 previously-missing commands now appear.\n\nTests: openclaw-plugin 1976 passed / 0 failed (was 1959, +17 new tests).",
          "is_bot": false,
          "headline": "docs(plugin): slash-command reference + fix rc-1/rc-2 violations and …",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T03:47:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d280ca845a97cad102c798ddf6f84de4e63f4a98",
          "body": "…(#1165)\n\nPR #1164 used workspaceDir.includes('e2e-workspace') to gate E2E pain\n\nadmission, which is the same root cause class as ERR-030 (path substring\n\nmatching causing unintended behavior switches). Fixed by switching to an\n\nexplicit env-var signal (PD_E2E_MODE=1).\n\nRecurrence update only — no new ERR entry.",
          "is_bot": false,
          "headline": "docs(err-030): record PR #1164 recurrence of path-substring matching …",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T02:00:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4326d052f4337568acb39b893ac36d34c50eaac4",
          "body": "…1164)\n\n* test(e2e): isolate workspace for E2E runs by running agent locally\n\n* fix(pr-review): gate E2E mode by env var, reuse BASH_TOOL_NAMES, isolate tsc\n\nAddress CodeRabbit P2/P3 findings on PR #1164:\n\n1. Replace workspaceDir.includes('e2e-workspace') with PD_E2E_MODE=1 env var (rc-9: avoid sile\n[…]\n[] and .includes() works. CI was green.\n\nERR checklist: rc-9 (no silent fallback — env var is explicit), rc-2 (no as bypass — none introduced).\n\nTests: openclaw-plugin 1962 passed; verify:merge green.",
          "is_bot": false,
          "headline": "test(e2e): isolate workspace for E2E runs by running agent locally (#…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-03T01:40:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1fd0ab852070a94d942eb3c3accf256ae2d069ad",
          "body": "CI checkout lacks lfs:true when tests read LFS-tracked binary assets — assertion fails on 132-byte pointer files. Found during PR #1159 review: verify-merge job's actions/checkout had default lfs:false, so homepage-contract.test.mjs size assertions failed on pointer files. Updates EP-06 pattern card with LFS checkout prevention rule.",
          "is_bot": false,
          "headline": "docs: add ERR-090 to error experience handbook (#1163)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-02T14:33:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ac37c3df0f8a293d31a9e4de3aaf12229f85941",
          "body": "…er density (#1159)\n\n* feat(website): redesign homepage — video hero, breathing motto, lighter density\n\nRestructure the homepage around the Owner-governed correction story while\nrestoring the visual simplicity and whitespace rhythm the redesign had lost.\n\nHero: replace the card-of-cards governance p\n[…]\ned explicit 'margin: 0' to .loop li and .trust-grid li to override the inherited rule, so all cards now have identical height.\n\n* fix(website): address CodeRabbit review findings and fix CI merge gate",
          "is_bot": false,
          "headline": "feat(website): redesign homepage — video hero, breathing motto, light…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-02T14:20:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "49c1f07a6ac0046b4c3cd04b818bb53b5c8e2da0",
          "body": "…PRI-501, PRI-502) (#1162)\n\n* feat(pd-console): pi-ai default runtime + Profile CRUD + i18n fixes (PRI-501, PRI-502)\n\n## Plan C: 全切 pi-ai + 完整 onboarding\n\n### Step 1-2: 默认 runtime profile 切换到 pi-ai (PRI-501 修复)\n\n- pd-config-defaults.ts: 新增 pd.default (pi-ai placeholder) + 保留 openclaw.default (fallba\n[…]\nion pass it through\n\n- runtime-adapter-resolver.ts: pass configFields.systemPrompt to PiAiRuntimeAdapter\n\nTests: TC1-TC3 (adapter Context), TC4-TC5 (config profile flow). All existing tests unchanged.",
          "is_bot": false,
          "headline": "feat(pd-console): pi-ai default runtime + Profile CRUD + i18n fixes (…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-02T14:04:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "84da484a9adce5f341fc83755384708162148eaa",
          "body": "PRI-496: document perf contract thresholds (200ms/500ms) + baseline JSON\n\nPRI-497: duplicate_active_activation recorded in skippedActivations + gate.ts legacy fallback includes skippedActivations:[]\n\nPRI-498: v2 Artificer prompt forbids all 3 unsupported action types (propose_correction, requireAppr\n[…]\n principleId via extractPrincipleId; new contract test locks alignment; fix 3 missed test fixtures (cr10-api-validators, governance-approve-activation integration, activations-disable type annotation)",
          "is_bot": false,
          "headline": "fix(pri-496-500): RuleHost seed-MVP audit findings (#1160)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-02T05:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c54d4b52ab3b78b0ec33d3bfaa2d03d0f01660f4",
          "body": "- actions/checkout@v6: add lfs: true to pull real mp4/webp content (not 130-byte pointers)\n\n- add 'Verify LFS assets pulled' step: fail loud if mp4 <1KB (rc-3-fail-loud-missing)\n\n- prevents website video playback failure after Phase B-C LFS history migration",
          "is_bot": false,
          "headline": "fix(website): pull Git LFS assets in Cloudflare Pages deploy CI (#1158)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-02T02:12:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8758c23581a0d10e060605951ec5e556be4a2630",
          "body": "… CI size guard (#1156)\n\n- .gitattributes: track *.mp4/*.webm/*.webp via Git LFS\n\n- .gitignore: exclude large binaries (*.tar, *.exe, *.dll) and packages/*/logs/\n\n- scripts/check-repo-hygiene.js: add checkLargeFiles() — block >5MB non-LFS files\n\n- .github/workflows/repo-health.yml: CI guard — 200MB \n[…]\ny hook)\n\n- scripts/install-hooks.ps1: idempotent hook installer with bash fallback (Trae .git protection)\n\n- scripts/post-checkout-worktree.sh: hook fragment — auto-run setup-worktree.ps1 in worktrees",
          "is_bot": false,
          "headline": "chore(repo): hardening — LFS config, large-file guard, worktree hook,…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-02T01:51:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "78f56f9b99982dfe3d6e54febc2d46fa7b528e5e",
          "body": "…command fix (#1155)\n\n* docs(pri-495): rulehost seed-mvp release playbook + rollback + stale-command fix\n\nPRI-495 (P2): seed-user RuleHost release smoke + rollback playbook.\n\nChanges:\n\n- New docs/runbooks/ops/rulehost-seed-mvp-playbook.md: seed-MVP release playbook with 10 positive / 10 negative smo\n[…]\n2. Wrong event field: smoke checklist P5 used 'applicationMode'\n\n   but gate.ts recordRuleHostEvaluated uses 'activationMode'. Fixed\n\n   to match the actual RuleHostEvaluatedEventData interface field.",
          "is_bot": false,
          "headline": "docs(pri-495): RuleHost seed-MVP release playbook + rollback + stale-…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-02T01:01:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d38108d566710bf703edeaebd270d3e22e6f9340",
          "body": "…eueItem type (#1154)\n\n* refactor(plugin): merge queue-migration duplicate + unify EvolutionQueueItem type\n\nPR #1152 follow-up #1: collapse 4 divergent EvolutionQueueItem definitions into\n\nevolution-types.ts as single source of truth. Delete near-dead evolution-queue-migration.ts\n\n(only type-only im\n[…]\nc-9). Behavior change: malformed queue file no longer throws\n\ninto the outer catch (which would log as error); it now logs as warn + returns empty,\n\nmatching loadEvolutionQueue's established contract.",
          "is_bot": false,
          "headline": "refactor(plugin): merge queue-migration duplicate + unify EvolutionQu…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-02T00:28:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "17076101fac8aadb80c5b9be2ce2e3aa2dfa3657",
          "body": "… (#1153)\n\nIdempotent PowerShell script that prepares a fresh git worktree for PD\ndevelopment in one run. Solves the recurring 'new worktree is half-broken'\nclass of issues across Trae/Qoder/Gemini IDEs:\n\n- restores docs/.private junction (private docs access)\n- ensures node_modules + @types/node pr\n[…]\n;\nthe script itself is IDE-agnostic and unrelated to BDD. The accompanying\nimplementation-plan markdown was intentionally NOT extracted — plans/ is\ngitignored as local working state per .gitignore:72.",
          "is_bot": false,
          "headline": "chore(scripts): add setup-worktree.ps1 one-command worktree bootstrap…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T23:28:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4106b4d56a4aaa273db73d5498ff716fd966a734",
          "body": "* fix(f13): candidate-intake — validateRecommendation for untrusted JSON (rc-2)\n\ncandidate-intake-service had two as-unknown-as-Recommendation casts on\nuntrusted DB/LLM JSON (candidate.sourceRecommendationJson and\nartifact.contentJson), bypassing runtime validation (rc-2, ERR-001/ERR-005).\nA well-fo\n[…]\nL2Model's return + compat block still satisfy the installed\npi-ai. If a future bump adds a required field or changes Compat, this test goes\nred instead of the cast silently producing an invalid model.",
          "is_bot": false,
          "headline": "fix(f13): rc-2 合规清理 — candidate-intake + evolution-queue + 小项 (#1152)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T14:04:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c719e269b95274d2a94e49e011284ccdf6e112dc",
          "body": "* docs(spec): add new user onboarding design spec\n\n* docs(spec): fix 6 deviations in onboarding design\n\n1. Add LLM config prerequisite (pd pain record needs provider/model/apiKeyEnv from .state/ runtime config, not .pd/config.yaml). Onboarding now has 5 steps with step 4 = LLM config.\n\n2. Fix demo s\n[…]\nin demo route\n\n* feat(onboarding): promote new_user_onboarding to MVP-Core/default-on\n\nMaintainer-approved (2026-07-01). Emergency disable via .pd/config.yaml: new_user_onboarding: { enabled: false }.",
          "is_bot": false,
          "headline": "feat: PD 新用户 onboarding (官网+installer+console /welcome) (#1146)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T13:54:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2795aa08fab50326034545dbd8cb017125e77c2b",
          "body": "… config (#1151)\n\n* chore(pr-1134-followups): F7-6 dead code removal + F13 store fallback tests + R2-RH-001 runbook\n\n- F7-6: remove unused isRetryWaitStale (keep DEFAULT_RETRY_WAIT_STALE_TTL_MS, still used by read-model)\n- F13: add store-layer COALESCE fallback E2E tests on old-schema db (no CHECK)\n\n[…]\n6 barrel cap (300 lines)\n- prompt-characterization.test.ts: add version/features/runtimeProfiles/internalAgents to test YAML so validatePdConfig accepts the config and projectFocus:'full' takes effect",
          "is_bot": false,
          "headline": "feat(core): add contextInjection config with validation and effective…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T12:41:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e92feab80effe190a77f9e49adea25fe681ed8b6",
          "body": "…#1150)\n\nRecord ERR-001 recurrence found during PR #1149 code review.\n\nmakeHostInput() in rule-host-cache-invalidation.test.ts used as unknown as to bypass type checking. Fixture silently used rawParams (field not in contract) and bashRisk: { level: 'low' } (invalid enum). Fixed by removing cast and constructing the real RuleHostInput shape directly (rc-2-no-as-bypass).",
          "is_bot": false,
          "headline": "docs: update ERR-001 recurrence (PRI-494 as-bypass in test fixture) (…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T12:03:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58215c8b5a9fbef3fcb5bf54d1aca0405dc51d3a",
          "body": "…trix (#1149)\n\n* test(rulehost): PRI-494 full-hook perf budget + cache invalidation matrix\n\nAdd 8 cache invalidation tests (promote/deactivate/content change/action\n\nchange/updateLogger/dispose) and 1 full-hook perf budget test with\n\nERR-088 execution proof (unique block marker). Fix existing perf t\n[…]\nerified in PRI-491 tests, not this file.\n\n3. [Nitpick] Extracted setupHostWithActivation() helper to reduce 3-line setup boilerplate repeated across 8 test cases.\n\nTests: 8/8 pass. tsc + eslint clean.",
          "is_bot": false,
          "headline": "test(rulehost): PRI-494 full-hook perf budget + cache invalidation ma…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T11:18:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "016303a7dd0643e1992edce3b8d6d43a2cb2fe4c",
          "body": "… R2-RH-001 runbook (#1148)\n\n* chore(pr-1134-followups): F7-6 dead code removal + F13 store fallback tests + R2-RH-001 runbook\n\n- F7-6: remove unused isRetryWaitStale (keep DEFAULT_RETRY_WAIT_STALE_TTL_MS, still used by read-model)\n- F13: add store-layer COALESCE fallback E2E tests on old-schema db \n[…]\n.\n- R2 (P3): guards.ts:177 section comment referenced deleted 'F7-6' follow-up id; kept PRI-442, retitled to 'Retry Wait Staleness TTL'.\n- R3 (P3): schema-conformance.test.ts missing trailing newline.",
          "is_bot": false,
          "headline": "chore(pr-1134-followups): F7-6 dead code + F13 store fallback tests +…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T09:55:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "088e94be3708e81ec118526b4b9db9e943df363e",
          "body": "…ge (#1147)\n\nExtract 4 Commander registration helpers from index.ts for parser-level testability (cli-7). Add 53 flag-wiring tests across 5 activation subcommands. Add 3 no-mutation tests for dispatch/deactivate failure paths (cli-5, ERR-088). Add 3 assembler fail-loud tests + 4 path normalization edge cases.",
          "is_bot": false,
          "headline": "test(rulehost): PRI-493 failure matrix + CLI/operator contract covera…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T09:40:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea69515f99e0c58355e77f9c3086599eb923202f",
          "body": "…vailable (#1140)\n\nSignalCollectorHost refactor (PR #1132) replaced the old empathy keyword\nmatcher with a unified signal collection layer. When LLM is unavailable\n(the default config — signal_collector flag is enabled:false), ambiguous\nempathy keyword matches (e.g. '搞什么') were silently dropped inst\n[…]\nt: added regression test verifying empathy ambiguous keyword triggers\ntrackFriction when LLM is unavailable. Existing correction degraded test\nupdated to clarify it tests correction-specific dropping.",
          "is_bot": false,
          "headline": "fix(signal-collector): preserve empathy GFI accumulation when LLM una…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T09:22:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9416457e1019d798c6eef009f4fe0a43bd876fee",
          "body": "…gation (#1143)\n\n* docs: 信号关键词管理页设计文档 + BDD feature 文件\n\n* feat(pd-console): signal keywords management page with AgentCard action navigation\n\n- Add SignalKeywordsPage with KeywordListSection (search/filter/archive/delete), PendingTermsSection (batch confirm/ignore), and KeywordEditDialog (add keywor\n[…]\nsignalCollector string with AGENT_METADATA.signalCollector.name in ControlCenterPage\n- Test: Add reject-term-with-NaN-weight test case\n- Verify: tsc --noEmit 0 errors, vitest 1713+1 pass, lint 0 error",
          "is_bot": false,
          "headline": "feat(pd-console): signal keywords management page with AgentCard navi…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T07:37:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6276fbcacebe1b946cb6619d93f3cfe6d1bef0e1",
          "body": null,
          "is_bot": false,
          "headline": "docs: update ERR-075/ERR-001 recurrence records for PR #1143 (#1145)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T07:24:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d3ce4875c2c21548db32397aa43941d6659a2ac",
          "body": "Exercises the full RuleHost seed-MVP production chain from pain event to deactivation using only real services (runners, validators, approval queue, dispatcher, RuleHostWriter, RuleHost). The LLM adapter is the only test double (ScriptedAdapter pattern).\n\nChain: pain + Owner example IDs -> BehaviorE\n[…]\ns, shadow activation, shadow would-block observation, live block after promote, prior-read allow, flag-off suspension, deactivate stops enforcement, no fake E2E, negative assertion for shadow-vs-live.",
          "is_bot": false,
          "headline": "test(rulehost): PRI-492 full production E2E acceptance chain (#1144)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T07:14:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb09b4574ec640e8af29ec766f958ab80d44439f",
          "body": "Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 9.\n- [Release notes](https://github.com/actions/github-script/releases)\n- [Commits](https://github.com/actions/github-script/compare/v7...v9)\n\n---\nupdated-dependencies:\n- dependency-name: actions/github-script\n  depend\n[…]\ndate:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: PD <csuzngjh@hotmail.com>",
          "is_bot": true,
          "headline": "ci: bump actions/github-script from 7 to 9 (#1142)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-01T04:55:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "09156029d0bed46942e3b102b5269dd5c3f2acae",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 7.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "ci: bump codecov/codecov-action from 4 to 7 (#1141)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-01T04:52:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a7a6e439abac2b233693d7962949a694cc8308cc",
          "body": "… and utilities (#1136)\n\n* test: add comprehensive boundary condition tests for signal-collector and utilities\n\n- SignalCollector: Added tests for empty/whitespace input, high-precision empathy, priority rules, case insensitivity, partial matches, special characters, and multi-term matching\n- Signal\n[…]\nomply with no-any coding guidelines\n- Fix case-insensitive test to use actual case-variant English keywords instead of identical Chinese inputs\n\n---------\n\nCo-authored-by: Test User <test@example.com>",
          "is_bot": false,
          "headline": "test: add comprehensive boundary condition tests for signal-collector…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T03:00:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "42f221fd004a0972777a54af066f30ff3945e8f0",
          "body": "* docs(spec): add SignalCollector unified detection design\n\nUpstream-merge correction+empathy detection into a framework-agnostic\nSignalCollector (core pure logic) + plugin I/O host. Local LLM (LMStudio)\nfirst with keyword degradation. Downstream strength-based routing\n(STRONG→diagnose via emitPainD\n[…]\nipt to fail before reaching console installation.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(core): use namespace import for js-yaml (compat v5 ESM) (#1138)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T02:52:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "104524a8415ddb8a9e3d18ded2652a88eeb5117a",
          "body": "…37) (#1139)\n\nERR-001 recurrence: runtime-activation.ts and ActivationsConsoleModel.ts used 'parsed as Record<string, unknown>' to narrow JSON.parse(artifact.contentJson) — replaced with isRecord() type guard (rc-2-no-as-bypass).\n\nERR-083 broaden: PRI-491 changed ActivationRecord.status enum and add\n[…]\niting all cross-package consumers'. Updated EP-02 pattern card with new triggers for type-union changes and service method additions.\n\nStatistics: Recurring errors 40 -> 41 (ERR-083 first recurrence).",
          "is_bot": false,
          "headline": "docs: record ERR-001 recurrence + broaden ERR-083 for PRI-491 (PR #11…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T02:47:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "717ac694ff7e9bac387240d79588235fca74b240",
          "body": "…dence, and skip reasons (#1137)\n\n* feat(rulehost): PRI-491 owner observability for activation state, evidence, and skip reasons\n\nExtends RuleHost.evaluateDetailed() with skippedActivations: structured records for flag-off v2, unsupported action, unsupported context version, missing target_ref, cont\n[…]\ned_by_flag: rulecode_context_v2 is disabled or unavailable, skipping'. Also added the new recordRuleHostSkipped method to the eventLog mock to prevent TypeError when RuleHost._recordSkipped is called.",
          "is_bot": false,
          "headline": "feat(rulehost): PRI-491 owner observability for activation state, evi…",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T02:40:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "73e5d84dbcad8755931e5a22fee1372002765fc3",
          "body": "* docs(spec): add SignalCollector unified detection design\n\nUpstream-merge correction+empathy detection into a framework-agnostic\nSignalCollector (core pure logic) + plugin I/O host. Local LLM (LMStudio)\nfirst with keyword degradation. Downstream strength-based routing\n(STRONG→diagnose via emitPainD\n[…]\ned in\nprompt.ts. After SignalCollector refactor, that consumption moved to\nsignal-collector-host.ts (resolveObserverConfig with signal_collector\nflag). Updated test to verify the new consumption path.",
          "is_bot": false,
          "headline": "feat: SignalCollector 统一信号采集层(correction + empathy 上游融合) (#1132)",
          "author_name": "PD",
          "author_login": "csuzngjh",
          "committed_at": "2026-07-01T00:53:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 1712,
      "latest_release_at": "2026-07-03T10:08:10Z",
      "latest_release_tag": "v1.75.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 20,
      "days_since_latest_release": 18,
      "mean_days_between_releases": 11.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 85,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@principles/pd-cli",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@principles/pd-cli",
          "is_deprecated": false,
          "latest_version": "1.133.0",
          "repository_url": "https://github.com/csuzngjh/principles",
          "versions_count": 70,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3628,
          "first_published_at": "2026-05-31T04:44:08.259000Z",
          "latest_published_at": "2026-06-27T07:27:39.861000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 24
        },
        {
          "name": "principles-disciple",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/principles-disciple",
          "is_deprecated": false,
          "latest_version": "1.197.13",
          "repository_url": "https://github.com/csuzngjh/principles",
          "versions_count": 232,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 17697,
          "first_published_at": "2026-03-15T10:25:53.521000Z",
          "latest_published_at": "2026-07-17T07:47:15.922000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        },
        {
          "name": "@principles/core",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@principles/core",
          "is_deprecated": false,
          "latest_version": "1.240.10",
          "repository_url": "https://github.com/csuzngjh/principles",
          "versions_count": 197,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 19853,
          "first_published_at": "2026-05-31T04:42:48.365000Z",
          "latest_published_at": "2026-07-17T07:44:19.419000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        },
        {
          "name": "create-principles-disciple",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "openclaw",
            "principles-disciple",
            "cli",
            "installer",
            "interactive"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/create-principles-disciple",
          "is_deprecated": false,
          "latest_version": "1.104.0",
          "repository_url": "https://github.com/csuzngjh/principles",
          "versions_count": 34,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3522,
          "first_published_at": "2026-03-15T08:43:14.549000Z",
          "latest_published_at": "2026-07-03T03:50:29.627000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 18
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-05-16",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": {
        "days": [
          {
            "date": "2026-06-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_stars": 1
      },
      "open_issues_and_prs": 11
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "packages/create-principles-disciple/tsconfig.json",
        "packages/openclaw-plugin/tsconfig.json",
        "packages/pd-cli/tsconfig.json",
        "packages/pd-console/tests/e2e/tsconfig.json",
        "packages/pd-console/tsconfig.json",
        "packages/principles-core/tsconfig.json",
        "scripts/nocturnal/tsconfig.json",
        "tests/e2e-fixtures/trap-01-circular-dep/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 200404,
      "source_files_sampled": 1463,
      "oversized_source_files": 16,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md",
        "GEMINI.md",
        "packages/create-principles-disciple/templates/langs/en/core/AGENTS.md",
        "packages/create-principles-disciple/templates/langs/zh/core/AGENTS.md",
        "packages/openclaw-plugin/src/core/AGENTS.md",
        "packages/openclaw-plugin/src/hooks/AGENTS.md",
        "packages/openclaw-plugin/templates/langs/en/core/AGENTS.md",
        "packages/openclaw-plugin/templates/langs/zh/core/AGENTS.md",
        "packages/website/video/homepage-demo/AGENTS.md",
        "packages/website/video/homepage-demo/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 22917
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 161,
        "malicious_count": 0,
        "assessed_package": "npm:@principles/pd-cli@1.133.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "glob",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^13.0.6"
        },
        {
          "name": "@inquirer/prompts",
          "manifest": "packages/create-principles-disciple/package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.4.3"
        },
        {
          "name": "commander",
          "manifest": "packages/create-principles-disciple/package.json",
          "ecosystem": "npm",
          "version_constraint": "^14.0.3"
        },
        {
          "name": "fs-extra",
          "manifest": "packages/create-principles-disciple/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.3.6"
        },
        {
          "name": "js-yaml",
          "manifest": "packages/create-principles-disciple/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.0"
        },
        {
          "name": "ora",
          "manifest": "packages/create-principles-disciple/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.4.0"
        },
        {
          "name": "picocolors",
          "manifest": "packages/create-principles-disciple/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.0"
        },
        {
          "name": "semver",
          "manifest": "packages/create-principles-disciple/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.8.5"
        },
        {
          "name": "tar",
          "manifest": "packages/create-principles-disciple/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.5.15"
        },
        {
          "name": "@principles/core",
          "manifest": "packages/openclaw-plugin/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.74.1"
        },
        {
          "name": "@sinclair/typebox",
          "manifest": "packages/openclaw-plugin/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.34.48"
        },
        {
          "name": "better-sqlite3",
          "manifest": "packages/openclaw-plugin/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.9.0"
        },
        {
          "name": "commander",
          "manifest": "packages/openclaw-plugin/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.0.0"
        },
        {
          "name": "js-yaml",
          "manifest": "packages/openclaw-plugin/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.0"
        },
        {
          "name": "micromatch",
          "manifest": "packages/openclaw-plugin/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.8"
        },
        {
          "name": "@principles/core",
          "manifest": "packages/pd-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.74.1"
        },
        {
          "name": "principles-disciple",
          "manifest": "packages/pd-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.74.1"
        },
        {
          "name": "better-sqlite3",
          "manifest": "packages/pd-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.9.0"
        },
        {
          "name": "commander",
          "manifest": "packages/pd-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.0.0"
        },
        {
          "name": "js-yaml",
          "manifest": "packages/pd-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.1"
        },
        {
          "name": "@fontsource/jetbrains-mono",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.8"
        },
        {
          "name": "@principles/core",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "@radix-ui/react-alert-dialog",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.15"
        },
        {
          "name": "@radix-ui/react-dialog",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.15"
        },
        {
          "name": "@radix-ui/react-select",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.6"
        },
        {
          "name": "@radix-ui/react-slot",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.4"
        },
        {
          "name": "@radix-ui/react-tooltip",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.11"
        },
        {
          "name": "@tailwindcss/postcss",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.0"
        },
        {
          "name": "@tailwindcss/vite",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.0"
        },
        {
          "name": "autoprefixer",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.5.2"
        },
        {
          "name": "better-sqlite3",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.9.0"
        },
        {
          "name": "class-variance-authority",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.7.1"
        },
        {
          "name": "clsx",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.1"
        },
        {
          "name": "i18next",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^26.1.0"
        },
        {
          "name": "js-yaml",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.2.0"
        },
        {
          "name": "lucide-react",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.23.0"
        },
        {
          "name": "postcss",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.5.14"
        },
        {
          "name": "postcss-cli",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.0.1"
        },
        {
          "name": "react",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.7"
        },
        {
          "name": "react-dom",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.7"
        },
        {
          "name": "react-i18next",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^17.0.8"
        },
        {
          "name": "react-router-dom",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.15.0"
        },
        {
          "name": "semver",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.8.5"
        },
        {
          "name": "sonner",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.7"
        },
        {
          "name": "tailwind-merge",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.6.0"
        },
        {
          "name": "tailwindcss",
          "manifest": "packages/pd-console/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.2"
        },
        {
          "name": "@earendil-works/pi-agent-core",
          "manifest": "packages/principles-core/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.79.4"
        },
        {
          "name": "@earendil-works/pi-ai",
          "manifest": "packages/principles-core/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.80.7"
        },
        {
          "name": "@mariozechner/pi-ai",
          "manifest": "packages/principles-core/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.73.1"
        },
        {
          "name": "@sinclair/typebox",
          "manifest": "packages/principles-core/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.34.48"
        },
        {
          "name": "better-sqlite3",
          "manifest": "packages/principles-core/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.9.0"
        },
        {
          "name": "js-yaml",
          "manifest": "packages/principles-core/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.1"
        },
        {
          "name": "typebox",
          "manifest": "packages/principles-core/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.2"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 11,
        "merged_prs": 1007,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 132,
        "closed_unmerged_prs": 98
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "csuzngjh",
          "commits": 1197,
          "avatar_url": "https://avatars.githubusercontent.com/u/10056748?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        },
        {
          "type": "User",
          "login": "semantic-release-bot",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/32174276?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.998
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ai-review.yml",
        "ci.yml",
        "codeql.yml",
        "deploy-website.yml",
        "e2e-nightly.yml",
        "issue-management.yml",
        "pd-console-e2e.yml",
        "pr-checks.yml",
        "publish-npm.yml",
        "regression-e2e.yml",
        "repo-health.yml",
        "stale.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.js"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "28 out of 28 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 4,
            "reason": "Found 9/19 approved changesets -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 6,
            "reason": "dependency not pinned by hash detected -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "50 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "f7acb0f4a9c98ad4bb5614b13cf02479b4d3639a",
        "ran_at": "2026-07-22T03:07:10Z",
        "aggregate_score": 6.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T02:52:42Z",
      "oldest_open_prs": [
        {
          "number": 1238,
          "created_at": "2026-07-18T01:55:25Z",
          "last_comment_at": "2026-07-18T01:58:24Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1239,
          "created_at": "2026-07-20T01:51:50Z",
          "last_comment_at": "2026-07-20T02:14:24Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1240,
          "created_at": "2026-07-20T09:16:17Z",
          "last_comment_at": "2026-07-20T09:21:13Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1241,
          "created_at": "2026-07-20T09:16:24Z",
          "last_comment_at": "2026-07-20T09:23:10Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1242,
          "created_at": "2026-07-20T09:16:28Z",
          "last_comment_at": "2026-07-20T09:22:35Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1243,
          "created_at": "2026-07-20T09:16:37Z",
          "last_comment_at": "2026-07-20T09:22:19Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1244,
          "created_at": "2026-07-20T09:16:55Z",
          "last_comment_at": "2026-07-20T09:24:36Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1245,
          "created_at": "2026-07-20T09:17:08Z",
          "last_comment_at": "2026-07-20T09:23:12Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1246,
          "created_at": "2026-07-20T09:17:22Z",
          "last_comment_at": "2026-07-20T09:24:31Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1247,
          "created_at": "2026-07-21T01:55:20Z",
          "last_comment_at": "2026-07-21T01:57:36Z",
          "last_comment_author": "codecov"
        },
        {
          "number": 1248,
          "created_at": "2026-07-22T01:52:28Z",
          "last_comment_at": "2026-07-22T01:55:25Z",
          "last_comment_author": "codecov"
        }
      ],
      "last_merged_pr_at": "2026-07-17T07:46:03Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/csuzngjh/principles",
    "host": "github.com",
    "name": "principles",
    "owner": "csuzngjh"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 70,
      "inputs": {
        "security": 72,
        "vitality": 87,
        "community": 47,
        "governance": 56,
        "engineering": 86
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 87,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "commits_last_year": 1712,
              "human_commit_share": 0.81,
              "days_since_last_push": 0,
              "active_weeks_last_year": 20
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "20/52 weeks with commits",
                "points": 13.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 20
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1712 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1712
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "v1.75.1",
              "releases_from_tags": false,
              "days_since_latest_release": 18,
              "mean_days_between_releases": 11.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 18 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~11.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 11.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 4,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 4 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 47,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 1,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 78,
            "inputs": {
              "packages": [
                "@principles/pd-cli",
                "principles-disciple",
                "@principles/core",
                "create-principles-disciple"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 44700
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "44,700 downloads/month across npm",
                "points": 62,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 44700,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.998
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 88,
            "inputs": {
              "merged_prs": 1007,
              "open_issues": 0,
              "closed_issues": 132,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 98
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1007/1105 decided PRs merged",
                "points": 34.9,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1007,
                      "decided": 1105
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 9/19 approved changesets -- score normalized to 4",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 41,
            "inputs": {
              "followers": 9,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "csuzngjh",
              "public_repos": 2,
              "account_age_days": 4248
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "9 followers of csuzngjh",
                "points": 7.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 9,
                      "login": "csuzngjh"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "2 public repos, account ~11 yr old",
                "points": 15.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 2
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@principles/pd-cli",
                "principles-disciple",
                "@principles/core",
                "create-principles-disciple"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "4 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 4,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "232 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 232
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 86,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "12 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "eslint.config.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "28 out of 28 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "ai-agent",
                "monorepo",
                "openclaw",
                "openclaw-plugin",
                "principles",
                "self-improving",
                "sqlite",
                "typescript",
                "pain-signals",
                "agent-governance",
                "co-evolution",
                "alignment-layer"
              ],
              "has_wiki": false,
              "homepage": "https://principles-website.pages.dev",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://principles-website.pages.dev",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "12 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 72,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 65,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 6.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "28 out of 28 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 9/19 approved changesets -- score normalized to 4",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 6",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "50 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@principles/pd-cli@1.133.0 runtime dependency closure — what installing the published package pulls in — 161 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@principles/pd-cli@1.133.0",
                  "assessed": 161
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 161,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 161,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 80,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md",
                "GEMINI.md",
                "packages/create-principles-disciple/templates/langs/en/core/AGENTS.md",
                "packages/create-principles-disciple/templates/langs/zh/core/AGENTS.md",
                "packages/openclaw-plugin/src/core/AGENTS.md",
                "packages/openclaw-plugin/src/hooks/AGENTS.md",
                "packages/openclaw-plugin/templates/langs/en/core/AGENTS.md",
                "packages/openclaw-plugin/templates/langs/zh/core/AGENTS.md",
                "packages/website/video/homepage-demo/AGENTS.md",
                "packages/website/video/homepage-demo/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 22917
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md, GEMINI.md, packages/create-principles-disciple/templates/langs/en/core/AGENTS.md, packages/create-principles-disciple/templates/langs/zh/core/AGENTS.md, packages/openclaw-plugin/src/core/AGENTS.md, packages/openclaw-plugin/src/hooks/AGENTS.md, packages/openclaw-plugin/templates/langs/en/core/AGENTS.md, packages/openclaw-plugin/templates/langs/zh/core/AGENTS.md, packages/website/video/homepage-demo/AGENTS.md, packages/website/video/homepage-demo/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md, GEMINI.md, packages/create-principles-disciple/templates/langs/en/core/AGENTS.md, packages/create-principles-disciple/templates/langs/zh/core/AGENTS.md, packages/openclaw-plugin/src/core/AGENTS.md, packages/openclaw-plugin/src/hooks/AGENTS.md, packages/openclaw-plugin/templates/langs/en/core/AGENTS.md, packages/openclaw-plugin/templates/langs/zh/core/AGENTS.md, packages/website/video/homepage-demo/AGENTS.md, packages/website/video/homepage-demo/CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "81 of 81 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 81,
                      "sampled": 81
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "packages/create-principles-disciple/tsconfig.json",
                "packages/openclaw-plugin/tsconfig.json",
                "packages/pd-cli/tsconfig.json",
                "packages/pd-console/tests/e2e/tsconfig.json",
                "packages/pd-console/tsconfig.json",
                "packages/principles-core/tsconfig.json",
                "scripts/nocturnal/tsconfig.json",
                "tests/e2e-fixtures/trap-01-circular-dep/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.19
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "packages/create-principles-disciple/tsconfig.json, packages/openclaw-plugin/tsconfig.json, packages/pd-cli/tsconfig.json, packages/pd-console/tests/e2e/tsconfig.json, packages/pd-console/tsconfig.json, packages/principles-core/tsconfig.json, scripts/nocturnal/tsconfig.json, tests/e2e-fixtures/trap-01-circular-dep/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "packages/create-principles-disciple/tsconfig.json, packages/openclaw-plugin/tsconfig.json, packages/pd-cli/tsconfig.json, packages/pd-console/tests/e2e/tsconfig.json, packages/pd-console/tsconfig.json, packages/principles-core/tsconfig.json, scripts/nocturnal/tsconfig.json, tests/e2e-fixtures/trap-01-circular-dep/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "19 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 19,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 200404,
              "source_files_sampled": 1463,
              "oversized_source_files": 16
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "16/1463 source files over 60KB",
                "points": 54.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1463,
                      "oversized": 16
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Could not fetch npm package '@principles/nocturnal-benchmark' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T03:07:31.628478Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/csuzngjh/principles.svg",
  "full_name": "csuzngjh/principles",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.26.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.