Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"agent-memory",
"agents",
"ai",
"cli",
"golang",
"knowledge-base",
"knowledge-graph"
],
"is_fork": false,
"size_kb": 5280,
"has_wiki": false,
"homepage": "https://abegong.github.io/katalyst",
"languages": {
"Go": 749447,
"Shell": 19612,
"Makefile": 3348
},
"pushed_at": "2026-07-10T18:35:08Z",
"created_at": "2026-05-17T19:47:39Z",
"owner_type": "User",
"updated_at": "2026-07-06T20:19:10Z",
"description": "A content consistency layer to keep AI-agent knowledge bases, wikis, and memory well-structured as they grow.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "main",
"license_spdx_raw": "Apache-2.0",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": "http://www.abegong.com",
"name": "Abe Gong",
"type": "User",
"login": "abegong",
"company": "Great Expectations",
"location": "Salt Lake City",
"followers": 78,
"avatar_url": "https://avatars.githubusercontent.com/u/1239085?v=4",
"created_at": "2011-12-04T02:42:45Z",
"is_verified": null,
"public_repos": 45,
"account_age_days": 5350
},
"license": {
"state": "standard",
"spdx_id": "Apache-2.0",
"raw_spdx": "Apache-2.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.0.2",
"kind": "patch",
"published_at": "2026-07-01T17:51:23Z"
},
{
"tag": "v0.0.1",
"kind": "patch",
"published_at": "2026-06-25T20:51:03Z"
}
],
"recent_commits": [
{
"oid": "2ce3d174a89377b5ae16daa670d26fe8ed5ef3c2",
"body": "* docs: specify nested config authority\n\n* docs: plan nested config authority\n\n* feat: add nested config authority planning\n\n* feat: honor delegated check authority overrides\n\n* feat: suppress root checks in delegated subtrees\n\n* test: pin nested project plan output\n\n* feat: add project selection fl\n[…]\nrides\n\n* docs: specify nested fix and config behavior\n\n* docs: split nested fix and config spec\n\n* fix: implement nested fix authority\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "Add nested config authority planning (#129)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-07-06T20:19:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3069a15556ebf99cc70d32469a1d17233a7b77a0",
"body": null,
"is_bot": false,
"headline": "Add filesystem check scopes (#125)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-29T22:36:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a97721a0e346e8294c7b65f64fec6be1de4f98f",
"body": "* Update vision\n\n* Add curation deep dive\n\nPlace the new curation draft after Why Katalyst and update links for the renamed page.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* Expand curation criteria draft\n\nDevelop the presentation examples and up-to-dateness framing for the curation deep div\n[…]\nration criteria into dedicated pages.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Split Why Katalyst deep dives (#124)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-29T20:16:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "09669a9e97c99405ee0b84b97c5e86b711bc9795",
"body": "* Add docs PDF exports\n\n* Move PDF downloads under reference\n\n* Use shared docs build for Netlify previews\n\n* Keep Netlify docs base for PDF builds\n\n* Keep docs PDF generation manual\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "[codex] Add docs PDF exports (#123)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-29T16:11:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee7add4c59e609372522a20776bf258af818b86c",
"body": "* Move config reference into configs section\n\n* Split configs reference by concept\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "[codex] Move config reference into configs section (#122)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-29T13:48:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "34d11fbadf3338adda9439b1d9f22baa35f08c23",
"body": "* Deepen core concepts docs\n\n* Refine storage layer docs\n\n* Reorganize domain model docs\n\n* Refine domain model docs\n\n* Refresh domain model page structure and diagram sizing\n\nRework the deep-dive narrative around the core concepts and replace the diagram asset, then constrain the diagram width so i\n[…]\nRename source inspectors to raw base inspectors\n\n* Fix post-rebase inspector snapshots\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "[codex] Deepen core concepts docs (#116)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-26T21:36:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8e93071908b8797bef81231fff9dd915a096bd15",
"body": "Co-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "goreleaser (#119)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-25T20:46:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac84c10e59453d65981c291c7363a69a46006c9d",
"body": "* Document release install and agent bootstrap\n\n* Add agent onboarding installer\n\n* Add copy buttons for docs code blocks\n\nAdd an explicit hover-only copy control for fenced code blocks in the docs theme so onboarding prompts are one-click copyable without changing page structure.\n\nCo-authored-by: C\n[…]\ne for archive and source-build paths.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "[codex] Add agent onboarding installer (#118)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-25T20:43:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a0c43ef01ee9186eef6e3f749f31881397d030e1",
"body": "* Add skill-distribution spec\n\nSpec for a family of user-facing katalyst skills aligned to the content\nlifecycle (catalog, define, enforce, reshape), each committed under skills/\nand versioned with the CLI. Ships as one .skill artifact per skill attached\nto GitHub Releases for Git-free install, with\n[…]\nt a release.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WbdvMAh571kvviysmRqmaQ\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add skill distribution specification for katalyst (#20)",
"author_name": "katabase-abe",
"author_login": "katabase-abe",
"committed_at": "2026-06-25T19:34:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "aa1f116214bd10e1854a688bab18bd4e68470e6b",
"body": "* Plan file_tree inspector output\n\n* Build file tree inspector map\n\n* Use connected unicode tree output\n\n* Separate file tree report sections\n\n* Start file tree report with divider\n\n* Spec file_content_shape inspector\n\n* Revise content shape inspector command surface\n\n* Add file content shape inspector\n\n* Retire document shape inspector\n\n* Fix rebase fallout\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "[codex] Build file tree inspector map (#114)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-25T19:28:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a44ff14b807e50be36bbf6b5b8ba3893cb826ca",
"body": "* Add SQLite storage backend\n\n* Add SQLite attribute mapping spec\n\n* Add SQLite attribute capture config\n\n* Add SQLite storage seam tests\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "[codex] Add SQLite storage backend (#108)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-25T19:07:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9d062dd8e381fa5eeed2d11e8386c862f80f113",
"body": "Co-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "docs: refresh package guidance paths (#109)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T22:50:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e0deec2274bcdca4513a20152650f41ea69b147f",
"body": "Co-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "Resolve CLI style follow-ups (#107)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T22:44:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e71a31a32b41d931bc9f7549b9e6fdf8f071e3ea",
"body": "Co-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "Resolve query terminology leftovers (#106)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T21:01:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b899e79dd8015797897b44e8ffc0ec0c878e76b8",
"body": "* test: share project fixture helpers\n\n* test: share check context fixtures\n\n* test: document intentional test imports\n\n* test: reuse project fixtures in cmd tests\n\n* test: keep catalog tests at cli boundary\n\n* docs: classify cmd engine test imports\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "[codex] Reduce incidental cross-package test imports (#98)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T20:51:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a5de8a537327034308bb8c9493ad563a0c05df3",
"body": "* Add listing and predicate spec\n\n* Add listing and predicate plan\n\n* Connect listing predicate plan to query terminology issue\n\n* Split query into listing and predicate\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "Split query into listing and predicate (#97)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T20:41:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "171d776933c0f2b2428de399c50fd85ee23c51e2",
"body": "* Plan AGENTS.md coverage audit\n\n* Add AGENTS coverage for main directories\n\n* Remove completed AGENTS coverage plan\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "[codex] Add AGENTS.md coverage for main directories (#100)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T20:40:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "92160c72a49a96025889a2f2c58523dccc657911",
"body": "* Plan CLI style guide enforcement\n\n* Enforce CLI style guide\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "[codex] Write and enforce CLI style guide (#99)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T20:37:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3af13861eec88ee12b51fa8d9361a36450dd3486",
"body": "Co-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "Introduce markdown body text codec layer (#95)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T20:00:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8efb3aecbcfa3436ca29435ca07001add4ed6ec8",
"body": "* Document CLI readout formatting contract\n\nCapture the section-header and bullet layout conventions for human-facing read output, and spell out which machine-oriented CLI outputs must remain unchanged.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* Add dogfood checks for CLI output contracts\n\n\n[…]\nessions are caught by katalyst check.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Document and enforce CLI readout formatting contract (#96)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T19:56:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "57097b7f65074dad5cef7817508095ccde539852",
"body": "* Add skill-distribution spec\n\nSpec for a family of user-facing katalyst skills aligned to the content\nlifecycle (catalog, define, enforce, reshape), each committed under skills/\nand versioned with the CLI. Ships as one .skill artifact per skill attached\nto GitHub Releases for Git-free install, with\n[…]\ne committed.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01HAzPmCW4S1AU5crD3hrXi4\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Reorganize checks into family packages and refactor module path (#91)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T19:47:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "dc52591aac6964fcdeffc89ca30cb9ec62bfcfd2",
"body": "* Format inspectors list output for easier scanning\n\nReplace the dense table with layered bullet sections and explicit section counts so people can skim inspectors and purpose text more quickly in terminal output.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* Apply consistent sectioned bullets\n[…]\netadata for easier terminal scanning.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Improve list and show output readability across CLI resources (#92)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T19:45:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2055320bdce7655477020f037e36bf04d9c57f68",
"body": "…config package (#88)\n\n* Refine config-distribution spec with Spec 1 implementation learnings\n\n- de-risk the collection<->checks cycle: the codebase already avoids it\n (Collection holds CheckInstance as data; cmd/engine.go builds lazily).\n Commit to lazy build; name eager build as the anti-pattern\n[…]\nig keys\n\n* Guard check kind registration parity\n\n* Refresh config distribution comments\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "Config distribution: each object owns its config; delete the central …",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T18:43:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2933efb9270f26f80e2d85bd0b4b3648c41ae048",
"body": "* Promote Project to a core concept; nest config and query under it\n\nRealigns the internal/ layout toward the core-concept containment\n(issue #39 groundwork): a Project contains its Config and Collections,\nand a Collection owns the query operations scoped to it.\n\n- move internal/config ->\n[…]\ning reasons)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016aHAMg7poMtcYckAPwc6iu\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Reorganize config and query packages under internal/project (#83)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T06:04:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "77ab07cc2f4c10d90b630f7ba1d02717fbb73f3d",
"body": "PR #82's squash landed an earlier state that still carried\nproduct/testing-coverage-report.md. A point-in-time coverage snapshot rots in\nthe tree, so remove it: the audit (seam table + thin-coverage gaps) lives in\nissue #86 as tracked work. Repoint how-we-test's coverage reference from the\ndeleted file to #86.\n\n\nClaude-Session: https://claude.ai/code/session_01Ja7wDa5XAyhGc9TFRxETcZ\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: remove the in-repo coverage report, point how-we-test at #86 (#87)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T06:00:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0210b0b8a0ef89da90e7e4efbc4812b33d67a811",
"body": "* Generate worked-example docs from tested commands (#30)\n\nExtend katalyst's \"docs generated from a source of truth\" approach to\nbehavioral examples. A new internal/examples registry pairs a small input\ncorpus with a katalyst command; Run scaffolds the corpus, executes the\ncommand via cmd.NewRootCmd\n[…]\nt AGENTS.md.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Ja7wDa5XAyhGc9TFRxETcZ\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add worked examples registry with test gating and doc generation (#82)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T05:51:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c7500135f681f0a573ddba13dbcd90ff1d07380f",
"body": "* Add domain model cleanup spec and terminology matrix\n\nSpec for issue #26: reconcile terminology into a canonical glossary and\nsharpen the core-concepts vs domain-model division of labor. Establishes\none rule for general-vs-specific terms (item/document, attribute/field),\nmakes the glossary canonic\n[…]\n references.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01P8kVJJFzNAoU7ibHr3nEii\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add domain model cleanup spec and plan (#78)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T01:00:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f4f2ba4c00d99058ae187b21f43661a5b9d45d13",
"body": "\"engine\" appeared in user-facing CLI help and reference docs but was\nnever defined in the glossary or any doc page. Per the cleanup spec's\nrecommendation, drop it from user-facing copy rather than define it: it\nnames a thing users never configure or address.\n\n- Reword `check-types` / `inspectors` he\n[…]\ngine.go) and the\ndeep-dive architecture docs that describe the implementation.\n\n\nClaude-Session: https://claude.ai/code/session_01Gvdtf8qaBW9En8J3Nm91fJ\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop user-facing \"engine\" from CLI help and reference docs (#77) (#81)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T00:42:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "529cdd1356beb11c2f8eb670aeb24f98e13c9370",
"body": "Sweep of product/specs and product/ per how-we-plan.md: every spec/plan\nwhose work has shipped on main and graduated into permanent docs is\nremoved. Deleted 21 done docs (filesystem-checks, check-library,\ncheck-terminology, cli, cli-test-strategy, collection-variants,\nstorage-layer, inspect, inspect\n[…]\nearch-brief-rules-landscape\n(durable reference material, not lifecycle specs).\n\n\nClaude-Session: https://claude.ai/code/session_01QcABSwGPiRHkMGPe9VZgpm\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: retire shipped specs/plans; repoint graduated references (#80)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T00:17:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7d374d74a63164987c03bad52f60e45b4f1e9b9e",
"body": "* spec: hybrid CLI testing — snapshots + property tests (#53)\n\nAdd product/specs/cli-test-strategy-spec.md: splits the cmd/ suite between\nsnapshot fixtures for user-facing text contracts and property tests for\nbehavior, backed by one reusable snapshot harness (embed reads, runtime.Caller\nwrites unde\n[…]\nses landed).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01XR4gW2NYXwFaVXQEWQ1Fgv\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Implement hybrid snapshot + property test strategy for CLI (#75)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-24T00:02:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bf06709419a0f61676566869ca805c7345476114",
"body": "The katalyst CLI is cobra-based and self-documenting: every command has\ncomplete, snapshot-tested --help (down to leaves like `item list --help`).\nA hand-maintained page mirroring all of that is pure drift risk.\n\nRename reference/commands.md -> reference/cli.md (title \"The CLI\") and cut\nit to a thin\n[…]\nonated\" link to the formatting\ndeep-dive, where that rationale actually lives.\n\n\nClaude-Session: https://claude.ai/code/session_01Cc4hVWtBZKz4kc26M3pHE5\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: rename Commands reference to \"The CLI\" and cut to a wrapper (#74)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T23:48:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "45e0fdcddc8fa75924216cf3c58b4b37df808bf9",
"body": "* docs(inspectors): add the inspectors deep-dive; slim doc.go and add AGENTS pointer\n\nCompletes the third missing subsystem doc (after storage and checks). The\narchitecture and rationale that lived in internal/inspect/doc.go move to a\ndeep-dive peer of checks.md:\n\n- New deep-dives/inspectors.md (\"Ho\n[…]\nsingle home.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YWhen3YApYid7AQc4qhhe5\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Move architecture docs from code to deep-dive pages (#73)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T23:38:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e589294207756e4dbde9638ea82ffd3b283f7d83",
"body": "* docs: split rationale by altitude (behavioral vs implementation)\n\nThe docs routed design rationale by *scope* — \"cross-cutting -> deep-dives,\nsubsystem -> co-located README\" — which sent user-observable behavioral\nrationale into code-adjacent READMEs and left readers of the published site\nchasing \n[…]\n@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YWhen3YApYid7AQc4qhhe5\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>",
"is_bot": false,
"headline": "docs: split rationale by altitude (behavioral vs implementation) (#66)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T23:00:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c8c024bda451b91a1b2e138cf9a367c0833a0794",
"body": "Each of the four native families (filesystem, plaintext, markdownbodytext,\nstructuredobject) now registers a CheckLibrary in its library.go and stamps\nDescriptor.Library through a package-local register helper, so every check type\nhas an owning library and LibraryFor resolves for every kind. registr\n[…]\ns (AGENTS.md, internal/checks/README.md) describe\nthe register-helper pattern.\n\n\nClaude-Session: https://claude.ai/code/session_0118tgimxNZYEZchjrGveRsU\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Migrate native check families onto CheckLibrary (#72)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T22:52:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "191fe4858f9529dfee0ba5315017f3d2d62f292f",
"body": "…#70)\n\n* Add external check library spec\n\nFormalize \"external check library\" as a first-class concept: a delegated\nengine that compiles named definitions from .katalyst/, runs items against\nthem, and flattens findings into violations. Generalizes today's JSON Schema\nvalidator into one instance and d\n[…]\ndives index.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0118tgimxNZYEZchjrGveRsU\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Introduce CheckLibrary abstraction for unified check provider model (…",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T22:38:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b98fe9f115bc4993e15ad9aa89d169817e4024e0",
"body": "Close two gaps left by the inspectors noun command (#44) and the two-layer\nreorg (#60):\n\n- reference/commands.md: add an `inspectors` section (list/show, --layer,\n --json), mirroring the check-types noun. Every other resource noun had a\n command-reference entry; this one shipped without one.\n- dee\n[…]\nregate bullet to it and add\n internal/inspect to the closing package pointer.\n\n\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: document the inspectors command and the inspector concept (#71)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T20:51:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "02170775bed13ac5b61251fda2af3f5877b5d24d",
"body": "* docs: improve h3 section grouping in docs page\n\nAdd site custom SCSS to visually indent content after H3 headings and update the Why Katalyst page structure and deep-dive link for clearer scanning without blockquote semantics.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n* docs: apply global \n[…]\nders always have a clear public path.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n---------\n\nCo-authored-by: Abe Gong <abe@Abes-MacBook-Air.local>\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "docs: simplify docs landing and standardize feedback paths (#67)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T18:29:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d7a80ec6a33e621878dfc009680de0818770281a",
"body": "* ci(docs): deploy production docs via GitHub Pages Actions source\n\ndeploy-docs.yml pushed the built site to the `gh-pages` branch with\nJamesIves/github-pages-deploy-action — the \"Deploy from a branch\" model.\nBut Pages is configured with Source: \"GitHub Actions\", so that branch was\nnever served: run\n[…]\ne around it.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YWhen3YApYid7AQc4qhhe5\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci(docs): deploy production docs via GitHub Pages Actions source (#64)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T18:11:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fd1a4d4bdbd6bc37764e6b4f4c4ff5603f52a0e4",
"body": "The Hugo docs table of contents should read in sentence case\n(\"Progressive operations\"), not Title Case (\"Progressive Operations\").\n\nAdd a katalyst check type, object_sentence_case, that requires a string\nfrontmatter field to be sentence case: first word capitalized, following\nwords lowercase except\n[…]\ns (which also feed the\n`katalyst check-types` display names), then regenerate.\n\n\nClaude-Session: https://claude.ai/code/session_01Bomqgbzg5yjDWwtB6F4GyV\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Enforce sentence case for docs TOC titles (#65)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T17:03:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1c6430095c3d4045957a57eb13244601dc8299e3",
"body": "Restructure CONTRIBUTING.md into a thin pointer and host the full\ncontributor guide on the docs site as contributing/how-to-contribute.md\n(dev setup, pre-push checks, docs workflow, PR steps).\n\nMirror the repo-root governance files into the contributing section so\nthe published site carries them wit\n[…]\ned page. The root files stay\ncanonical for GitHub's community-health features.\n\n\nClaude-Session: https://claude.ai/code/session_01Hyw5tbnaCn4cGiSzJYXFVh\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: move contributor guide into Hugo, mirror governance files (#63)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T16:41:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6008eafd445ac45d884c6e6bcb96929ff641b4cb",
"body": "* Add warning severity + markdown_writing_tells; draft em-dash rubric\n\nRoll back the mechanical em-dash sweep: no prose in the repo is changed\nfrom main. Instead, keep the enabling feature and add a rubric that decides,\nper occurrence, what (if anything) to change.\n\nWarning severity:\n- checks.Violat\n[…]\n the rubric.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MrnsmwErPTLSMtCvQCuwE5\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Replace em-dashes with hyphens and add ASCII-only check (#50)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T16:06:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5f0e98926640657675af43149eaa19d24857b3cf",
"body": "Restructure internal/checks/ so each check-type family is its own\npackage and each check type is its own file, holding its struct, Run,\nDescriptor, and an init() that calls checks.Register. This collapses the\nold engine-dispatch + central-Descriptor wiring into one place per check\ntype; the engine n\n[…]\nconcile\nthe checks README, AGENTS.md, the add-check-type skill, and doc links.\n\n\nClaude-Session: https://claude.ai/code/session_01JdtfvZyZuKXnM6irq5svna\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(checks): per-family packages with self-registration (#56) (#62)",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T15:51:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fb623caf6d8dcf6bc47dc605bea2b47a738247a6",
"body": "Add collection variants: metadata-discriminated check groups",
"is_bot": false,
"headline": "Merge pull request #61 from abegong/claude/practical-bardeen-2lm73x",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T15:43:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3209e7b151f9c47703a346ff049570b78ef81b6a",
"body": "Phase 4 of the collection-variants plan: graduate the durable docs and\nturn the feature on for katalyst's own docs.\n\nUser docs:\n- domain-model.md: reword invariant #4 — first-match-wins is scoped to a\n collection's own variants, never across collections.\n- configuration.md: new `variants` section (\n[…]\nion pending merge);\ndogfood-docs-spec notes #41 is partially unblocked.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MgspUhDcYrWZccc4WjcAce",
"is_bot": false,
"headline": "docs(variants): document collection variants; dogfood weight rule (#41)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T15:42:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "32323563f4df224d82f8c57d2c6181f55880e442",
"body": "Phase 3 of the collection-variants plan. checksFor now selects the first\nvariant whose `when` predicates the item's metadata all satisfy and\ncomposes its checks onto the base set: effective = base + variant, run\nthrough the existing object-schema precedence switch and non-object loop.\nSo a variant's\n[…]\nunrouted, --schema override of both tiers, and\nitem list status parity.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MgspUhDcYrWZccc4WjcAce",
"is_bot": false,
"headline": "feat(check): route checks by collection variant (#41)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T15:42:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6747299856e4960dc14e9caaece7bcf879b590a4",
"body": "Phase 2 of the collection-variants plan. A collection definition now\naccepts:\n\n variants:\n - when: \"kind=section\" # string | list | {where: [...]}\n schema: section_index\n checks: [ ... ]\n useExhaustiveVariants: true\n\nEach `when` parses to a non-empty []query.Predicate (via th\n[…]\nnfig now imports internal/query (which imports no\nconfig, so no cycle).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MgspUhDcYrWZccc4WjcAce",
"is_bot": false,
"headline": "feat(config): parse and validate collection variants (#41)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T15:42:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e98a543565327af6dd967077886b03e148d71687",
"body": "The predicate evaluator match() was unexported, reachable only through\nquery.Apply for `item list`. Collection variants (#41) need to evaluate\na parsed predicate against an item's metadata from config (validation)\nand cmd/engine (routing), so add an exported Predicate.Matches that\nwraps match() with\n[…]\n1 of the\ncollection-variants plan; leaf change, no behavior difference.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MgspUhDcYrWZccc4WjcAce",
"is_bot": false,
"headline": "feat(query): export Predicate.Matches for variant discriminators (#41)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T15:42:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cd5c5dfd9955ad960763b7801b162b20eb37004a",
"body": "Add product/specs/collection-variants-plan.md, the how-to for the\ncollection-variants spec. Four tests-first phases, each independently\ngreen:\n\n1. internal/query: export Predicate.Matches (wraps the unexported\n match) so config can validate and the engine can route. Leaf change;\n query does not \n[…]\n, Architecture Decisions, Out of Scope, and a\nper-phase Test checklist.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MgspUhDcYrWZccc4WjcAce",
"is_bot": false,
"headline": "plan: implementation plan for collection variants (#41)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T15:42:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "77ec651e3ba166cc66f397591fc542aa63aeb24f",
"body": "Fold in the four maintainer decisions and empty the Open Questions\nsection:\n\n1. Discriminator shape: a `when:` block with a `where:` predicate list\n (the item list --filter grammar) plus string/list shorthand.\n2. No-variant-match: a per-collection useExhaustiveVariants flag,\n default false (leni\n[…]\nion-index vs content-page split stays in scope via bookCollapseSection.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MgspUhDcYrWZccc4WjcAce",
"is_bot": false,
"headline": "spec: resolve collection-variants open questions; defer path (#41)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T15:42:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1087a4e85a5ec779d3f868ab9b442c74eed8a6b6",
"body": "Rebase onto main and rewrite the Open Questions section to the revised\nwrite-spec skill's shape: each question now leads with Context (defining\nthe terms it leans on), then comparable Choices & tradeoffs (cost / buys\n/ forecloses, with a table or worked YAML), then a framed recommendation.\n\nCovers t\n[…]\nAlso refreshes two\nconfig.go line citations that shifted on the rebase.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MgspUhDcYrWZccc4WjcAce",
"is_bot": false,
"headline": "spec: make collection-variants open questions self-explanatory (#41)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T15:42:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "63ec6dc5465b2c30e652b44a9363deb2c9138c57",
"body": "Rename per-pattern-checks-spec.md -> collection-variants-spec.md and\nrework the discriminator: a variant is now selected by a predicate over\nan item's *properties*, not by a path glob.\n\nA glob is a filesystem property; the storage layer (#31) exists so a\nnon-filesystem StorageType (e.g. SQLite, gran\n[…]\ned (keyword shape, native-condition\nevaluation mechanism, combinators).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MgspUhDcYrWZccc4WjcAce",
"is_bot": false,
"headline": "spec: generalize variant discriminator beyond globs (#41)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T15:42:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "28e25fb5d2dd5b115c20bf976adcbe9e815a5627",
"body": "Draft a planning spec for issue #41: let one collection apply different\nchecks to different files in its tree, selected by glob, instead of one\nuniform check list per collection.\n\nFrames the design in light of the storage layer (#31): collections now\nlive inside a StorageInstance's collections: bloc\n[…]\n) and the two genuine open questions\n(keyword name, no-match behavior).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MgspUhDcYrWZccc4WjcAce",
"is_bot": false,
"headline": "spec: draft per-pattern check scoping within a collection (#41)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T15:42:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8982328748f4808757c597308c7d05d415aa9653",
"body": "Reorganize inspectors into two layers over storage seam",
"is_bot": false,
"headline": "Merge pull request #60 from abegong/claude/cull-inspectors-25",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T06:39:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ab3cceeb503bfbb826df5258c157fad4919ceeb",
"body": "Update the durable docs to the two-layer inspector model and retire stale\nreferences to the old Corpus inspectors:\n\n- internal/inspect/doc.go: rewritten around the two layers, the three\n measurement primitives, the summarizer, and Params; drops Corpus/Load.\n- deep-dives/domain-model.md: the Inspect\n[…]\nleting them) waits on\nmerge, per the inspect-plan precedent.\n\nRefs #25.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "docs(inspect): phase 6 — reconcile docs for the two-layer model",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d16f5a11af6574ecf555902a9c7390251fe32a4a",
"body": "Retire the 11 Corpus-based inspectors and flip the CLI/docs to the two-layer\nmodel. Ends green.\n\ninternal/inspect:\n- registry gains a Layer dimension; Descriptors() lists the five new inspectors\n (file_tree, file_tree_content, document_shape; object_fields, markdown_body).\n All()/ByName() replaced\n[…]\n/inspectors/{source,collection}/. Help fixtures regenerated.\n\nRefs #25.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "feat(inspect): phase 5 — registry + command cutover to two layers",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "01ff3e51ffcd00c60640b1f09903e30ecce42797",
"body": "Add the raw-source half of the two-layer inspector model (additive; the old\nCorpus inspectors remain until the registry cutover):\n\n- SourceInspector interface: Name + AppliesTo(StorageType) + Inspect(SourceView,\n Params). AppliesTo gates backend-specific inspectors.\n- SourceView: walks a filesystem\n[…]\ns but a different body skeleton lands in a\ndifferent class).\n\nRefs #25.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "feat(inspect): phase 4 — raw-source layer",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "491f73ec7819312ac8398124ff5bd20648e3e1cd",
"body": "Add the collection-layer half of the two-layer inspector model (additive; the\nold Corpus inspectors remain until the registry cutover):\n\n- CollectionInspector interface: Inspect(CollectionView, Params) Evidence.\n- CollectionView: resolves a collection's items via project.Items and parses\n each once\n[…]\nfacets. Marks the old Corpus Inspector interface deprecated.\n\nRefs #25.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "feat(inspect): phase 3 — collection layer",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "37b0f078c9faea73410b879d84822f0a7a862400",
"body": "Add the shared profile-class summarizer and the first inspector parameter\n(additive; existing inspectors untouched):\n\n- Params + ParseParams: three mutually-exclusive collapse-tolerance forms — a\n named --detail level (exact/grouped/coarse, default grouped), a 0-1 similarity\n proportion, and a max\n[…]\nerance reducing\nclass count, and the max-classes budget cap.\n\nRefs #25.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "feat(inspect): phase 2 — summarizer + parameters",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8bd01df227fe190f07102137edbf38b3b3fd9364",
"body": "Add the three reusable measurement primitives the inspector-layers reorg builds\non, as pure functions over generic inputs (additive; the 11 existing inspectors\nare untouched):\n\n- objectFields([]map[string]any): data dictionary — per-field presence, type\n histogram, scalar cardinality, and enum-cand\n[…]\ntions + level jumps, and casing/\nextension/depth histograms.\n\nRefs #25.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "feat(inspect): phase 1 — measurement primitives",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7c7819fb3e0b7d337420a49b3e32cd031a0bc2f8",
"body": "Add product/specs/inspector-layers-plan.md pairing with the finalized spec.\nSix phases, additive then atomic cutover:\n\n1. Measurement primitives (object_fields, markdown_body, file_metadata) as pure\n functions over generic inputs\n2. Summarizer (profile-class dedup + outlier diff) + Params toleranc\n[…]\nitecture Decisions, and defers array/\nnested object_fields work to #58.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "plan: inspector layers implementation plan",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f2d9a9b87354615c0c6d2192d82d5cde5eded34b",
"body": "Fold the four open questions into Design and close the section (Still open:\nNone):\n\n- Layer selection inferred from the argument (collection selector wins when it\n resolves; otherwise raw). No --raw/--collection flag.\n- Collapse tolerance: three mutually-exclusive forms (named level default\n `grou\n[…]\nterization deferred to #58 (filed).\n\nUpdate test checklist accordingly.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "spec: resolve inspector-layers open questions",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4495b45ca8b6a86d05f22917e499e71b9bbcd2db",
"body": "Expand the Open Questions section per .cursor/skills/write-spec: each question\nnow self-explanatory with Context / Choices & tradeoffs / recommendation,\nworked examples, and a comparison table for the tolerance scale.\n\n- Q1 inspect grammar for layer selection (infer-from-argument vs explicit flag)\n-\n[…]\nel detail already committed in\nDesign, doesn't block finalizing Design.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "spec: rewrite inspector-layers open questions to write-spec format",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2fb666bc8b7cfbb2dcf0c1c9f8357e7402a25653",
"body": "Revise inspector-layers-spec.md from an in-place re-classification of all 11\ninspectors into a consolidated model: 11 inspectors collapse to ~5 over 3\nreusable measurement primitives.\n\n- Primitives: object_fields (a data dictionary over object maps),\n markdown_body (body structure with facets), fil\n[…]\n #25 cull as choosing columns/facets rather than deleting\n inspectors.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "spec: consolidate inspector layers around reusable primitives (#25)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "870ad91b7c49d27ba1d3e0aca6cb780c214ae9d2",
"body": "Add product/specs/inspector-layers-spec.md, a planning spec that splits\ninspectors into two layers over the #31 storage seam:\n\n- a raw-source layer that measures a backend store directly, addressed by\n backend-native storage.Reference (filesystem today; file databases later);\n- a collection layer t\n[…]\nl single-scope record and the current direction don't\nsilently diverge.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KPA2ZKsHUuEuBk5nb5fovt",
"is_bot": false,
"headline": "spec: inspector layers — raw-source vs collection inspectors (#25)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T06:38:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "45ecb365d0116db8e10d4f5bb9925c6bfdb20d79",
"body": "Add text check types for body content linting",
"is_bot": false,
"headline": "Merge pull request #59 from abegong/claude/kind-ritchie-k2rt66",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T05:54:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49fcdc92c4fe9e91a186ab639ca0bba0dccdaa77",
"body": "Hand-written docs for text_requires/text_forbids/text_denylist:\n\n- how-to/configure-rules.md: a 'Lint the body as text' section (forbid,\n require, denylist, and an opt-in fix; plain-text items in scope).\n- reference/configuration.md: a 'Text rules' subsection (span selector,\n unanchored regex, mat\n[…]\ng.\n- internal/checks/README.md: the fourth (Text) family and textSpans.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "docs: document the text check family",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T05:51:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3a84f6cad502727780a539766d0143fa0cc7882c",
"body": "Drop the blanket \"no frontmatter found\" guard in check and item list so\nthe configured checks run against any item. Text and filesystem rules\nlint the body and path of a plain-text (.txt or frontmatter-less .md)\nitem; object checks surface their own missing-field violations against\nthe nil metadata.\n[…]\nr-less .txt flags a body TODO on the right line, and\npasses when clean.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "feat(check): lint frontmatter-less files instead of rejecting them",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T05:44:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e7ea6225b16f7c310c9dec03501aeb10de0a94ad",
"body": "Extend 'fix' from a frontmatter formatter to also repair body text\nwhere a text_forbids rule declares a fix template:\n\n- applyTextFixes rewrites the body via each fixable rule's ApplyFix\n (regexp replacement over the rule's selected spans), reconstructs the\n file from the verbatim body tail, then \n[…]\nhout-fix preserves\n the body while frontmatter is still canonicalized.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "feat(fix): apply opted-in text_forbids body fixes with re-check",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T05:35:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "96034bc5af263b01ecb98dad0bc072a5c10023d7",
"body": "Implement the plainText/text check family from the text-checks spec\n(#49): regex and literal-substring policy over an item's body text,\nwith a span selector and line-level diagnostics.\n\n- config: text_requires/text_forbids/text_denylist constants, rawCheck\n and CheckInstance fields (match/select/fi\n[…]\next_forbids) lands next. Family\nrelabel/restructure is deferred to #56.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "feat(checks): add text family (text_requires/forbids/denylist)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T05:32:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1181d0f881595afcafc7f01fb085549e29c93075",
"body": "The four-family relabel and per-family package restructure are tracked\nin #56 as a precursor PR; this spec only adds the plainText family into\nthat structure.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "Link text-checks spec to checks-reorg issue #56",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T05:22:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "59aa4990f65252d44dfef56364e5780d875f1875",
"body": "The literal-substring kind is named text_denylist; replace the Open\nQuestions section with a resolved-decisions breadcrumb. No open\nquestions remain in the spec.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "Resolve text-checks open question: adopt text_denylist",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T05:19:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "913bee44a8e9ab20be6c1400970b29ae237edbf8",
"body": "Reframe the spec around the storage layer's vocabulary (#31): a\ncheckTypeFamily groups check types by source-data kind. The text rules\nform a new plainText family, resolving the parked family question.\n\n- plainText is the fourth family alongside markdownBodyText,\n structuredObject, and fileSystem (\n[…]\nk 'source:' handle.\n- Denylist kind name is now the only open question.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "Adopt four-family model in text-checks spec; resolve family placement",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T05:06:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bd032bd0de06b1e69fced7f826b8bd6d690b375a",
"body": "Locks in review decisions:\n- Lean v1 span selector (body/line/first-line/matched-lines); richer targets\n (nth line, last-line, paragraph, relative offset) deferred to #51.\n- Adds a dedicated text_denylist kind for a list of literal substrings,\n replacing the literal flag; its name is a new open qu\n[…]\nen questions now: family placement (parked) and the denylist kind name.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "Revise text-checks spec: lean targets, denylist kind, fix re-check",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T04:04:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e5d78faf160d0ee38cc0d9dd68783692a12bf1ac",
"body": "- Resolves the any/all modeling: splits into text_requires / text_forbids\n (polarity in the kind name) with a self-describing match: any|all knob on\n requires only; drops the confusing quantifier all|any|none enum. fix now\n attaches only to text_forbids, which always locates the offending text.\n-\n[…]\narget scope, literal flag vs\n list kind, fix re-check, examples scope.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "Revise text-checks spec: two-kind model and reformatted open questions",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T04:04:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1313f0c86905ed6384e7148e7427644948010522",
"body": "Folds in review feedback:\n- Span selector replaces the flat target enum: adds line-number (nth line),\n paragraph, and matched-lines + offset (the nth line before/after a matched\n line), composed via index/offset modifiers.\n- Collapses requires/forbids into one text_match kind parameterized by\n qu\n[…]\nvs-two kinds, literal-vs-list substrings, fix re-check, examples scope.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "Revise text-checks spec: richer targets, optional fixes, examples",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T04:04:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b15ce330c928183fee27f4147fb4d16c0cd5898c",
"body": "Drafts product/specs/text-checks-spec.md: a fourth `text` check family\nrunning unanchored regex / string-policy rules over an item's body and\nover frontmatter-less files, with line-level diagnostics. Reuses the\nfilesystem family's target × rule model (body / line / first-line /\nmatched-lines) and th\n[…]\nteral-substring surface, and whether matched-lines/select ships in v1).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BJzAuT2XozGK9PqBVP97xR",
"is_bot": false,
"headline": "Add text-checks spec for body/plain-text content checks (#49)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T04:04:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "67c342d66c23fb5d5d706ad3633685d28334c08c",
"body": "Implement storage layer abstraction (issue #31)",
"is_bot": false,
"headline": "Merge pull request #55 from abegong/claude/optimistic-volta-ixocna",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-23T04:01:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e725505280bc3d9d5e168046a049fefffa7b5642",
"body": "…hase 4)\n\nRename deep-dives/connectors.md → storage.md and reframe it around the triad\n(StorageType / StorageInstance / CollectionDefinition), keeping the GX lineage,\ngranularity principle, and configured/inferred axis. Update the glossary\n(replace the Connector row with the four new terms), the con\n[…]\ne all green; dogfood check passes. Spec/plan retirement waits on merge.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019y9bYbN6rmufRCfxt9ciHk",
"is_bot": false,
"headline": "docs(storage): retire \"connector\"; document the storage layer (#31, p…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T03:56:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3fad870e48df18093658f4f26a484ced060df100",
"body": "…e 3)\n\nA storage instance may externalize collections into one file each under\n.katalyst/storage/<instance>/<collection>.yaml, the escape hatch for instances\nthat outgrow an inline collections: block. Inline and per-file collections\ncoexist; a name declared both inline and in a file is an error. Mirrors the\nformer standalone collections/ directory convention.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019y9bYbN6rmufRCfxt9ciHk",
"is_bot": false,
"headline": "feat(config): per-collection files via instance-scoped dir (#31, phas…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T03:56:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a817eb9d0b79bf2674017f8ab059d18cfd0b30eb",
"body": "Replace the standalone .katalyst/collections/ kind with storage instances that\nembed their collections. config now parses .katalyst/storage/<name>.yaml\n(convention) or an inline storage: block (explicit), each instance carrying a\ntype, root, and a collections: map. Collections are flattened into\nCon\n[…]\nchange; acceptable in early days. make all green; dogfood\ncheck passes.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019y9bYbN6rmufRCfxt9ciHk",
"is_bot": false,
"headline": "feat(config): storage instances declare their collections (#31, phase 2)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T03:56:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5e967314e3ea8119bbd559210a777814ace7585e",
"body": "Introduce internal/storage: StorageType + registry (filesystem only),\nGranularity, Reference, and the CollectionDefinition interface — the narrow,\ntwo-way seam issue #31 asks for. Move Item here from internal/project to break\nthe would-be import cycle (project re-exports it as a type alias).\nFilesys\n[…]\n/project and cmd suites pass\nunedited; only the new package adds tests.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019y9bYbN6rmufRCfxt9ciHk",
"is_bot": false,
"headline": "feat(storage): extract the backend↔domain seam (#31, phase 1)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T03:53:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "04831e0aa63870d0b7555347a47f8134ecb76094",
"body": "Phased, tests-first plan for the storage-layer spec. Sequenced seam-first\n(behavior-preserving internal/storage refactor the existing suite guards\nunchanged), config model second (StorageInstances embedding collections,\nthe breaking change), then the per-collection-file escape hatch, then docs\nand g\n[…]\n-decision tables, an\nout-of-scope list, and a per-phase test checklist.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019y9bYbN6rmufRCfxt9ciHk",
"is_bot": false,
"headline": "docs: add storage-layer implementation plan (#31)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T03:53:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b527911791999ef7178a516a1d009e0a44c4b8f2",
"body": "Resolve the per-collection reviewability question: support both inline\ncollections and optional per-collection files (instance-scoped), chosen per\ninstance. Open Questions section is now empty.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019y9bYbN6rmufRCfxt9ciHk",
"is_bot": false,
"headline": "docs: close storage-layer spec open questions",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T03:53:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4eaff8e17f009e5a6754da363f3d234aafc7f44a",
"body": "- Collections are declared inside their StorageInstance (definition-centric,\n GX Datasource-style); the standalone collections/ kind is replaced.\n- Support two authoring forms: a storage/ directory (general) and an inline\n config.yaml block (very small projects).\n- No runtime synthesis of instance\n[…]\nollections.\n- Explain the internal Item package-boundary detail inline.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019y9bYbN6rmufRCfxt9ciHk",
"is_bot": false,
"headline": "docs: revise storage-layer spec per maintainer decisions",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T03:53:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "286328f2f35f2a10a1e205ebf294f317240e5c2b",
"body": "Replace the single \"connector\" framing with three named concepts —\nStorageType, StorageInstance, CollectionDefinition — per the maintainer's\nproposed vocabulary, grounded in the recovered Great Expectations\nDataConnector prior art. Defines the narrow Go seam (internal/storage),\nthe FilesystemCollect\n[…]\nal of the file-in-many-collections case, and the Item package\nboundary.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019y9bYbN6rmufRCfxt9ciHk",
"is_bot": false,
"headline": "docs: draft storage-layer spec (#31)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-23T03:53:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b303c54cc62f89b44d591b1f575c923fafd2a5dd",
"body": "Refine CLI help copy and add fixture-based help snapshots",
"is_bot": false,
"headline": "Merge pull request #54 from abegong/feature/cli-help-style-snapshots",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-22T20:37:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57e9d246cfadb7deb337cbb4cc03b6bccf97e760",
"body": "Update two CLI help snapshot fixtures to match current upstream help text after rebasing the branch onto main.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Sync help fixtures with rebased command docs references.",
"author_name": "Abe Gong",
"author_login": null,
"committed_at": "2026-06-22T20:36:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2c5e872773da7c230de05107a621ace413fa9db0",
"body": "Move top-level help expectations into text fixtures and assert command help surfaces against those fixtures so output contracts stay readable and stable.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Add fixture-based snapshots for CLI help output.",
"author_name": "Abe Gong",
"author_login": null,
"committed_at": "2026-06-22T20:36:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3893805bc204e09e00190d1e881d6ac4230de302",
"body": "Align root help output with lifecycle/setup-priority ordering, update top-level copy, and document the ordering and phrasing contract for contributors.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Codify root help copy and ordering conventions.",
"author_name": "Abe Gong",
"author_login": null,
"committed_at": "2026-06-22T20:36:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "02dfe3c2ca2808d88510b4acd4033d37149ac8af",
"body": "Add project links in root help and preserve explicit command order so the top-level command layout reflects the intended workflow.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Refine root help copy and ordering.",
"author_name": "Abe Gong",
"author_login": null,
"committed_at": "2026-06-22T20:36:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f86b051c0349c24591989b29d51d4a0251cb3dd2",
"body": "…ions\n\ndocs(skills): clarify what makes open questions actionable",
"is_bot": false,
"headline": "Merge pull request #45 from abegong/cherry-pick/write-spec-open-quest…",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-22T18:35:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f1c11164c9e59f8db2ab56e997aaec56eae95041",
"body": null,
"is_bot": false,
"headline": "Merge branch 'main' into cherry-pick/write-spec-open-questions",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-22T18:18:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2305f6cc456576215e5fe10577395dd2f4355f48",
"body": "Add early-stage warning notices to documentation",
"is_bot": false,
"headline": "Merge pull request #42 from abegong/claude/brave-planck-tr30vh",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-22T17:57:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3c85c835b386bec843186bbe4f0c02602a2f476e",
"body": "The {{< hint warning >}} shortcode passes its inner text raw, so the bold\n**Katalyst is in its earliest days.** never parsed and showed literal asterisks.\nSwitch to a native > [!WARNING] alert (same mechanism as the working [!NOTE]\nblock), which Goldmark parses as markdown, and prepend a ⚠️ icon. Ap\n[…]\nd to the\nhome, Why Katalyst, and Getting Started pages for consistency.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012j81qna4NPVxmL1A7yrJLd",
"is_bot": false,
"headline": "docs: render the early-days warning as a native alert with a ⚠️ icon",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-22T17:56:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cf62e8d863231bffcfb97f3371048332b052bb4e",
"body": "Replace the GitHub Actions + Netlify-token preview deploy with Netlify's native\nDeploy Previews. Connecting the repo via Netlify's GitHub App needs no personal\naccess token or GitHub secrets and posts the preview URL on each PR\nautomatically.\n\n- Delete preview-docs.yml. Build validation on PRs is al\n[…]\nproduction deploy of main\ncan be ignored or disabled in the Netlify UI.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012j81qna4NPVxmL1A7yrJLd",
"is_bot": false,
"headline": "ci: use Netlify Deploy Previews via repo connection for PR docs previews",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-22T17:51:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8dd5dde2cc1668f5f836cd4cba0fa7ce96c96000",
"body": "The Pages source is \"GitHub Actions\", which serves a single deployed site and\nnever serves the gh-pages branch. pr-preview-action only pushed built files to\nthat branch, so every per-PR preview URL 404'd. Production publishes via the\nActions source and is unaffected.\n\nReplace the branch-based previe\n[…]\nLIFY_AUTH_TOKEN and NETLIFY_SITE_ID and the variable\nNETLIFY_SITE_NAME.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012j81qna4NPVxmL1A7yrJLd",
"is_bot": false,
"headline": "ci: move PR docs previews to Netlify; keep Pages on GitHub Actions",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-22T17:51:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1954a9d8135737d2dc118f1cc9f188650626dabc",
"body": "deploy-docs and preview-docs each push to the gh-pages branch but used\nseparate concurrency groups, so their pushes (and the GitHub Pages builds\nthey trigger) could race. When a main deploy and a PR-preview deploy landed\nseconds apart, Pages published the main-deploy snapshot — which excludes\npr-pre\n[…]\n would abort an in-flight\nmain deploy, not just a stale per-PR preview.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012j81qna4NPVxmL1A7yrJLd",
"is_bot": false,
"headline": "ci: serialize docs deploys onto a shared gh-pages concurrency group",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-22T17:51:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a2a8deee682da09f2da5d057b731cc4b427f5307",
"body": "Mirror the README/home-page warning at the top of the main docs pages so\nreaders landing directly on them see the same caveat.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012j81qna4NPVxmL1A7yrJLd",
"is_bot": false,
"headline": "docs: add early-days warning to Why Katalyst and Getting Started",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-22T17:51:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "646a4418816f4a8606cc2525ebcc1122fc008150",
"body": "Dogfood katalyst on its own Hugo docs and clean up inconsistencies",
"is_bot": false,
"headline": "Merge pull request #46 from abegong/claude/intelligent-cray-qlfofc",
"author_name": "Abe Gong",
"author_login": "abegong",
"committed_at": "2026-06-22T17:26:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51c3ae5b042c02552a7d3f3116a698f4f50c771c",
"body": "Stand up a repo-root .katalyst/ project that checks docs/content/ and wire\n`katalyst check` into the CI docs job, so doc frontmatter drift fails the\nbuild. Now possible because #40 added TOML/JSON frontmatter support.\n\nConfig (.katalyst/ at repo root, not under docs/content/ so the recursive\nunmatch\n[…]\ngate. Spec updated to\nstatus: implementing with the as-built decisions.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01T9fQunNmCgefESVur1UQ6r",
"is_bot": false,
"headline": "Dogfood katalyst on its own docs; clean up docs (#28, #29)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-22T17:22:15Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 2,
"commits_last_year": 242,
"latest_release_at": "2026-07-01T17:51:23Z",
"latest_release_tag": "v0.0.2",
"releases_from_tags": false,
"days_since_last_push": 17,
"active_weeks_last_year": 5,
"days_since_latest_release": 26,
"mean_days_between_releases": 5.9
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 85,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/abegong/katalyst",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/abegong/katalyst",
"is_deprecated": false,
"latest_version": "v0.0.2",
"repository_url": "https://github.com/abegong/katalyst",
"versions_count": 2,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-06-29T22:36:49Z",
"latest_version_yanked": null,
"days_since_latest_publish": 28
}
]
},
"popularity": {
"forks": 0,
"stars": 4,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 23
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"docs/go.mod",
"go.mod"
],
"largest_source_bytes": 42465,
"source_files_sampled": 171,
"oversized_source_files": 0,
"agent_instruction_files": [
".github/workflows/AGENTS.md",
"AGENTS.md",
"cmd/AGENTS.md",
"cmd/testdata/AGENTS.md",
"docs/AGENTS.md",
"internal/checks/AGENTS.md",
"internal/checks/jsonschema/testdata/AGENTS.md",
"internal/codec/markdownbodytext/AGENTS.md",
"internal/examples/AGENTS.md",
"internal/fix/AGENTS.md",
"internal/inspect/AGENTS.md",
"internal/project/AGENTS.md",
"internal/skillpack/AGENTS.md",
"internal/storage/AGENTS.md",
"internal/storage/collection/AGENTS.md",
"internal/storage/collection/sqlite/AGENTS.md"
],
"agent_instruction_max_bytes": 12469
},
"dependencies": {
"manifests": [
"docs/go.mod",
"go.mod"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "github.com/bmatcuk/doublestar/v4",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v4.10.0"
},
{
"name": "github.com/pelletier/go-toml/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.4.0"
},
{
"name": "github.com/santhosh-tekuri/jsonschema/v6",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v6.0.2"
},
{
"name": "github.com/spf13/cobra",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.8.1"
},
{
"name": "gopkg.in/yaml.v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
},
{
"name": "modernc.org/sqlite",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.53.0"
}
],
"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": 1,
"merged_prs": 74,
"open_issues": 22,
"closed_ratio": 0.577,
"closed_issues": 30,
"closed_unmerged_prs": 2
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "claude",
"commits": 119,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
},
{
"type": "User",
"login": "abegong",
"commits": 75,
"avatar_url": "https://avatars.githubusercontent.com/u/1239085?v=4"
},
{
"type": "User",
"login": "katabase-abe",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/216935294?v=4"
}
],
"contributors_sampled": 3,
"top_contributor_share": 0.607
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"deploy-docs.yml",
"release.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"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": "30 out of 30 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": 0,
"reason": "Found 1/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"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": 0,
"reason": "no 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": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"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": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"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": 0,
"reason": "Project has not signed or included provenance with any releases.",
"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": 9,
"reason": "1 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "2ce3d174a89377b5ae16daa670d26fe8ed5ef3c2",
"ran_at": "2026-07-28T08:18:04Z",
"aggregate_score": 4.2,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-06T20:20:41Z",
"oldest_open_prs": [
{
"number": 128,
"created_at": "2026-07-01T23:01:57Z",
"last_comment_at": "2026-07-01T23:02:00Z",
"last_comment_author": "netlify"
}
],
"last_merged_pr_at": "2026-07-06T20:19:05Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 32,
"created_at": "2026-06-22T15:59:28Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 33,
"created_at": "2026-06-22T15:59:32Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 34,
"created_at": "2026-06-22T15:59:41Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 48,
"created_at": "2026-06-22T18:16:59Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 51,
"created_at": "2026-06-22T19:18:42Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 52,
"created_at": "2026-06-22T19:18:50Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 57,
"created_at": "2026-06-23T05:25:35Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 58,
"created_at": "2026-06-23T05:45:00Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 68,
"created_at": "2026-06-23T20:17:57Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 69,
"created_at": "2026-06-23T20:30:54Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 84,
"created_at": "2026-06-24T04:48:51Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 85,
"created_at": "2026-06-24T04:48:58Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 86,
"created_at": "2026-06-24T05:50:51Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 89,
"created_at": "2026-06-24T18:07:11Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 90,
"created_at": "2026-06-24T18:20:28Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 101,
"created_at": "2026-06-24T20:53:44Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 102,
"created_at": "2026-06-24T20:53:50Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 115,
"created_at": "2026-06-25T12:58:24Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 120,
"created_at": "2026-06-28T17:16:09Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 121,
"created_at": "2026-06-28T17:16:15Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/abegong/katalyst",
"host": "github.com",
"name": "katalyst",
"owner": "abegong"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"security": 42,
"vitality": 66,
"community": 44,
"governance": 58,
"engineering": 77
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 66,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"commits_last_year": 242,
"human_commit_share": 1,
"days_since_last_push": 17,
"active_weeks_last_year": 5
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 17 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 17
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "5/52 weeks with commits",
"points": 3.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 5
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "242 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 242
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 2,
"latest_release_tag": "v0.0.2",
"releases_from_tags": false,
"days_since_latest_release": 26,
"mean_days_between_releases": 5.9
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "2 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 2
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 26 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 26
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~5.9 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 5.9
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"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": 44,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 8,
"inputs": {
"forks": 0,
"stars": 4,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "4 stars",
"points": 7.7,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 4
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"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": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (Apache-2.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "Apache-2.0"
}
}
],
"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": 13.5,
"status": "met",
"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": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 58,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 28,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 3,
"top_contributor_share": 0.607
},
"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 61% of commits",
"points": 8.8,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 61
}
}
],
"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 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"merged_prs": 74,
"open_issues": 22,
"closed_issues": 30,
"issue_closed_ratio": 0.577,
"closed_unmerged_prs": 2
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "58% of issues closed",
"points": 27,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 58
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "74/76 decided PRs merged",
"points": 37.2,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 74,
"decided": 76
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 1/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"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": 60,
"inputs": {
"followers": 78,
"owner_type": "User",
"is_verified": null,
"owner_login": "abegong",
"public_repos": 45,
"account_age_days": 5350
},
"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": "78 followers of abegong",
"points": 13.6,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 78,
"login": "abegong"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "45 public repos, account ~14 yr old",
"points": 24.1,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 45
}
},
{
"code": "account_age_years",
"params": {
"years": 14
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"packages": [
"github.com/abegong/katalyst"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 28
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 28 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 28
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "2 published versions",
"points": 12,
"status": "partial",
"details": [
{
"code": "published_versions",
"params": {
"count": 2
}
}
],
"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": "good",
"name": "Engineering Quality",
"value": 77,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": "30 out of 30 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": [
"agent-memory",
"agents",
"ai",
"cli",
"golang",
"knowledge-base",
"knowledge-graph"
],
"has_wiki": false,
"homepage": "https://abegong.github.io/katalyst",
"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://abegong.github.io/katalyst",
"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": "7 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 7
}
}
],
"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": "at_risk",
"name": "Security",
"value": 42,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 42,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 4.2
},
"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": "30 out of 30 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 1/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"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": "no update tool detected",
"points": 0,
"status": "missed",
"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": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"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 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"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": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"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": "1 existing vulnerabilities detected",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"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": 2
},
"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": 75,
"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": 0.99,
"agent_instruction_files": [
".github/workflows/AGENTS.md",
"AGENTS.md",
"cmd/AGENTS.md",
"cmd/testdata/AGENTS.md",
"docs/AGENTS.md",
"internal/checks/AGENTS.md",
"internal/checks/jsonschema/testdata/AGENTS.md",
"internal/codec/markdownbodytext/AGENTS.md",
"internal/examples/AGENTS.md",
"internal/fix/AGENTS.md",
"internal/inspect/AGENTS.md",
"internal/project/AGENTS.md",
"internal/skillpack/AGENTS.md",
"internal/storage/AGENTS.md",
"internal/storage/collection/AGENTS.md",
"internal/storage/collection/sqlite/AGENTS.md"
],
"agent_instruction_max_bytes": 12469
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": ".github/workflows/AGENTS.md, AGENTS.md, cmd/AGENTS.md, cmd/testdata/AGENTS.md, docs/AGENTS.md, internal/checks/AGENTS.md, internal/checks/jsonschema/testdata/AGENTS.md, internal/codec/markdownbodytext/AGENTS.md, internal/examples/AGENTS.md, internal/fix/AGENTS.md, internal/inspect/AGENTS.md, internal/project/AGENTS.md, internal/skillpack/AGENTS.md, internal/storage/AGENTS.md, internal/storage/collection/AGENTS.md, internal/storage/collection/sqlite/AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".github/workflows/AGENTS.md, AGENTS.md, cmd/AGENTS.md, cmd/testdata/AGENTS.md, docs/AGENTS.md, internal/checks/AGENTS.md, internal/checks/jsonschema/testdata/AGENTS.md, internal/codec/markdownbodytext/AGENTS.md, internal/examples/AGENTS.md, internal/fix/AGENTS.md, internal/inspect/AGENTS.md, internal/project/AGENTS.md, internal/skillpack/AGENTS.md, internal/storage/AGENTS.md, internal/storage/collection/AGENTS.md, internal/storage/collection/sqlite/AGENTS.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": "99 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 99,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 71,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.76,
"toolchain_manifests": [
"docs/go.mod",
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile"
}
}
],
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"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": "76 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 76,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 42465,
"source_files_sampled": 171,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/171 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 171,
"oversized": 0
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"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": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-28T08:18:21.956559Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/abegong/katalyst.svg",
"full_name": "abegong/katalyst",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}