Raw JSON report machine-readable
{
"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"
}