Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 5390,
"has_wiki": true,
"homepage": null,
"languages": {
"CSS": 1913,
"HTML": 1902518,
"Shell": 6499,
"Python": 14988,
"JavaScript": 136508,
"TypeScript": 2402829
},
"pushed_at": "2026-07-08T05:25:27Z",
"created_at": "2026-05-21T06:54:15Z",
"owner_type": "User",
"updated_at": "2026-07-08T05:25:31Z",
"description": null,
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript",
"HTML"
]
},
"owner": {
"blog": null,
"name": "Milky Way",
"type": "User",
"login": "milky-way-66",
"company": "ThangLong",
"location": null,
"followers": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/43933886?v=4",
"created_at": "2018-10-07T16:12:47Z",
"is_verified": null,
"public_repos": 9,
"account_age_days": 2844
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [],
"recent_commits": [
{
"oid": "db5a0362fd4eaf511ba450e7d97c1ce86c1a44ec",
"body": "Include version bump and remaining scaffold/fixture updates for the docops guide migration flow.",
"is_bot": false,
"headline": "chore: bump 0.9.23 and sync Claude docops migrate runbook",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-08T04:13:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d0196ab6328dcb5a7457e6d7c37453764f4019f",
"body": "Introduce `docops guide` with current vs expected structure and config examples, bundle contract schemas in the npm package, and wire agent runbooks so \"migrate\" routes to a single self-service flow.",
"is_bot": false,
"headline": "feat: add docops guide for agent-driven legacy→Writer migration",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-08T04:12:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "02777c36dff2fcaa48b521bf35d9076944b1c053",
"body": null,
"is_bot": false,
"headline": "add test script for get project setting",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-07T09:55:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0107629536bfc8d1dc4412c6f7c8108467482045",
"body": "Drop gated adopt scan/plan/apply/bootstrap in favor of docops layout\n(read-only probe), docops check, PROJECT_LAYOUT guide, and UPG-012\ncontract repair on upgrade. Replace ADOPT-001 with DOC-LAYOUT-001.",
"is_bot": false,
"headline": "feat: remove adopt workflow; add self-service docops migration",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-07T08:28:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ebc4513d4005bbf58474faee2f1919c6d84d480",
"body": null,
"is_bot": false,
"headline": "update package",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-07T07:52:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "238cb73c437ec6354b401fa3e56cba56268c3707",
"body": "Always scaffold detailDesign and otherDocument in docops.config.json\n(disabled by default), copy detail-design templates on init/repair, and\ndocument agent manual gap-fill when docops CLI commands fail.",
"is_bot": false,
"headline": "feat: default optional docops layers and manual migrate fallback",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-07T07:40:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2fe5f6072cbf8c5a1374b491310d913941480b24",
"body": null,
"is_bot": false,
"headline": "update version",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-07T06:54:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7e70a5fcc9418d1cd8655ce1147dbedb98e5701",
"body": "Allow contract_comments reply without filePath when threadId resolves\nglobally, fixing the TypeScript build for MCP dispatch.",
"is_bot": false,
"headline": "fix(comments): make reply filePath optional in operation types",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-07T06:52:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8d2adf368964575910b75548b6e3c6d9eeeb5f5",
"body": "Auto-discover entity-layout threads when scope flags are missing or --file\npoints at a legacy path. Document MCP/CLI reply flows and align runbooks with\ncreate/reply actions.",
"is_bot": false,
"headline": "fix(comments): resolve reply by threadId and improve agent guidance",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-07T06:47:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c717e7029099a713f5804b383f49c0bdafc9a1fd",
"body": "Enable CLI and contract_comments create/reply for git-backed threads,\nand document legacy path-keyed → entityId comment storage migration.",
"is_bot": false,
"headline": "feat: add local comment create/reply and entity migration guide",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-07T06:17:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "251158eb476eb82ec5a381fd79922da6e2d58453",
"body": "Greenfield projects now bootstrap v4 review registry and auto-sync\n.docops/registry/ on init, migrate repair, and index. Legacy path-keyed\nlayouts are detected and warned without auto-migration. Docops status\nreports entity registry health; docs clarify registry vs graph defaults.",
"is_bot": false,
"headline": "feat: default entityId registry on docops init and index",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-03T10:58:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22fa9a97e407eeb5e497a5df985fcfd47c03df1b",
"body": "Rewrite READMEs to emphasize chat prompts over CLI reference, and route\nnpm install through internal Verdaccio in setup, skills, and course messages.",
"is_bot": false,
"headline": "docs: prompt-first README and private registry install defaults",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-03T10:26:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "557dafc21bb1d0ea660994e6b3fb253f13e83bc0",
"body": "When both .docops/docops.config.json and .ai-spector/docflow.config.json\nexist, merge language fields from docops (including primaryLanguage ordering)\nso SRS generation targets the contract locale instead of stale legacy en-only\nsettings. Add CFG-002 workspace_check warning on mismatch and update generate\nskill docs to read docops first.",
"is_bot": false,
"headline": "fix: honor docops primaryLanguage over legacy docflow config",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-03T10:16:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af80a61ac4eca1e292f80c75a933d48c8d9aafc5",
"body": null,
"is_bot": false,
"headline": "update rule",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-03T06:50:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c6dac4c88254975324efeafe7669121b519a25d",
"body": null,
"is_bot": false,
"headline": "fix feedback",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-03T06:49:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "589979142edb4dbdf8c2dda92d49414226b7e725",
"body": "Run review check on staged doc commits and expose hooks ci for pipelines.\nReconcile review-queue-synced in lifecycle sync and mark the step after\nreview check when sign-off is enabled.",
"is_bot": false,
"headline": "feat(review): CI hooks gate and review-queue-synced lifecycle step",
"author_name": "long",
"author_login": null,
"committed_at": "2026-07-01T08:42:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb8ee9e3091104821392fbdf16b1bded970bd3c4",
"body": "Add symptom rows for comments, review, prototype, and gated template-import\nin onboarding help references for the legacy-aligned lifecycle step.",
"is_bot": false,
"headline": "docs: expand legacy-aligned help for migrate scope",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-30T06:45:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57aff25a71d631106b16b4dbcb21db9bf024e95d",
"body": null,
"is_bot": false,
"headline": "fix build",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-30T06:15:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "09ad8abf9a2be0774b4a5172208e54b25ed7ee18",
"body": "Require writerReady for docops-init lifecycle sync, detect and repair short\ndocTypes paths, probe git push for first-push-synced, and run full lifecycle\nsync after docops init instead of blindly marking steps done.",
"is_bot": false,
"headline": "feat: harden docops onboarding probes and canonical docTypes paths",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-30T06:13:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99d6ebf59a41bf895847348fa4689e2b954402cd",
"body": null,
"is_bot": false,
"headline": "fix test fail",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-29T09:47:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90bc7b98f74cf10287fdcbafd0c7607380ee0e31",
"body": "Add help runbook with lifecycle sync, workspace check, and symptom table;\nroute help/stuck/where-am-I/what's-next intents to ai-spector skill.",
"is_bot": false,
"headline": "feat: help skill and routing for lifecycle onboarding",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-29T09:27:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90ab22bd6f157e9d39fbccaf58fd00d201b0e16c",
"body": null,
"is_bot": false,
"headline": "feat: lifecycle hooks on setup adopt and docops init",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-29T09:25:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc43ad3f879f159619dcd27983ee9913452a3577",
"body": "Add filesystem probe reconciliation for .docops/lifecycle.json via CLI\nlifecycle sync and MCP lifecycle_sync so local adapter work can update\nonboarding checklist state before git push to Writer.",
"is_bot": false,
"headline": "feat: lifecycle sync CLI and MCP tool",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-29T09:23:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39c739aef885ef3392439ad7c64c2f7a6367367e",
"body": "Port Python docops_lifecycle core to TypeScript for adapter-side\nlifecycle sync: step definitions, reconcile from probes, summary,\nand read/write helpers for .docops/lifecycle.json.",
"is_bot": false,
"headline": "feat(docops): lifecycle.json load reconcile write",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-29T09:22:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "162b56c767d012c4c0ad9367fbf37468f19855c6",
"body": "Align MIN_DOCOPS docTypes paths with the Writer contract so review\ntests resolve documents under docs/ instead of repo-root srs/.",
"is_bot": false,
"headline": "fix(tests): use docs/srs paths in docops test scaffold",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T10:15:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb94f4304b926675da098baa0c2d82e8e1f8c75b",
"body": "Add registry sync with screen-map import/removal, ID-keyed comment storage\nand filters, review registry v4, and CLI --entity/--screen-id. Ship\nENTITY_REGISTRY_MIGRATION guide and migrate script in contracts bootstrap.",
"is_bot": false,
"headline": "feat(docops): entity registry sync, comment/review migration, CLI IDs",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T10:04:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d22eda1366a493aeeebebb29a6cd8576c041ffee",
"body": "…ents.\n\nResolve documents from literal docTypes.path values (e.g. docs/srs), stop expanding short segment names, and document storage_layout plus agent migration steps in MIGRATION.md.",
"is_bot": false,
"headline": "Use repo-root docTypes paths and expand docops migration guide for ag…",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T08:43:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "485a7b0533df2a3ba6364afb58e8eabb528452df",
"body": "Satisfies strict TypeScript build for optional language.path on publish.",
"is_bot": false,
"headline": "fix(docops): use lang.code fallback when writing docs gitkeeps",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T07:33:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f8a1e57457aebaad4afce31c07a5ad512bbb436",
"body": "Migrate and repair now scaffold the same .docops/ files as init (guide, review,\nprototype, templates, gitkeeps) while preserving legacy copies. Share bootstrap\nlogic via applyDocopsBootstrap and fix monorepo bundle path resolution.",
"is_bot": false,
"headline": "feat(docops): bootstrap full Writer contract on migrate",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T07:32:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fe5c2a98f1758652d5fb546cceaa1852fa1397c",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.9.1",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T06:53:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27a0c8239f5217449b34e44c9c2be202a4673c61",
"body": "Align ai-spector read/write paths with the Writer docops contract so both\ntools share .docops/prototype/config.json and screen-map.json.",
"is_bot": false,
"headline": "fix: use .docops/prototype/ for prototype config and screen-map",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T06:23:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a281693aeb9f484156b1517d9f5b8a8ba47e2ac",
"body": "Document 2-config model, 4-skill scaffold, work/contract CLI, and 0.9.0 breaking changes.",
"is_bot": false,
"headline": "docs: writer-contract redesign migration guide",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T04:42:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5fab374f520223d1fe7c6232edb8b4a081a768be",
"body": "…ntract only\n\n- init.ts: scaffold engine.json via writeEngineConfig; do NOT write\n docflow.config.json on fresh init\n- upgrade/stamp.ts: stamp scaffoldVersion in engine.json (not docflow);\n legacy read fallback retained for existing projects\n- capabilities.ts: remove PLUGIN_CAPABILITY_MAP, resolve\n[…]\ne.ts: update init marker checks to work without docflow file\n- package.json: bump minor version to 0.9.0 (breaking change)\n- tests: update capabilities + apply tests to reflect removed plugin registry",
"is_bot": false,
"headline": "refactor!: remove docflow.config.json from init; capabilities from co…",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T04:41:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "31e6b3b3b8d8d41d0b61b8a8de39124d71dd55c8",
"body": "Consolidate 23 ai-spector skills into 4 per design spec §5:\n- ai-spector: core (setup, upgrade, adopt, check, docops, course, work sessions)\n- ai-spector-generate: SRS, basic design, detail design, prototype, resolve-task, template-import\n- ai-spector-graph: graph ops + search + sync-audit\n- ai-spec\n[…]\nrity list.\nUpdate WORKFLOW.md and CLAUDE.md for 4-skill surface.\nUpdate claude-from-cursor.ts skill→task mapping to 4-skill model.\nAdd/update scaffold tests to assert exactly 4 ai-spector* skill dirs.",
"is_bot": false,
"headline": "feat(scaffold): reduce to 4 writer-contract skills",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T04:29:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "22c79529abbe47e3d2981bd0cbe6ee6c2c6ebb86",
"body": null,
"is_bot": false,
"headline": "feat(check): docops + engine rules with capability skip",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T04:15:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e86e154d08d4f4ac25e99e24f3cf6ee8b1b5961",
"body": "Add contract review/comments/prototype/translate CLI subcommands\nthat dispatch through contract.ts, and deprecate top-level lang with\na stderr warning pointing to contract translate queue.",
"is_bot": false,
"headline": "feat(cli): add contract command group",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T04:11:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13d7a1843eb1beedd0a89e16b07b6959f9ad56f4",
"body": "Add contract_review, contract_comments, contract_prototype, contract_translate\ntools with action discriminator routing. Each tool gates on the corresponding\ncapability via assertToolAllowed. Keep old review_* and comments_* tools as\ndeprecation shims that emit a stderr warning and delegate to the same run*\nfunctions. Includes 8 contract-mcp tests covering unknown-action errors,\nCapabilityDisabledError, and gate-mcp mapping.",
"is_bot": false,
"headline": "feat(contract): add grouped contract_* MCP tools",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T04:09:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c4889519c0e05e5b51bb55f1b79e9c9b5f72543",
"body": null,
"is_bot": false,
"headline": "feat(cli): add work command group; deprecate task",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T04:02:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43a7ec38ce0ccf262c7716ba9d05e7853bbb8209",
"body": "- src/core/operations/work.ts: re-export layer mapping runWork* → runTask*;\n runWorkCreate accepts kind \"change\" as alias for \"resolve\"\n- src/interfaces/mcp/tools/work.ts: MCP handlers for work_create/list/get/\n update/approve_plan/record_step/pause/resume/complete/abandon\n- schemas.ts: WorkKindEn\n[…]\ntask.ts: deprecation stderr warns on all toolTask* handlers\n- tests/work/work-mcp.test.ts: 7 tests covering kind→change mapping, list,\n and status; gate-mcp.ts already had work_* with null capability",
"is_bot": false,
"headline": "feat(work): add work_* MCP tools with task deprecation shims",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T03:59:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "158d0166f6aff78e75877448ac5b4663fea13a51",
"body": null,
"is_bot": false,
"headline": "feat(engine): gate MCP tools by docops capabilities",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T03:54:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cd5ceb5c45d9100eae488ea42cf7bd3fb34d4f19",
"body": "Update findProjectRoot to detect .docops/docops.config.json and\n.ai-spector/engine.json as valid project roots alongside legacy\ndocflow.config.json paths.\n\nRefactor loadDocflowConfig to synthesize a DocflowConfig from the\ndocops + engine 2-file model when no docflow.config.json is present,\nmapping l\n[…]\n.\nLegacy docflow.config.json paths continue to work unchanged.\n\nAdd tests/engine/project-context.test.ts to verify synthesis, legacy\nfallback, configFile pointing, and docType templatesPath selection.",
"is_bot": false,
"headline": "refactor(config): synthesize docflow config from docops + engine",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T03:52:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "52bfd38a1f73ccbf4b8ee0bb214524cc93b99ad2",
"body": "Remove DOCOPS_DUAL_WRITE env flag and all dual-write machinery:\n- Delete src/core/docops/dual-write.ts\n- Remove docopsDualWriteEnabled() from docops/paths.ts (keep LEGACY_DOCOPS_PATHS for migrate/assess)\n- Simplify resolveCommentsWriteRoots, resolveReviewQueueWriteRoots, resolvePrototypeScreenMapRel\n[…]\not) async helper to comments/paths.ts\n- Add tests/docops/paths.test.ts asserting resolveCommentsWriteRoots returns no legacy\n- Update comment test fixtures to seed at .docops/comments/ (contract path)",
"is_bot": false,
"headline": "refactor(docops): remove dual-write; contract paths only",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T03:46:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dc8cf7e0a9f77fc236794ffb0dcc3c8ba9ebce2c",
"body": "Add migrateFromDocflow() that splits legacy .ai-spector/docflow.config.json\ninto .docops/docops.config.json (via docopsConfigFromDocflow) and\n.ai-spector/engine.json (via writeEngineConfig). Wire --from-docflow flag\nto docops migrate CLI command.",
"is_bot": false,
"headline": "feat(docops): migrate docflow.config to contract + engine",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T03:40:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f7d4e375ec040a9ad728b9a4aa7a71ca859249e",
"body": null,
"is_bot": false,
"headline": "feat(engine): add capability gate helpers",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T03:38:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "12b837d79e5229759803cd6e6947a3a40cb178c4",
"body": null,
"is_bot": false,
"headline": "feat(engine): add engine.json types and loader",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-26T03:37:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b36e6e7de27e497e2750b9af63b14eb4a795e147",
"body": null,
"is_bot": false,
"headline": "update migrate",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-23T06:33:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dde0a4693d7647b73fe40b5a82a05ef4eaca08c7",
"body": null,
"is_bot": false,
"headline": "update migration setup",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-23T04:45:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a413661c5b4ae0d95a3792092bdb94d325a1298",
"body": null,
"is_bot": false,
"headline": "update spector",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T10:31:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "100b0b924cf8fee11bd5ebf19357e6a0991c786f",
"body": null,
"is_bot": false,
"headline": "docs: document docops status init migrate commands",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T09:01:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "930dec9aef0263649aa8282acf6cab46cf73a7f5",
"body": null,
"is_bot": false,
"headline": "fix(docops): resolve duplicate enabled key in buildDocTypes",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T09:00:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ce8710dd075e8f58873ac37fdf0d685ee88eb6e",
"body": null,
"is_bot": false,
"headline": "feat(skills): add ai-spector-docops runbook for Writer contract",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T09:00:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e18d4d94d68ffc0333be87705cc50475f75289f",
"body": null,
"is_bot": false,
"headline": "refactor(init): delegate docops scaffold to initDocopsContract",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T08:59:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "33c224f18ac657f8cfe30a9b3dcc05d88561e356",
"body": null,
"is_bot": false,
"headline": "feat(cli): add docops status and init commands",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T08:58:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e012d6944c339aee4e01b0018c7221932baffdce",
"body": null,
"is_bot": false,
"headline": "feat(docops): migrate repair mode and auto template copy",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T08:57:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b2e973ec444c0d46cbe456164db29932de450bce",
"body": null,
"is_bot": false,
"headline": "feat(docops): add Writer-ready initDocopsContract",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T08:54:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7160667b45c943905a6dee334a93147f9e8983e",
"body": null,
"is_bot": false,
"headline": "feat(docops): add project assessment for status command",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T08:52:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2632b7db18f0b5500db0f7b253fafb8b6a855e95",
"body": null,
"is_bot": false,
"headline": "feat(docops): add template copy helpers",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T08:51:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d6d992b4f2cc41705dfed85c8ae10b0381a1acc",
"body": "Point manual template copy and DOCOPS_LEGACY_PATHS notes to the Writer\ncontract migration guide in kari-writer/contracts.",
"is_bot": false,
"headline": "docs: link migrate README to MIGRATION.md",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T08:16:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c42f3fedabcd7ac70e06c1761230a48b014eaf4",
"body": null,
"is_bot": false,
"headline": "feat: refactor ai spector",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T06:59:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "936a5ba80c0065944f065e69a16c889eb5c966ef",
"body": null,
"is_bot": false,
"headline": "update config",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-22T04:19:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "376e3f619d7664cac7c558c4050df62630ef3feb",
"body": null,
"is_bot": false,
"headline": "add change detector feature",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:44:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55005667352d456d380dc564dcd6629a04a2480d",
"body": "Document queue drift engine, enrichment fields, and --no-enrich flags.",
"is_bot": false,
"headline": "docs(drift): document queue enrichment in CHANGELOG and cli-reference",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:42:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31d2fd9ddcbe90166df8d9f2bd9d787a9e01f4cd",
"body": "Add --no-enrich to lang queue pending and review queue CLI; MCP schemas pass enrich flag.",
"is_bot": false,
"headline": "feat(drift): add --no-enrich for fast queue listing",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:41:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50adbd66bee693056774bbb1abe9ed0973bf6bee",
"body": "Review runbook documents enrichment.impact.review and enrich-on-read queue flow.",
"is_bot": false,
"headline": "docs(drift): document review queue enrichment",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:41:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d0a0a053b4616809ae122d8b670ff32b92ba5e36",
"body": "Runbook reads enrichment.diff and impact buckets instead of legacy changes[].diff.",
"is_bot": false,
"headline": "docs(drift): update resolve-translation for enrichment",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:41:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4010684210f4bfe30a170d1bbb3a1edea099c9ae",
"body": "Backfill gitRef from git log when anchors lack it, fall through to legacy\nsnapshot/content/inline diff when git diff is empty, and add enrich-legacy tests.",
"is_bot": false,
"headline": "feat(drift): harden legacy diff fallbacks",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:41:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce6ecce4b84ecbc6471088d6c9ba63503a9a3446",
"body": null,
"is_bot": false,
"headline": "test(drift): add review enrich and reconcile anchor tests",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:38:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dbf3f0ae5f1ff57de9e70c52c292f726723e5dda",
"body": "Write baselineAnchor on internal quorum, wire enrichReviewJob into\nrunReviewQueue, purge legacy diffs/snapshots on resolve, and add\nwriteLegacySnapshots config flag.",
"is_bot": false,
"headline": "feat(drift): enrich review queue on read with baselineAnchor quorum",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:38:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "961b03c1a90ccd3de2cb7fe7fd0d8cc8452e77e9",
"body": "Store git-anchored baseline on approval invalidation instead of eager\nsaveDiff; extend review types and config for the drift model.",
"is_bot": false,
"headline": "feat(drift): add baselineAnchor and defer review diff to enrich",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:38:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e0e4d8bce3c10777f346adf7292a37e070228a2d",
"body": "Clear enrichment and strip legacy diff from resolved jobs; remove stored\nfingerprint content for origin, target, and change paths on resolve.",
"is_bot": false,
"headline": "feat(drift): purge legacy fingerprint content on translation resolve",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:36:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7ad014f3f3e4cbfda36ea5f85fc45c107679ed0",
"body": "Wire enrichTranslationJob into runLangQueuePending with git diff, graph\nimpact, and cached enrichment persisted on pending queue jobs.",
"is_bot": false,
"headline": "feat(drift): enrich translation jobs on pending read",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:35:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c451a3f97eb514ae5429a7673a23e601974b9a67",
"body": "Replace eager inline diffs and fingerprint content snapshots with\nDocAnchor on reconcile; diff/lines fields become optional for legacy jobs.",
"is_bot": false,
"headline": "feat(drift): translation reconcile stores anchors only",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:33:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c9534ac0d1197963e1ca1d9a763aff9817042a6",
"body": null,
"is_bot": false,
"headline": "feat(drift): add resolveDiffFromAnchor and linkLayerDrift",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:32:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63caeedfe291268055ca181d6aade344f8aa9bec",
"body": null,
"is_bot": false,
"headline": "feat(drift): add DocAnchor and EnrichmentCache types",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:31:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6bf3335ec0f22a26648e400d5992877c8c89f45",
"body": "Covers shared enrich module, translation/review git anchors, lazy enrichment on queue read, and legacy migration.",
"is_bot": false,
"headline": "docs(drift): add queue drift engine implementation plan.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:30:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "985de2310978c155b337b07ccfb83de162b5936b",
"body": "Replaces file-based translation/review snapshots with shared hash + gitRef\nanchors, lazy diff/impact enrichment, and graph-aware agent handoff.",
"is_bot": false,
"headline": "Add queue drift engine design spec for git-anchored queue enrichment.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:28:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f0b2899015daf1275eea5f825adb0c82076c490",
"body": null,
"is_bot": false,
"headline": "docs(sync): document sync snapshot and audit commands",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:08:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c8d6ab7ce5ee6da4014c361cc8a5c421d22abb53",
"body": null,
"is_bot": false,
"headline": "feat(sync): workspace_check SYNC-001 drift hint",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:08:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "174cbaf79be303811b5674e77bd6564c44b4aeed",
"body": null,
"is_bot": false,
"headline": "docs(sync): add ai-spector-sync-audit skill and router",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:06:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13365e7faa5245d3ad9314d66b7070d044e22085",
"body": null,
"is_bot": false,
"headline": "feat(sync): add sync_snapshot and sync_audit MCP tools",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:05:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b88f498816cbe372590dfd7fde8d4ed6abe75369",
"body": null,
"is_bot": false,
"headline": "feat(sync): traceability gap scan in sync audit",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:04:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c0df68c83354ec5e529950cc4f41f353c1fee19",
"body": null,
"is_bot": false,
"headline": "feat(sync): merge graph impact for changed paths in audit",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:03:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fa72d9d694b0e46362e517d2e03669171246c2e",
"body": null,
"is_bot": false,
"headline": "feat(sync): add sync snapshot and audit CLI commands",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:01:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b14ba4e82fe63237dce8a62a358891c122e69b7",
"body": null,
"is_bot": false,
"headline": "feat(sync): implement sync audit hash and git diff",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T08:00:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d027c626eac573b99eb32cd5b37133c93dbd9729",
"body": null,
"is_bot": false,
"headline": "feat(sync): implement sync snapshot command core",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:59:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8be1ed90d8cfc00fa827cb52e194e263294ec7ae",
"body": null,
"is_bot": false,
"headline": "feat(sync): git ref resolution and per-path diff",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:59:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee3e6d9c3f3ea24b86a64c27561ffbebd5d2fafc",
"body": null,
"is_bot": false,
"headline": "feat(sync): discover design layers and diff file hashes",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:58:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a487104b0914816a232bf1330826b897ce049356",
"body": null,
"is_bot": false,
"headline": "feat(sync): add baseline types and persistence",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:57:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0865a19420b22674e5cd2ded580cf2f79c66b5c4",
"body": "Covers snapshot baseline, git-backed audit, graph impact merge, and agent skill in three phases.",
"is_bot": false,
"headline": "docs(sync): add layer sync audit implementation plan.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:56:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d7d34c557a8f3679379862ef96f5984f0b6ceaf",
"body": "Defines snapshot baseline, git-backed drift detection, and agent handoff for SRS/BD/DD alignment checks.",
"is_bot": false,
"headline": "docs(sync): add layer sync audit design spec.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:53:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d4f3dd42c4fb315cc32cbcf1d75cb3b29a10c6a2",
"body": "Document backfill upstream docs, upstream graph impact, and agent scaffold\nupdates; bump package version to 0.8.90.",
"is_bot": false,
"headline": "chore(release): prepare v0.8.90 with derive-downstream changelog.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:17:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5acced373109e77cc7ab8a0113976a795976727",
"body": "Mirror derive routing and syncUpstream guidance across Claude skills, document\n--direction both for basic/detail edits, and test adopt validate derive gap.",
"is_bot": false,
"headline": "docs(derive): sync Claude scaffold and after-doc-edit upstream impact.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:09:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b2e14d1e1ee5f73f374bb533cbd8ca97775c85c",
"body": "Route backfill/derive phrases to the correct generate skills, tag extracted\nspecs with derive provenance, guard expand passes via priorDeriveTaskId, and\ndocument upstream sync and adopt handoff for the BD+DD-no-SRS scenario.",
"is_bot": false,
"headline": "feat(derive): polish routing, provenance, expand pass, and agent docs.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:08:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f567497d3a7570bab864763d42b67c8fbaeaa34",
"body": "…ode.\n\nAdd sourceMode on generate tasks, workflow dependency checks, readiness\nprofile, upstream graph impact bucket, adopt handoff, and tests.",
"is_bot": false,
"headline": "feat(derive): backfill upstream docs via derive-downstream generate m…",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T07:04:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f40ad687677ac66bd78cb34cc45aefed05c67ff",
"body": "Phased tasks for sourceMode on generate, readiness profile, adopt handoff,\nand upstream graph impact per approved design spec.",
"is_bot": false,
"headline": "Add derive-downstream implementation plan.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T06:54:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fbd0e8fd30cd4a61e6d94280e0e8cf8b34d68ed",
"body": "Documents sourceMode on generate tasks to extract SRS from existing basic\nand detail design, with optional expand pass and upstream impact hints.",
"is_bot": false,
"headline": "Add derive-downstream design spec for backfilling upstream docs.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T06:52:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0cc2c2be3bf09ac415efd587b9139ad5237e4a21",
"body": "…ng (v0.8.89)\n\nFix basic-design link parsing that produced phantom doc.bd.api-* nodes, index\nall markdown under SRS/BD/DD with dynamic paths, emit cross-doc references,\nand return the full index report on failure instead of throwing early.",
"is_bot": false,
"headline": "fix(index): doc-extract path slugs, index-all-md, and failure reporti…",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-19T06:09:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "11706dd586072ba60f278ce16e796632f35a4278",
"body": "Add adopt as a first-class task kind with task_approve_adopt_plan and server\ngates on apply/bootstrap. Extend scan/plan to legacy detail-design paths and\nupdate routing, runbooks, and docs for the align-legacy-docs journey.",
"is_bot": false,
"headline": "feat(adopt): gated legacy alignment workflow with detail-design support",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-18T09:28:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa5cb4acbbc8c4edc88fb6de7122ea18ecd6ed0e",
"body": null,
"is_bot": false,
"headline": "add suppport for import template",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-18T08:43:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "340a20122bee3902b9df30f5560933d392b5017c",
"body": "Centralize MCP tool names with CI registration checks, export import approve helpers from the SDK, and document MCP→CLI fallback paths when descriptors are stale or unavailable.",
"is_bot": false,
"headline": "Add template-import MCP parity tests and CLI fallbacks for import gates.",
"author_name": "long",
"author_login": null,
"committed_at": "2026-06-18T08:39:55Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 0,
"commits_last_year": 292,
"latest_release_at": null,
"latest_release_tag": null,
"releases_from_tags": false,
"days_since_last_push": 13,
"active_weeks_last_year": 8,
"days_since_latest_release": null,
"mean_days_between_releases": null
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": false,
"has_contributing": false,
"health_percentage": 28,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "ai-spector",
"exists": true,
"license": "MIT",
"keywords": [
"ai-spector",
"cursor",
"documentation",
"srs",
"traceability",
"requirements",
"software-design",
"graph"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/ai-spector",
"is_deprecated": false,
"latest_version": "0.9.24",
"repository_url": "https://github.com/milky-way-66/ai-spector",
"versions_count": 151,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 5330,
"first_published_at": "2026-05-07T11:08:39.919000Z",
"latest_published_at": "2026-07-17T04:37:28.119000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 4
}
]
},
"popularity": {
"forks": 0,
"stars": 1,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [
{
"date": "2026-06-09",
"count": 1
}
],
"complete": true,
"collected": 1,
"total_stars": 1
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": true,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json",
"website/tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 83366,
"source_files_sampled": 477,
"oversized_source_files": 2,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md",
"scaffold/claude/CLAUDE.md",
"scaffold/prototype/CLAUDE.md"
],
"agent_instruction_max_bytes": 19319
},
"dependencies": {
"manifests": [
"package.json",
"website/package.json"
],
"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": [
"npm"
],
"dependencies": [
{
"name": "@modelcontextprotocol/sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.29.0"
},
{
"name": "@types/mdast",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.4"
},
{
"name": "ajv",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^8.17.1"
},
{
"name": "ajv-formats",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.0.1"
},
{
"name": "commander",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^12.1.0"
},
{
"name": "rehype-stringify",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^10.0.1"
},
{
"name": "remark-gfm",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.1"
},
{
"name": "remark-parse",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^11.0.0"
},
{
"name": "remark-rehype",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^11.1.2"
},
{
"name": "semver",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^7.8.4"
},
{
"name": "unified",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^11.0.5"
},
{
"name": "unist-util-visit",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^5.1.0"
},
{
"name": "zod",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.4.3"
},
{
"name": "@docusaurus/core",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "3.10.1"
},
{
"name": "@docusaurus/faster",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "3.10.1"
},
{
"name": "@docusaurus/preset-classic",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "3.10.1"
},
{
"name": "@docusaurus/theme-mermaid",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "^3.10.1"
},
{
"name": "@mdx-js/react",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "^3.0.0"
},
{
"name": "clsx",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "^2.0.0"
},
{
"name": "prism-react-renderer",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "^2.3.0"
},
{
"name": "react",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "^19.0.0"
},
{
"name": "react-dom",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "^19.0.0"
},
{
"name": "unist-util-visit",
"manifest": "website/package.json",
"ecosystem": "npm",
"version_constraint": "^5.1.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": 0,
"merged_prs": 0,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": null,
"bot_contributors": 0,
"top_contributors": [],
"contributors_sampled": null,
"top_contributor_share": null
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"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 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"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": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": null,
"reason": "no dependencies found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": null,
"reason": "No tokens found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "27 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "db5a0362fd4eaf511ba450e7d97c1ce86c1a44ec",
"ran_at": "2026-07-21T22:48:27Z",
"aggregate_score": 1.5,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-08T05:25:28Z",
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/milky-way-66/ai-spector",
"host": "github.com",
"name": "ai-spector",
"owner": "milky-way-66"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 34,
"inputs": {
"security": 15,
"vitality": 32,
"community": 33,
"governance": 43,
"engineering": 44
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "at_risk",
"name": "Vitality",
"value": 32,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 52,
"inputs": {
"commits_last_year": 292,
"human_commit_share": 1,
"days_since_last_push": 13,
"active_weeks_last_year": 8
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 13 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 13
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "8/52 weeks with commits",
"points": 5.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 8
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "292 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 292
}
}
],
"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": "critical",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"releases_count": 0
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "no releases published",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases_published",
"params": {}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "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": 33,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 1,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "below_threshold"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "1 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 1
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "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": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"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 (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 62,
"inputs": {
"packages": [
"ai-spector"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 5330
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "5,330 downloads/month across npm",
"points": 49.7,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 5330,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 43,
"weight": 0.24,
"metrics": [
{
"key": "responsiveness",
"band": "critical",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution",
"pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"merged_prs": 0,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "no decided pull requests or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_decided_prs_or_data",
"params": {}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 39,
"inputs": {
"followers": 1,
"owner_type": "User",
"is_verified": null,
"owner_login": "milky-way-66",
"public_repos": 9,
"account_age_days": 2844
},
"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": "1 followers of milky-way-66",
"points": 2.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 1,
"login": "milky-way-66"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "9 public repos, account ~7 yr old",
"points": 19.3,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 9
}
},
{
"code": "account_age_years",
"params": {
"years": 7
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"ai-spector"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 4
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 4 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 4
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "151 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 151
}
}
],
"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": "at_risk",
"name": "Engineering Quality",
"value": 44,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 30,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": false
},
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "critical",
"name": "Security",
"value": 15,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 15,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 12,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 6,
"scorecard_aggregate": 1.5
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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 not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "27 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 69,
"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.87,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md",
"scaffold/claude/CLAUDE.md",
"scaffold/prototype/CLAUDE.md"
],
"agent_instruction_max_bytes": 19319
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md, scaffold/claude/CLAUDE.md, scaffold/prototype/CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md, scaffold/claude/CLAUDE.md, scaffold/prototype/CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "87 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 87,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_pinned_dependencies"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 48,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [
"tsconfig.json",
"website/tsconfig.json"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json, website/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json, website/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"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": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 83366,
"source_files_sampled": 477,
"oversized_source_files": 2
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "2/477 source files over 60KB",
"points": 54.8,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 477,
"oversized": 2
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "moderate",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"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": 20,
"status": "met",
"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": [
"Contributor list unavailable",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"deps.dev does not index npm:ai-spector@0.9.24; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-21T22:48:38.594518Z",
"schema_version": "0.25.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/milky-way-66/ai-spector.svg",
"full_name": "milky-way-66/ai-spector",
"license_state": "standard",
"license_spdx": "MIT"
}