JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 520,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 297338,
"Ruby": 1425
},
"pushed_at": "2026-07-10T19:56:57Z",
"created_at": "2026-05-28T17:10:15Z",
"owner_type": "Organization",
"updated_at": "2026-06-18T12:51:57Z",
"description": null,
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "main",
"license_spdx_raw": null,
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": "https://virtual360.io/",
"name": "Virtual 360",
"type": "Organization",
"login": "virtual360-io",
"company": null,
"location": "Brazil - Rio de Janeiro",
"followers": 105,
"avatar_url": "https://avatars.githubusercontent.com/u/51208259?v=4",
"created_at": "2019-05-30T17:00:17Z",
"is_verified": null,
"public_repos": 34,
"account_age_days": 2609
},
"license": {
"state": "absent",
"spdx_id": null,
"raw_spdx": null,
"file_present": false,
"scorecard_found": false,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v0.1.20",
"kind": "patch",
"published_at": "2026-06-18T12:51:49Z"
},
{
"tag": "v0.1.19",
"kind": "patch",
"published_at": "2026-06-01T17:26:32Z"
},
{
"tag": "v0.1.18",
"kind": "patch",
"published_at": "2026-06-01T17:21:18Z"
},
{
"tag": "v0.1.17",
"kind": "patch",
"published_at": "2026-06-01T16:35:23Z"
},
{
"tag": "v0.1.16",
"kind": "patch",
"published_at": "2026-06-01T13:34:15Z"
},
{
"tag": "v0.1.12",
"kind": "patch",
"published_at": "2026-06-01T12:47:10Z"
},
{
"tag": "v0.1.11",
"kind": "patch",
"published_at": "2026-06-01T12:42:32Z"
},
{
"tag": "v0.1.10",
"kind": "patch",
"published_at": "2026-06-01T12:20:10Z"
},
{
"tag": "v0.1.9",
"kind": "patch",
"published_at": "2026-06-01T11:15:39Z"
},
{
"tag": "v0.1.8",
"kind": "patch",
"published_at": "2026-06-01T02:05:50Z"
},
{
"tag": "v0.1.7",
"kind": "patch",
"published_at": "2026-05-31T23:28:10Z"
},
{
"tag": "v0.1.6",
"kind": "patch",
"published_at": "2026-05-31T23:24:33Z"
},
{
"tag": "v0.1.5",
"kind": "patch",
"published_at": "2026-05-31T23:13:41Z"
},
{
"tag": "v0.1.4",
"kind": "patch",
"published_at": "2026-05-31T19:34:19Z"
},
{
"tag": "v0.1.3",
"kind": "patch",
"published_at": "2026-05-31T19:32:05Z"
},
{
"tag": "latest",
"kind": "other",
"published_at": "2026-05-31T16:33:33Z"
}
],
"recent_commits": [
{
"oid": "00f96029431db82ebcbd93ee05d8e076b2be2ee6",
"body": null,
"is_bot": true,
"headline": "chore(homebrew): vbrain 0.1.20 [skip ci]",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-18T12:51:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac822a118e5bd56780c462ce7865324f4b8767ae",
"body": "Transcript ingestion (core):\n- New `google-transcript` source: deterministic WebVTT parser that consolidates\n consecutive speaker turns, and survives interruptions, markdown-escaped arrows\n (the Drive MCP output), voice tags, BOM and CRLF. Auto-detected by the WEBVTT\n header; registered before Te\n[…]\nnd the install/sync/remove lifecycle. go test ./... green; gofmt clean.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Nbz5s1eWPqud5D7mt2tybc",
"is_bot": false,
"headline": "feat: Google Meet transcript ingestion + installable optional skills",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-18T12:48:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bf02d413bbd657a7fb4c3d8dea4676226e827f7f",
"body": null,
"is_bot": true,
"headline": "chore(homebrew): vbrain 0.1.19 [skip ci]",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-01T17:26:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c80de5751afa0a5acd82b655dded945c297041be",
"body": "CLAUDE.md is a vbrain-managed asset like the skills (which InstallSkills already overwrites) — it shouldn't be frozen at whatever shipped on first install. WriteClaudeMD now overwrites unconditionally, so an existing base picks up a new release's instructions (e.g. the cloud self-provision steps) on\n[…]\nck and the now-meaningless bool return (WriteClaudeMD returns just error); flips the test from 'does not clobber' to 'overwrites'.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scaffold): regenerate CLAUDE.md on every install/update (overwrite)",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T17:25:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8ba1918068b6fc6ff3075332037807bd962f16ba",
"body": null,
"is_bot": true,
"headline": "chore(homebrew): vbrain 0.1.18 [skip ci]",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-01T17:21:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60cec3e11f9a3f0e679ecaea681f79c7ae8e6ef9",
"body": "…brain\n\nA base carries data, not the binary, and Claude Code's cloud won't auto-run any committed setup (hooks need trust; no repo file is auto-executed). So a fresh cloud sandbox that clones the base had no vbrain on PATH and skills failed.\n\nThe base's CLAUDE.md now instructs the agent to provision\n[…]\npts per-OS (Windows-safe — it's prose, not a shell script), and it's a no-op on a local machine where vbrain is already installed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scaffold): CLAUDE.md tells a cloned base how to self-provision v…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T17:20:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "87218fba194e8e2abc0545760321a8e83eb33aec",
"body": null,
"is_bot": true,
"headline": "chore(homebrew): vbrain 0.1.17 [skip ci]",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-01T16:35:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83b413d6dd05a5032c9f640680bfb719c0db1dc9",
"body": "…ssets via re-exec\n\nPublic install surface is now just `vbrain install` ≡ `vbrain update` (aliases for one handler). `setup` and `seed-routines` are no longer public subcommands — their logic lives internally (`__bootstrap` + bootstrapBase/SeedDefaults).\n\nOne signal drives the handler: has the base \n[…]\n TestReexecBootstrapSeedsDefaultRoutines covering the re-exec seed. README + add-knowledge SKILL.md updated (setup → __bootstrap).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(install): unify install/update, hide setup/seed-routines, sync a…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T16:34:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "12166875e87d7a5203956ffbfd77f2ee3201288a",
"body": null,
"is_bot": true,
"headline": "chore(homebrew): vbrain 0.1.16 [skip ci]",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-01T13:34:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a11fc22371e996002ffa2538b587aa6e19f66ab",
"body": "git pull --rebase rewrites commits, so it needs a committer identity. On CI /\nthe cloud / a --no-prompt install there's none configured and git refuses with\n\"empty ident name not allowed\", failing the build. PullRebase now injects the\nsame vbrain fallback (-c user.name/email) that commitArgs uses, via a shared\nidentityArgs helper. The test isolates git identity (useConfigOnly) so it\nreproduces that environment on any machine.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(git): inject fallback identity in PullRebase (green CI)",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T13:33:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "bd251596f0a7088f7098ed54d277c8a263ee53af",
"body": "This reverts commit 4c95cf8017de28026776c3656a87c76db2d22ae8.",
"is_bot": false,
"headline": "Revert \"chore: vbrain agent assets (CLAUDE.md + skills + routines)\"",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T13:28:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4c95cf8017de28026776c3656a87c76db2d22ae8",
"body": null,
"is_bot": false,
"headline": "chore: vbrain agent assets (CLAUDE.md + skills + routines)",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T13:04:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5af67e064a4986da99b10b7dba9a7e249020fad",
"body": "…; add version\n\nThree install-robustness fixes from real usage:\n\n- paths.IsBase now rejects the vbrain source checkout (it carries wiki/ but also\n a go.mod). Running `vbrain install` inside the code repo was treating it as the\n base, bootstrapping base assets into the source tree and trying to pus\n[…]\ns to \"dev\").\n\nTests: source checkout is not a base; a stale clone pushes after PullRebase;\nversion flag prints the injected value.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(install): don't hijack the source checkout; rebase on non-ff push…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T13:03:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "394f2d36056133b30ceaee76ef326e11e155fd5a",
"body": "A stale tap clone reports \"already installed\" against the old version, so the\nHomebrew delegation now runs `brew update` before `brew upgrade vbrain` — the\nfreshly-published formula is seen without the user refreshing the tap by hand.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(update): refresh the tap (brew update) before brew upgrade",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T12:58:48Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "66d3f943a3e4ce18e5cdc2c5a7ffaf80ce6d3d00",
"body": null,
"is_bot": true,
"headline": "chore(homebrew): vbrain 0.1.12 [skip ci]",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-01T12:47:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da9cf134e85b7e454ca472d2790ff3e4929bff09",
"body": "`vbrain update` on a Homebrew-managed binary was downloading the rolling latest\nstraight into the Cellar, desyncing the keg from what brew recorded. Now Run()\ndetects a Cellar path (brewManaged) and delegates to `brew upgrade vbrain`;\notherwise it downloads and swaps in place as before. Result gains\n[…]\nanaged recognizes Homebrew/Linuxbrew Cellars (and not the bin\nsymlink); run() routes a Cellar path to brewUpgrade with no network.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(update): delegate to brew upgrade on a Homebrew install",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T12:46:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3dd21fe8998e51c6caca080f824eec98a83ce55d",
"body": null,
"is_bot": true,
"headline": "chore(homebrew): vbrain 0.1.11 [skip ci]",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-01T12:42:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1213590e0c185f415597074539f74731417f4b0f",
"body": "…h/system git\n\nRe-running `vbrain install` over an already-initialized base now detects it\n(git.RepoInitialized) and switches to update mode: refresh binary + skills +\nassets and push to the existing remote, skipping the GitHub onboarding prompts.\n\nStop demanding a PAT when the system can do without\n[…]\nvailable.\n\nTests: gh-preferred repo creation needs no token; re-install pushes to an\nexisting remote offline without GITHUB_TOKEN.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(install): update existing base instead of re-onboarding; prefer g…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T12:41:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "356a08ff0c55b56a20ae72ebb1a9c5bf8ce03bed",
"body": null,
"is_bot": true,
"headline": "chore(homebrew): vbrain 0.1.10 [skip ci]",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-06-01T12:20:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a80588baa80857304cabd9583a83ee2576c507d",
"body": "…r-names\n\nInstaladores com nomes claros + tap Homebrew (Gatekeeper)",
"is_bot": false,
"headline": "Merge pull request #2 from virtual360-io/feat/homebrew-clear-installe…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T12:19:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "773fcd039dc238ff9c26d59b80ff9e9861c142ae",
"body": "Rename release binaries to human-friendly names (darwin→macos, amd64→intel,\narm64→apple-silicon on macOS) in build.yml and keep selfupdate.AssetName in\nsync; add a table test pinning the mapping (the contract with the build).\n\nSolve the macOS Gatekeeper prompt via an in-repo Homebrew tap: the build\n\n[…]\nll sections, Homebrew as the recommended macOS path, and a\nnote explaining the quarantine flag is set by browsers (not curl/brew).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(install): clear installer names + Homebrew tap",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-06-01T12:13:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "217e4e80d2fda20a164519e21dc7e8fa8f77c4bf",
"body": "Adds a self-contained static landing page (docs/index.html, inline CSS, no\nexternal deps) and a pages workflow that enables Pages via the API\n(configure-pages enablement:true) and deploys docs/ on every push to main.\n\nThe page covers the premise (markdown is truth, SQLite is disposable, code is\ndeterministic, the model only judges), the soul layer and its invariants, the\ningest flow, the skills, and install/update.\n\nhttps://claude.ai/code/session_01TqEQy2coKLSCRzz68DuNTv",
"is_bot": false,
"headline": "feat(pages): GitHub Pages landing page",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-01T11:14:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b9bc220999401b54f3a61a2e68830963dc1f7557",
"body": "Adds a second wiki layer, wiki/_soul/ (kind=soul), separate from knowledge:\nit records who the user is (values, decision patterns, core memories), not\njust what they know. Reading a book is not adopting its belief, and beliefs\nchange over time — so the soul is kept apart, lean, and contradiction-fre\n[…]\nigration, _soul reindexing, the default boost and\nauthoritative ordering, soul-write create/update/delete, and the seeded\nroutine's invariants.\n\nhttps://claude.ai/code/session_01TqEQy2coKLSCRzz68DuNTv",
"is_bot": false,
"headline": "feat(soul): identity layer — how and why the user acts",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-06-01T01:56:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "71e78827dfde13db60a0418fc7c7200fbab4e7b3",
"body": "Correction: the commit + push must still happen (so the dream routine sees the\nquery_log and the base stays synced) — only the narration is forbidden. Adds a\nsilent 'vbrain commit' step at the end; the answer still mentions none of the\nmechanics.",
"is_bot": false,
"headline": "skill(query): persist the query_log commit/push, just silently",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T23:27:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d0010926b21488df68c8f022783375edfac4dbbc",
"body": "Reinforces that answering a question never commits/pushes and never narrates\nmechanics — no query_log, db/vbrain.sqlite3, the dream routine, branches, or\ncommit/push. The query_log write is an incidental silent side effect; a read\ndoes not commit. Just answer.",
"is_bot": false,
"headline": "skill(query): read-only, no git/plumbing narration in answers",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T23:23:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9457e6685c2d6dd01e5cf061789ba3d1f8415cc8",
"body": "vbrain-query-knowledge now replies in natural language grounded in the notes,\ninferring conclusions when not stated verbatim (as long as every supporting\nfact comes from the retrieved content). The search/file reads stay internal;\nthe answer no longer shows paths, filenames, kind/tags/labels, or a sources\nlist — unless the user explicitly asks where something came from. Honest when\nthe notes don't cover it, without describing internal structure.",
"is_bot": false,
"headline": "skill(query): answer synthesized, without exposing vbrain internals",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T23:12:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "057b5ebdec73725747a327a2cc0c44b285f319c3",
"body": "--generate-notes only lists merged PRs; this repo lands changes as direct\ncommits to main, so the notes were empty. Build the release body from\n'git log <prev v0.1.* tag>..HEAD' instead — a real commit changelog.",
"is_bot": false,
"headline": "ci: commit-based changelog anchored to the previous versioned tag",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T19:33:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1883e82ac9f597badf3278d7ca25c8736149cb8f",
"body": "build.yml now publishes a versioned tag (v0.1.<run_number>) and a GitHub\nrelease with notes from 'gh release create --generate-notes' (changelog from\ncommits/PRs since the previous tag), alongside the cross-platform binaries +\nSHA256SUMS. Keeps updating the rolling 'latest' tag for back-compat with\n\n[…]\n use the /releases/latest/download/ alias (GitHub's\nnewest non-prerelease release), so 'vbrain update' tracks the versioned\nreleases. fetch-depth: 0 so the changelog can diff against the previous tag.",
"is_bot": false,
"headline": "ci: tag + release with auto-generated changelog per main commit",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T19:31:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e12aa96acbf35681056f6e80b9008a2a0cc09349",
"body": "Translates the t.Error/Fatalf failure messages and the comments across all\ninternal/*_test.go to English. Test fixture DATA (page bodies, wikilink\nexamples, PT query strings that exercise Portuguese stopword/keyword handling)\nis intentionally kept as-is — it's self-consistent test input, not docs.\ngo test/vet green.",
"is_bot": false,
"headline": "docs(en): translate test messages and comments to English",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T18:00:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "95174218b40ebc1e40870e84aa02c8d8efeb5cff",
"body": "…prompts\n\nAlso aligns the tweet chunker's references to the now-English rendered tweet\nheadings (## Tweet text, ## Embedded article).",
"is_bot": false,
"headline": "docs(en): translate vbrain-add-knowledge skill + chunker/wiki-writer …",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T17:55:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d386392933f97c06266e2e5dadf7ff39d078574",
"body": "…owledge skills",
"is_bot": false,
"headline": "docs(en): translate vbrain-query-knowledge and vbrain-add-realtime-kn…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T17:52:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0d6e64738df28a6901d6fe0726f15f15a9eec275",
"body": null,
"is_bot": false,
"headline": "docs(en): translate vbrain-add-routine and vbrain-routine skills",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T17:51:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4ae3ff10eab9e8dbada5deb60861ea24df32903",
"body": "Translates package docs, godoc comments, flag help, error/output strings,\nand the rendered tweet markdown labels (Tweet by/Author/Date/.../Embedded\narticle) to English across cmd/vbrain and every internal/ package. The\nrealtime phantom-page prose is English now too.\n\nKept as-is (functional matching \n[…]\nrealtime KEYWORDS lists — they exist precisely to match Portuguese\nqueries; translating them would break PT search. Twitter test assertions\nupdated for the English rendered strings. go test/vet green.",
"is_bot": false,
"headline": "docs(en): translate all internal/ + cmd Go comments and strings",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T17:48:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "43df488f5c18f3aa2ce3bf6efbab6e265b2bec45",
"body": null,
"is_bot": false,
"headline": "docs(en): translate cmd/vbrain comments, flag help, errors, output",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T17:34:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "15cb15eec02008f70b9d88e8c8faf6cd68364d0c",
"body": null,
"is_bot": false,
"headline": "test(en): align scaffold test assertions with English CLAUDE.md",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T17:31:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "14d48eaddb26b41527a0d9025de05f5e6ac51aec",
"body": "Translates user-facing docs and emitted text to English: README.md,\nCLAUDE.md (governance), scaffold.ClaudeMD (written into the base; also fixes\nthe stale install.sh reference → vbrain install), the embedded dream routine\nprompt, and the dream routine description. Code unchanged (comments/strings\nonly).",
"is_bot": false,
"headline": "docs(en): translate README, CLAUDE.md, generated CLAUDE.md, dream prompt",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T17:30:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "875484b47c612f2fd62d5ecc81abaf299fddf398",
"body": "Reescreve o vbrain de Ruby para Go (binário único, zero runtime)",
"is_bot": false,
"headline": "Merge pull request #1 from virtual360-io/claude/aurora-age-2lx12",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-31T16:27:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "84fd3bac5a667eb53942687a6b2383cfa5ee47bd",
"body": "A pessoa baixa o binário da release e roda 'vbrain install' — sem install.sh,\nsem clonar o repo:\n- embed.go (raiz): //go:embed all:.claude/skills embute as skills no binário\n- vbrain install: copia-se pro PATH (~/.local/bin), instala skills globais\n (embutidas) em ~/.claude/skills, bootstrapa a bas\n[…]\nrever a real\n\nSmoke e2e: install num HOME limpo → 5 skills globais + base + dream + pipeline\nquery funcionando. go test/vet verdes. README atualizado (baixar binário +\nvbrain install + vbrain update).",
"is_bot": false,
"headline": "feat(go): vbrain install/update + skills embutidas; remove install.sh",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T16:04:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e17f0eb50e4f774080a89434c33d45370cd53b28",
"body": "Workflow build.yml: roda go test ./... e, se verde, cross-compila o vbrain\npara linux/darwin (amd64+arm64) e windows/amd64 num runner só\n(CGO_ENABLED=0, possível porque tudo é puro-Go: modernc.org/sqlite, go-git,\nchromedp). Publica os binários + SHA256SUMS numa release rolling 'latest'\n(habilita o install.sh a baixar prebuilt no futuro, sem exigir Go).\n\nValidados os 5 alvos cross-compilando localmente (~15-16 MB cada).",
"is_bot": false,
"headline": "ci: rebuilda o binário vbrain a cada push na main",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:57:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7656c80210efb0b933257814c7bb4d99a74ea1b",
"body": "…tema)\n\nÚltima peça pendente da migração. FetchArticleViaBrowser usa chromedp (CDP\npuro-Go) pra dirigir o Chrome JÁ instalado no sistema — fiel ao Ruby, que\nusava channel:\"chrome\" — sem baixar driver/browser (descartado playwright-go\npor isso). Stealth init script + UA realista replicados.\n\nBest-eff\n[…]\nler cai pro preview_text — comportamento idêntico ao Ruby sem Playwright.\nTeste white-box cobre a degradação. go test/vet/build verdes.\n\nMigração Ruby→Go agora 100% completa (zero recursos pendentes).",
"is_bot": false,
"headline": "feat(go): porta o grab de artigo via browser (chromedp, Chrome do sis…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:50:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7fa8b86f1bf4b07ddeb13ab4f079691242aa480a",
"body": "Substitui a nota de migração por um doc nativo de Go: cada 'No vbrain:'\nagora cita os pacotes/subcomandos reais (internal/db, sources.Twitter,\ngo test ./..., vbrain write-pages/reindex/commit/stats, t.Setenv+t.TempDir)\nem vez dos arquivos Ruby. Convenções da Regra 11 atualizadas (JSON no stdout\ndos subcomandos, wiki escrita só por vbrain write-pages).",
"is_bot": false,
"headline": "docs: reescreve CLAUDE.md para Go (exemplos nativos por regra)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:46:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ef552c033fadd8368a58ed475124e70b8e58592",
"body": "Passo final da migração. Remove lib/, scripts/, test/ (minitest), Gemfile,\nGemfile.lock, .ruby-version, Rakefile e config/routines/dream.prompt.md\n(superseded pelo prompt embutido em internal/routines/).\n\n- skills: prosa atualizada (script Ruby → binário vbrain, rake test → go test)\n- fixture do twe\n[…]\nADME reescrito pra arquitetura Go; CLAUDE.md ganha nota de migração\n apontando os equivalentes Go das refs Ruby nas regras\n\ngo test verde em todos os pacotes; go vet limpo. Nenhum arquivo Ruby resta.",
"is_bot": false,
"headline": "cutover: remove o Ruby — vbrain agora é só Go",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:39:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "babbfb27d953cb5655af67b86346fe31f745d9cc",
"body": "- internal/scaffold: WriteClaudeMD (Go-orientado, sem Ruby) + InstallSkills.\n No mundo Go a base NÃO copia código — só CLAUDE.md + skills; o binário fica\n no PATH.\n- vbrain setup: bootstrapa a base (dirs, CLAUDE.md, skills, git init, seed\n das rotinas) e cria/conecta o repo no GitHub via PAT (API\n[…]\n: builda o binário → ~/.local/bin, instala skills globais, coleta\n identidade git + PAT e cria o repo (onboarding do GitHub conforme pedido)\n\ngo test verde (incl. scaffold). Falta só: remover o Ruby.",
"is_bot": false,
"headline": "feat(go): scaffold + vbrain setup + install.sh (distribuição)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:35:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "089f629350ba45b90d1e0b87ce0c34836766bcc0",
"body": "Rewire das 5 skills: 'bundle exec ruby scripts/X.rb' → 'vbrain <subcmd>'\n(query, tags, ingest, write-pages, reindex, commit, resolve-links, linkify,\nquery-log, routines, routine-add/list, realtime <source>, setup, stats).\nFlags do realtime --channels/labels/calendars-json → --json. Sem mais\ndependência de path absoluto/Gemfile — o binário está no PATH.",
"is_bot": false,
"headline": "refactor(skills): chamam o binário vbrain em vez de scripts Ruby",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:32:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c2713a9315439e7d9cc7161511df3540f2077ad",
"body": "- routines.SeedDefaults com prompt do dream embutido (go:embed), reescrito\n pra chamar 'vbrain <cmd>' em vez de scripts Ruby/bundle\n- subcomandos: tags, stats, query-log (--dump/--prune), linkify,\n routine-add, routine-list, seed-routines\n\nAgora o binário cobre TODOS os 16 scripts Ruby. go test verde.\nFalta: scaffold + setup/install + skills rewire + remover Ruby.",
"is_bot": false,
"headline": "feat(go): seed_defaults (dream Go-adaptado) + subcomandos faltantes",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:30:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3c8fa1860c22320f4f2f80b22ec29d42e9df9017",
"body": "Merge de origin/main (paths.rb resolve base local antes de ~/vbrain, força\nUTF-8, remove wiki/index.md, limpa paths de máquina dos SKILL.md).\n\nAdapta internal/paths.DataHome ao novo comportamento: sem VBRAIN_HOME, se o\ncwd é uma base (tem wiki/), usa-o — análogo Go do PROJECT_ROOT do Ruby, que\nconserta o cloud onde o checkout é a própria base. IsBase exportado. Testes\natualizados (dentro/fora de base).",
"is_bot": false,
"headline": "merge: sincroniza com main + adapta DataHome (detecção de base local)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:28:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "656fd7b7ec43a7360c1738db3796b4f1ac04b6f8",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main' into claude/aurora-age-2lx12",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:27:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6c73aa30d4ca8f048f01cdb65855175c8bc8eef",
"body": "Correção: 7 scripts não tinham sido vistos na listagem inicial. Este slice\nporta a lógica determinística deles:\n- internal/maint: Tags (vocabulário CSV ranqueado), Stats (contagens),\n QueryLogDump/Prune (fila do dream), Linkify (wikilinks resolvíveis)\n\ngo test 1:1. add_routine/list_routines/seed_routines (wrappers de routines)\n+ subcomandos vêm a seguir.",
"is_bot": false,
"headline": "feat(go): porta tags, stats, query_log, linkify (scripts faltantes)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:27:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5a0cdd9d762a0102852cd09cfaa642002ed8b30",
"body": "…time\n\nSlice 8 — fontes realtime (páginas fantasma kind=realtime):\n- internal/realtime: SaveConfig/LoadConfig/WriteWikiPage/Frontmatter/Body\n para gcalendar/gmail/slack (porta de lib/vbrain/realtime/*.rb)\n - gmail.LabelFilterClause: (label:a OR label:b)\n - slack.Global + ChannelFilter (in:<#ID>);\n[…]\nsource> --json/--file\n\nO dispatch MCP em si segue na skill (lê o frontmatter, chama o tool). go\ntest verde em 14 pacotes. Falta: scaffold/install/init_repo (distribuição),\nskills rewire, remover Ruby.",
"is_bot": false,
"headline": "feat(go): realtime handlers (gcalendar/gmail/slack) + subcomando real…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:22:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7c97ce895728958635520eb0c5f2c08b61a748a7",
"body": "Regressão: 4 SKILL.md versionados carregavam paths absolutos de outra máquina\n(/Users/.../Workspace/vbrain/...), saída renderizada de um install antigo\ncommitada por cima dos templates. install.rb só reescreve a forma relativa\n(bundle exec ruby scripts/X), então os paths de Mac vazavam — quebrava o \n[…]\neto; sem LANG (cloud) o Ruby assumia US-ASCII e o regex quebrava.\n\nRestam só falhas ambientais de assinatura de commit do sandbox (git/commit/\ninit_repo) — passam em máquina normal; não são regressão.",
"is_bot": false,
"headline": "fix(skills): remove paths de máquina dos SKILL.md + UTF-8 no harness",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:22:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "44b81d76a50c9ecc90110a170649694f114adb22",
"body": "Slice 7 — agendamento determinístico:\n- internal/routines: load/add/remove/enabled/find, claim_due (at-most-once,\n avança next_run antes de executar), compute_next_run via robfig/cron/v3\n (mesma semântica do fugit p/ crons padrão de 5 campos), dry-run\n- enabled ausente vira true; campos nuláveis v\n[…]\ns/PROJECT_ROOT) fica pro slice de\ninstall. go test 1:1 com routines_test.rb (20 testes, incl. semântica de\ncron horária/semanal e claim idempotente). Falta: realtime, scaffold/\ninstall, skills rewire.",
"is_bot": false,
"headline": "feat(go): routines (cron) + subcomando routines",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:18:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e92df434580a08737de5c5a18d33a3df6fad779b",
"body": "Slice 6 — porta de entrada do ingest:\n- sources: interface Ingestable (CopyToRaw+Extract) unificando text/url/tweet\n - Text.CopyToRaw (default de arquivo) + Extract 3-arg\n - Twitter.FetchSyndication (HTTP, injetável) + CopyToRaw + Extract\n - FetchArticleViaPlaywright stub → '' (degrada p/ preview\n[…]\ncripts/ingest_raw.rb)\n- cmd/vbrain: subcomando ingest\n\ngo test verde em 13 pacotes (incl. tweet via fixture, dedup, unknown).\nFalta: routines, realtime, scaffold/install (redesign p/ binário), skills.",
"is_bot": false,
"headline": "feat(go): completa sources (syndication HTTP) + ingest_raw",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:14:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3fd34dab4b39b9049f705859f4446afc26a091df",
"body": "Slice 5 (peças design-stable, sem HTTP):\n- internal/writepages: staging em temp + commit atômico + merge de\n frontmatter no update + fallback update→create + guardrail de raws órfãos\n (porta de scripts/write_pages.rb)\n- internal/resolvelinks: aplica mapa {título=>slug} da LLM, descarta slugs\n ine\n[…]\nages publica 2 páginas → reindex monta grafo → query\nacha página + relacionada. go test verde em 12 pacotes. Falta: ingest_raw\n(sources HTTP/syndication), routines, realtime, scaffold/install, skills.",
"is_bot": false,
"headline": "feat(go): pipeline de ingest — write-pages, resolve-links, commit",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:11:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "aff70fa6c59991ece056a29b0da5a0b3f2dced7c",
"body": "Regra 11 do CLAUDE.md: o índice SQLite é versionado — remove /db/*.sqlite3\ndo .gitignore (tinha voltado por engano). E não existe wiki/index.md: remove\no stub. Mantém wiki/ rastreado via .gitkeep pra base?() continuar detectando\no checkout como base em clones frescos (cloud). .gitkeep não é indexado —\nreindex.rb só varre **/*.md.",
"is_bot": false,
"headline": "chore: alinha repo às convenções (db versionado, sem wiki/index.md)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:07:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8a4daa18ccd545c8f42d760feb2338aa48d6e0a",
"body": "Conforme decisão do usuário: detecta git no PATH em runtime.\n- system-git presente → shell-out (push usa credenciais já configuradas)\n- ausente → go-git embutido (push com PAT coletado no install)\n- leitura (branch/remote/changes) num caminho único via go-git\n- vbrain não impõe assinatura nos própri\n[…]\n+ seletor (systemBackend/gogitBackend). Teste white-box\nforça go-git pra cobrir os dois caminhos. Corrige bug de ordem de avaliação\nem sysStatus (lia o buffer antes de rodar o comando). go test verde.",
"is_bot": false,
"headline": "feat(go): git híbrido — system-git quando presente, senão go-git",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:07:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1addeafc082b8c061d17405f446528dcde541f0f",
"body": "Sub-agentes que rodam as skills não herdam o VBRAIN_HOME do shell, então no\ncloud (HOME=/root) o índice caía no ~/vbrain vazio. Agora data_home, sem\nVBRAIN_HOME explícito, usa o próprio checkout quando ele já é uma base (tem\nwiki/) — cobre o cloud onde repo == base. VBRAIN_HOME segue sobrescrevendo\n\n[…]\ndo\ndentro das skills/rotinas. Determinístico, sem depender do locale do ambiente.\n\nPortável: nada de path absoluto versionado; no-op na máquina onde ~/vbrain já\nexiste ou onde VBRAIN_HOME é exportado.",
"is_bot": false,
"headline": "fix(paths): resolve base local antes de cair no ~/vbrain + força UTF-8",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T14:03:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "81c21fc5e2ddcaaab331b3a3af903577935b53a6",
"body": "…stema)\n\nSlice 4a — internal/git via github.com/go-git/go-git/v5:\n- init (branch main), commit (add -A + no-op se limpo), push, remotes\n- binário não depende mais do git CLI; elimina também o problema de\n servidor de assinatura (go-git não invoca signing do sistema)\n- author lido da identidade git \n[…]\nlback vbrain\n- índice SQLite versionado (/db/ fora do .gitignore), idempotência mantida\n\nDecisão do usuário: go-git embutido em vez de shell-out. go test 1:1 com\ngit_test.rb (10 testes). Ruby intacto.",
"is_bot": false,
"headline": "feat(go): porta git para go-git puro-Go (sem dependência do git do si…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T13:55:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cd51be28f377e35f68073924e917f41e28a7d32c",
"body": "Slice 3 — bate o critério de sucesso da Regra 4 (query devolve páginas):\n- internal/index: Reindex (sync insert/update-por-sha/delete + rebuild do\n grafo de links), porta de scripts/reindex.rb\n- internal/search: Query (FTS5 com snippet+rank, vizinhos 1-hop, query_log),\n porta de scripts/query.rb\n-\n[…]\n Go não permuta e a skill passa flags após a query.\n\nSmoke test e2e: reindex 2 páginas + 1 link, query 'Aurora' acha a página\ncom snippet destacado e relacionada via grafo. go test verde em 9 pacotes.",
"is_bot": false,
"headline": "feat(go): binário vbrain runnable com reindex + query (FTS5 + grafo)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T13:43:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c7a35f3386e5b726def0f80c66cc555157ee2e74",
"body": "Slice 2 da migração — lógica pura + I/O determinístico:\n- internal/page: frontmatter YAML (parse/render/rewrite verbatim), write atômico\n- internal/links: extração de wikilinks/mdlinks, linkify, apply_resolution\n- internal/sources: dispatcher + detecção (text/url/twitter) e conversão:\n - text: dete\n[…]\nonal do corpo de artigo (já\ndegrada p/ preview_text). fetch_syndication + grab via browser ficam pro\nslice de sources pesadas.\n\ngo test 1:1 com os minitest (incl. fixture real do tweet). Ruby intacto.",
"is_bot": false,
"headline": "feat(go): porta page, links e sources (text/url/twitter) para Go",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T13:39:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "06a3effa28c7debedd0df0f7ce54cb093e95397b",
"body": "… puro-Go\n\nInício da reescrita do core determinístico de Ruby para Go, validando o\nrisco arquitetural nº1: SQLite + FTS5 via modernc.org/sqlite (puro-Go, sem\ncgo, cross-compile trivial). O tokenizer unicode61, triggers de sync e\nforeign keys (CASCADE/SET NULL) funcionam.\n\n- internal/paths: VBRAIN_HO\n[…]\ninternal/db: schema, migração idempotente, rebuild de CHECK legado\n\nTestes go test 1:1 com os minitest correspondentes (Regra 9), incl.\nintegração FTS5 real. Ruby permanece intacto durante a migração.",
"is_bot": false,
"headline": "feat(go): porta fundação (paths, slug, ftsquery, db) para Go com FTS5…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-31T13:30:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6a5d34d41c77615fe19ed55ff0fb66f7e86f8e77",
"body": "…a autossuficiente\n\nA base versionada passa a conter o código que as skills invocam, além do\nCLAUDE.md e das skills cruas — roda em qualquer ambiente que a clone só com\nRuby 3.3.6 + bundle install, sem o repo de projeto. Cópia sincronizada pelo\ninstall.rb; canônico continua aqui. Guard anti self-copy + testes.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(install): copia código (scripts/lib/Gemfile) pra base, tornando-…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-30T11:56:13Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a396553b489f0ae259c1f813842157e68d664678",
"body": "install.rb e init_repo.rb agora escrevem um CLAUDE.md (instrui o agente a\nsempre usar as skills) e copiam as skills cruas pra .claude/skills/ da base\n(~/vbrain), versionadas — pra base funcionar em qualquer ambiente que a\nclone, não só onde o ~/.claude global tem as skills. Novo módulo\nVBrain::Scaffold com testes.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(install): instala CLAUDE.md + skills versionadas na base",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-30T11:43:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "510900919b717846be5cd8a789edfa559ccde75a",
"body": "O SQLite vira índice derivado versionado — descartável (apagar + reindex\nreconstrói) mas commitado por conveniência, pra clone/pull trazerem o\níndice pronto. Atualiza README e CLAUDE.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: versiona índice SQLite (remove /db/ do gitignore)",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-30T11:43:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "8e6da7b518cd54ac13cb5cadc4f7746669741cb8",
"body": "Ambiente da Anthropic não roda Ruby 4. .ruby-version → 3.3.6,\nGemfile ruby \"~> 3.3\", lock regenerado. rake test verde no 3.3.6.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "build(ruby): migra projeto de 4.0.3 para 3.3.6",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-30T11:43:28Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "afe7d261c87a3d4d1090f4bd7e844186b70e159c",
"body": "…knowledge\n\nFonte das skills (.claude/skills no repo, instalada via scripts/install.rb):\n- add-realtime: slack marcado suportado + fluxo 2ter (auth, perguntar canais\n ou todos, resolver IDs via slack_search_channels, rodar script).\n- query-knowledge: handler 3c (slack_search_public_and_private, 1 b\n[…]\nl por falta de OR; vazio = busca global) + allowed-tools.\n\nComplementa d63d933 (código da fonte). Reinstalado em ~/.claude/skills.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(skills): documenta fonte realtime slack em add-realtime e query-…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T18:53:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d63d933a89e9e4a5d11db3e4425246463faf9351",
"body": "…rce)\n\nTerceira fonte realtime, espelhando gmail/gcalendar: módulo Ruby + script\nCLID + testes 1:1. Diferenças do Slack que ditam o modelo:\n\n- canais não são enumeráveis (search_channels exige termo), então a config\n aceita lista vazia = busca global no workspace inteiro;\n- Slack search não tem OR \n[…]\nmail.\n\nSkills (fora do repo, em ~/.claude/skills) atualizadas à parte: fluxo 2ter\nem add-realtime e handler 3c em query-knowledge.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(realtime): adiciona slack como fonte realtime (deterministic sou…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T18:46:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "12a4ea71c91eaad3b799806d464719beee0cc524",
"body": "Gemfile passa de ~> 3.3 para ~> 4.0, adiciona .ruby-version (4.0.3) e\nregenera o lock (RUBY VERSION 4.0.3p0). rake test verde (187 runs, 0 falhas).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "build(ruby): migra projeto para Ruby 4.0.3",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T18:17:02Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c59efe3f652920bc810d0467a19d136f50d10112",
"body": "A skill instruía `tags.rb --limit 60 --format json`, mas o script só tem\n--limit e abortava com InvalidOption no passo de expansão.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(query-knowledge): tags.rb não aceita --format (já emite JSON)",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T16:59:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6e515adca7f898e7a74ba97955c4141b9a76291a",
"body": "…oria\n\nResolve o caso \"busca não acha empregos\": query lexical não casava a\npergunta NL com o vocabulário indexado.\n\n#1 fts_query: filtra stopwords PT/EN antes do FTS, com fallback.\n#2 skill query-knowledge: passo de expansão NL→termos enviesado pelo\n vocabulário (scripts/tags.rb), logando a pergu\n[…]\nrite_pages aborta o commit (needs_review/orphaned_raws)\n se algum raw perderia todas as citações.\n\nTestes: +18 (187 runs verdes).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(query+dream): expansão de busca, stopwords e rotina de auto-melh…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T16:58:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e9728c79603eee617e4908f33634606c37dc54f6",
"body": "…tômica\n\nO wiki-writer agora navega o índice (query.rb) e decide, por chunk, se cria\npágina nova ou atualiza uma existente — conectando ao grafo e mesclando em vez\nde duplicar (corrige currículo gerando páginas órfãs + duplicata de formação).\n\n- write_pages.rb: staging em raw/.tmp/wiki-stage-<N>/ + \n[…]\nnca paralelo\n- test/scripts/write_pages_test.rb: casos de update + fallback anti-alucinação\n\nrake test verde (169 runs, 0 falhas).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(add-knowledge): writer graph-aware com create/update e escrita a…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T14:32:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3ce0cb3fa464757279406b9e007b98f29d611f52",
"body": "…onfig/realtime)\n\nCaminho único em Routines.config_path: ~/vbrain/routines/routines.yml →\n~/vbrain/config/routines/routines.yml. Atualiza README e as skills\nvbrain-routine/vbrain-add-routine. save! cria o dir on-demand (mkdir_p), igual\nao realtime. Testes usam config_path (sem hardcode) → seguem a mudança.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(rotinas): move routines.yml para config/routines/ (espelha c…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T10:10:34Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "93ed910e49ae2495c5e1c0560b9ad67b5a9fb4fd",
"body": "…esolvidos\n\nGitHub não renderiza [[ ]] em arquivos de repo. Agora o pipeline converte os\nwikilinks resolvíveis em links markdown clicáveis e usa julgamento (LLM) pra\nresolver os que não batem por slug exato — fortalecendo o grafo.\n\n- links.rb: extract entende [[Título]] E [texto](slug.md); novo link\n[…]\nnação).\n- reindex.rb: usa o novo extract (Struct slug/title).\n- SKILL.md: documenta o passo 4b (linkify + resolver via subagente).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(wiki): links navegáveis (linkify) + camada LLM p/ resolver não-r…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T09:02:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8aa4ec56406ae9ee40815ef43443f6a1c112a9d7",
"body": "Mudanças pré-existentes no working tree (não relacionadas ao grafo da wiki),\ncommitadas a pedido.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(rotinas): expõe last_run no output de run_due_routines + teste",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T08:46:04Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c1322efcce7e6b29284410bee1dc915dd4e65d52",
"body": "…o ai-memory)\n\nA wiki deixa de ser pastas planas por tipo e vira um grafo navegável: a LLM\norganiza as páginas livremente e escreve [[wikilinks]] no corpo; o reindex\nparseia os links e reconstrói a tabela de arestas. Busca expande por vizinhos.\n\n- lib/vbrain/links.rb: parser determinístico de [[wiki\n[…]\nlinks]]; faithfulness só pro\n conteúdo; omitir slug_hint p/ links resolverem. chunker: category→kind.\n- README/SKILL atualizados.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(wiki): wiki como grafo — wikilinks + parse determinístico (model…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-29T08:43:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "897dbc4f0948cfce8b18b8b4366fb470306ab3d4",
"body": "…ricos\n\n3 fixes na infra de rotinas:\n\n1. /vbrain-add-routine NUNCA bootstrappa o watch. A skill agora só\n altera ~/vbrain/routines/routines.yml e opcionalmente pergunta se\n o usuário quer testar a rotina agora via sub-agente (manual trigger\n via slug). Bootstrap do /loop é responsabilidade EXC\n[…]\n\nAuto-memory project_routines_watch_loop atualizada com o incidente\n2026-05-28 (cron */1 cacheado) como contexto pra não regredir.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(rotinas): watch só pelo /vbrain-routine + 15m default + MCPs gené…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T17:08:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "26a8984a5bd673daf677ecf31cfcda640efea58f",
"body": "Adiciona as duas skills /vbrain-add-routine e /vbrain-routine. Modelo:\ncada rotina em ~/vbrain/routines/routines.yml tem slug, description,\nschedule (cron 5-field), next_run (ISO8601 UTC), last_run, prompt,\nenabled. /vbrain-routine sem args é watch (default): claim atômico\n+ sub-agente paralelo + re\n[…]\nilidade.\n\nREADME atualizado com seção \"Rotinas\" + tabela das 5 skills.\nAuto-memory project_routines_watch_loop documenta o padrão.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: rotinas com cron + next_run determinístico + watch loop",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T16:53:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4c3f6606656bd2086d5cc8909585f428b4cb9901",
"body": "Valida o padrão de página fantasma + handler MCP introduzido no commit\naf53158 (gcalendar). Gmail entra como label-scoped search:\n\n- lib/vbrain/realtime/gmail.rb: helper com save_config!, write_wiki_page!,\n label_filter_clause que monta \"(label:X OR label:Y)\" em Gmail search syntax.\n Normaliza tan\n[…]\n via /mcp (não via tool),\n threads como unidade de busca, label_filter_clause helper.\n\n113 testes verde (era 101 antes do gmail).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: gmail como segunda fonte realtime — padrão generaliza",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T15:25:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "af53158c5b89144e0adab582eede6a54c1a6f6cd",
"body": "…fixadas\n\nIntroduz o conceito de \"conhecimento realtime\": fontes externas (hoje\nGoogle Calendar, futuramente Slack/etc) entram no índice FTS5 como páginas\nfantasma em wiki/_realtime/<source>.md (kind: realtime). O body só tem\nkeywords pra casar no FTS5; quando query-knowledge encontra uma dessas, el\n[…]\ni_page,\n format_calendar (colapsa quando summary == id).\n- Testes minitest novos (helper, CLI end-to-end ingest→query, migração).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: realtime knowledge — gcalendar como primeira fonte + skills pre…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T15:11:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "96ebe8b05829ba5d9efbc1d8e30d21be8130e34e",
"body": "- README ganha seção Arquitetura explícita: separação código vs dados,\n layout da base, tabela de skills, diagrama do pipeline de ingest,\n fontes e schema do índice.\n- CLAUDE.md novo, 12 regras adaptadas ao vbrain (determinístico Ruby\n com teste 1:1, LLM só pra julgamento, raw imutável, wiki escrita só\n via write_pages.rb).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: README com arquitetura + CLAUDE.md com as 12 regras",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T15:07:34Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6754f9a7ade9f6c3377d7a868df6678fd5027c11",
"body": "Removidos:\n- gem epub-parser (nunca virou Sources::EPUB)\n- gem roo (nunca virou Sources::Spreadsheet)\n- nokogiri transitivo (Sources::Url passou a usar Jina, não precisa parser)\n- Obscura binary 130MB em ~/.local/bin/ (V8 incompleto, falha no JS do X)\n- Source_type CHECK aceita só ('text','url','twe\n[…]\nst, rake\n\nResultado:\n- Gemfile: 4 deps diretas (era 7); 10 gems no Gemfile.lock (era 16)\n- 87 testes verdes\n- Bundle install limpo\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: cleanup — remover deps e fontes que não funcionaram",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T14:41:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a69ab80a0a07f35dae90c91ae1b4d1ea02d3a686",
"body": "Quando o JSON do syndication tem campo `article`, Sources::Twitter agora\ndispara playwright-ruby-client + Chrome do sistema (channel: \"chrome\") +\nstealth scripts pra puxar o body completo do article em vez de cair só no\npreview_text de ~200 chars.\n\nAchados:\n- URL /article/<id> cai em login wall mesm\n[…]\n> URL continua em login wall (não cobrimos).\n- Requer Chrome instalado (caminho macOS hardcoded em Playwright \"chrome\"\n channel).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Sources::Twitter fetcha body completo do X Article via Playwright",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T14:37:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7ac8bd99486e44d555d147f90c494abc23ab5254",
"body": "…dles it\n\nAntes o extractor de tweet descartava o campo `article` do JSON do syndication\nendpoint (cdn.syndication.twimg.com). Esse campo tem `title` e `preview_text`\n(~200 chars) — conteúdo público, faithful, do X Article linkado. Tweets que\nsão \"só link de article\" agora geram 1 página wiki a part\n[…]\nagora tem chain explícita de fallback\n(WebFetch → Wayback → ask user paste) para casos onde nem o preview do\nsyndication resolver.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Sources::Twitter expõe article.preview_text + chunker tweet han…",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T14:01:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3429f6c0519aca56709fb365397cb4ba6ce75012",
"body": "- lib/vbrain/git.rb: helpers init!, commit!, push!, has_remote?, current_branch,\n changes? — usa Open3 com chdir, captura stderr. gitignore default exclui\n /db/ (derivado) e /raw/.tmp/ (scratch).\n\n- scripts/init_repo.rb: idempotente. --github private|public|none.\n Detecta se gh está instalado e a\n[…]\n). Passo 6 commit+push.\n Passo 7 vira o reportar (antes 6).\n\n- 13 testes novos (git + commit + init_repo CLIs) — 83 verdes total.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: auto-commit/push do ~/vbrain + init repo opcional via gh",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T13:40:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4975332014cc4a77da036bed913e1c97032c98d1",
"body": "ai-memory não tem index.md gerado; o \"índice\" é o SQLite derivado (pages +\nvirtual pages_fts via FTS5 com triggers AI/AD/AU). vbrain estava gerando um\nwiki/index.md auxiliar humano-legível que duplicava trabalho e divergia do\nprojeto referência.\n\nRemove:\n- scripts/build_index_md.rb\n- chamada build_i\n[…]\nliza:\n- SKILL.md add-knowledge: passo 5 reflete que índice é só SQLite\n- README.md: explica que não há index.md\n\n70 testes verdes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: remover wiki/index.md — índice é só o SQLite, igual ai-memory",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T13:31:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f9bd7e2c5782fc481a29b8ed448eff32b5c18811",
"body": "- Sources::Url: trocado scrape Nokogiri por Jina Reader (r.jina.ai). Saída\n do Jina já é markdown limpo, então raw/ guarda markdown direto (sem HTML\n intermediário) e extract é passthrough.\n\n- SKILL.md add-knowledge: tipos desconhecidos OU extração trivial (login wall,\n < 100 palavras úteis) agor\n[…]\n 8 páginas\n gravadas em ~/vbrain/wiki/{concepts,decisions,_rules}/ → reindex → 4 queries\n de teste retornando snippets corretos.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Sources::Url via Jina Reader + regra X via LLM no SKILL.md",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T13:08:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0957c7aead66d9270305d56bf49ac3a386f4d67b",
"body": "- Sources::Url: detect por http(s)://, fetch via net/http com UA de browser,\n extração para markdown via Nokogiri (Open Graph + body de article/main, com\n remoção de script/style). Cap de 8k chars no body. Cobre HTML genérico.\n\n- Sources::Twitter: detect twitter.com|x.com/<user>/status/<id>, fetch\n[…]\nm_html, extract_from_json,\n detect, token deterministic. Fixture real do tweet do Alok Bishoyi salva em\n test/fixtures/twitter/.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Sources::Url + Sources::Twitter (syndication endpoint)",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T12:47:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "39a8f91fe4d2dd22ae627116e69e5fdca3a8a85e",
"body": "- Paths::WIKI_DIR/RAW_DIR/DB_PATH viram métodos baseados em ENV[\"VBRAIN_HOME\"]\n (default ~/vbrain). Repo é só código; dados ficam em casa.\n- test_helper isola dados em tmpdir via VBRAIN_HOME pra não tocar a home real.\n- scripts/install.rb copia .claude/skills/* para ~/.claude/skills/, reescrevendo\n\n[…]\nocar sqlite3 direto.\n- Testes para install (render, idempotência, dry-run) e stats.\n- README atualizado.\n\nTotal: 52 testes verdes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: data root em ~/vbrain + script install para skills globais",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T12:31:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "38c82c4e01816c0663cde6c2d3db99fbff87f9ce",
"body": "Base de conhecimento pessoal inspirada em akitaonrails/ai-memory, reduzida a:\n- skill `add-knowledge` (orquestra raw → chunker subagente → wiki-writer subagente → reindex)\n- skill `query-knowledge` (busca FTS5 com normalização de query)\n- scripts Ruby determinísticos para I/O, SQLite, slug, frontmat\n[…]\n/AD para sync automático). Tipo desconhecido na ingestão dispara\nfluxo de \"criar fonte permanente + testes\" ou \"one-shot via LLM\".\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: initial vbrain — skills + Ruby + SQLite FTS5",
"author_name": "Victor Campos",
"author_login": "victorlcampos",
"committed_at": "2026-05-28T12:12:08Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 16,
"commits_last_year": 88,
"latest_release_at": "2026-06-18T12:51:49Z",
"latest_release_tag": "v0.1.20",
"releases_from_tags": false,
"days_since_last_push": 11,
"active_weeks_last_year": 2,
"days_since_latest_release": 33,
"mean_days_between_releases": 1.9
},
"community": {
"has_readme": true,
"has_license": false,
"has_description": false,
"has_contributing": false,
"health_percentage": 12,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/virtual360-io/vbrain",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/virtual360-io/vbrain",
"is_deprecated": false,
"latest_version": "v0.1.20",
"repository_url": "https://github.com/virtual360-io/vbrain",
"versions_count": 15,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-06-18T12:48:02Z",
"latest_version_yanked": null,
"days_since_latest_publish": 33
}
]
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0
},
"open_issues_and_prs": 1
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 39872,
"source_files_sampled": 63,
"oversized_source_files": 0,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 6780
},
"dependencies": {
"manifests": [
"go.mod"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "golang.org/x/crypto",
"direct": false,
"version": "v0.50.0",
"severity": "critical",
"ecosystem": "go",
"cvss_score": 10,
"advisory_ids": [
"GHSA-45gg-vh54-h5m9",
"GHSA-5cgq-3rg8-m6cv",
"GHSA-78mq-xcr3-xm33",
"GHSA-89gr-r52h-f8rx",
"GHSA-9m57-25v3-79x9",
"GHSA-f5wc-c3c7-36mc",
"GHSA-jppx-rxg9-jmrx",
"GHSA-q4h4-gmj2-qvw2",
"GHSA-qpw4-5x99-6vjp",
"GHSA-rm3j-f69w-wqmq"
],
"fixed_version": "0.52.0",
"advisory_count": 27,
"oldest_advisory_days": 61
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "v0.53.0",
"severity": "moderate",
"ecosystem": "go",
"cvss_score": 6.5,
"advisory_ids": [
"GHSA-5cv4-jp36-h3mw",
"GO-2026-5025",
"GO-2026-5026",
"GO-2026-5027",
"GO-2026-5028",
"GO-2026-5029",
"GO-2026-5030",
"GO-2026-5942"
],
"fixed_version": "0.56.0",
"advisory_count": 8,
"oldest_advisory_days": 60
},
{
"name": "golang.org/x/text",
"direct": true,
"version": "v0.37.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5970"
],
"fixed_version": "0.39.0",
"advisory_count": 1,
"oldest_advisory_days": 7
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "v0.43.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5024"
],
"fixed_version": "0.44.0",
"advisory_count": 1,
"oldest_advisory_days": 60
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"unknown": 2,
"critical": 1,
"moderate": 1
},
"advisory_count": 37,
"affected_count": 4,
"assessed_count": 40,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 1
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "github.com/chromedp/cdproto",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20260321001828-e3e3800016bc"
},
{
"name": "github.com/chromedp/chromedp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.15.1"
},
{
"name": "github.com/go-git/go-git/v5",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v5.19.1"
},
{
"name": "github.com/robfig/cron/v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
},
{
"name": "golang.org/x/text",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.37.0"
},
{
"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.51.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "github.com/chromedp/cdproto",
"direct": true,
"version": "v0.0.0-20260321001828-e3e3800016bc",
"ecosystem": "go"
},
{
"name": "github.com/chromedp/chromedp",
"direct": true,
"version": "v0.15.1",
"ecosystem": "go"
},
{
"name": "github.com/go-git/go-git/v5",
"direct": true,
"version": "v5.19.1",
"ecosystem": "go"
},
{
"name": "github.com/robfig/cron/v3",
"direct": true,
"version": "v3.0.1",
"ecosystem": "go"
},
{
"name": "golang.org/x/text",
"direct": true,
"version": "v0.37.0",
"ecosystem": "go"
},
{
"name": "gopkg.in/yaml.v3",
"direct": true,
"version": "v3.0.1",
"ecosystem": "go"
},
{
"name": "modernc.org/sqlite",
"direct": true,
"version": "v1.51.0",
"ecosystem": "go"
},
{
"name": "dario.cat/mergo",
"direct": false,
"version": "v1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/chromedp/sysutil",
"direct": false,
"version": "v1.1.0",
"ecosystem": "go"
},
{
"name": "github.com/cloudflare/circl",
"direct": false,
"version": "v1.6.3",
"ecosystem": "go"
},
{
"name": "github.com/cyphar/filepath-securejoin",
"direct": false,
"version": "v0.6.1",
"ecosystem": "go"
},
{
"name": "github.com/dustin/go-humanize",
"direct": false,
"version": "v1.0.1",
"ecosystem": "go"
},
{
"name": "github.com/emirpasic/gods",
"direct": false,
"version": "v1.18.1",
"ecosystem": "go"
},
{
"name": "github.com/go-git/gcfg",
"direct": false,
"version": "v1.5.1-0.20230307220236-3a3c6141e376",
"ecosystem": "go"
},
{
"name": "github.com/go-git/go-billy/v5",
"direct": false,
"version": "v5.9.0",
"ecosystem": "go"
},
{
"name": "github.com/go-json-experiment/json",
"direct": false,
"version": "v0.0.0-20260214004413-d219187c3433",
"ecosystem": "go"
},
{
"name": "github.com/gobwas/httphead",
"direct": false,
"version": "v0.1.0",
"ecosystem": "go"
},
{
"name": "github.com/gobwas/pool",
"direct": false,
"version": "v0.2.1",
"ecosystem": "go"
},
{
"name": "github.com/gobwas/ws",
"direct": false,
"version": "v1.4.0",
"ecosystem": "go"
},
{
"name": "github.com/golang/groupcache",
"direct": false,
"version": "v0.0.0-20241129210726-2c02b8208cf8",
"ecosystem": "go"
},
{
"name": "github.com/google/uuid",
"direct": false,
"version": "v1.6.0",
"ecosystem": "go"
},
{
"name": "github.com/jbenet/go-context",
"direct": false,
"version": "v0.0.0-20150711004518-d14ea06fba99",
"ecosystem": "go"
},
{
"name": "github.com/kevinburke/ssh_config",
"direct": false,
"version": "v1.2.0",
"ecosystem": "go"
},
{
"name": "github.com/klauspost/cpuid/v2",
"direct": false,
"version": "v2.3.0",
"ecosystem": "go"
},
{
"name": "github.com/mattn/go-isatty",
"direct": false,
"version": "v0.0.20",
"ecosystem": "go"
},
{
"name": "github.com/microsoft/go-winio",
"direct": false,
"version": "v0.6.2",
"ecosystem": "go"
},
{
"name": "github.com/ncruces/go-strftime",
"direct": false,
"version": "v1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/pjbgf/sha1cd",
"direct": false,
"version": "v0.6.0",
"ecosystem": "go"
},
{
"name": "github.com/protonmail/go-crypto",
"direct": false,
"version": "v1.1.6",
"ecosystem": "go"
},
{
"name": "github.com/remyoudompheng/bigfft",
"direct": false,
"version": "v0.0.0-20230129092748-24d4a6f8daec",
"ecosystem": "go"
},
{
"name": "github.com/sergi/go-diff",
"direct": false,
"version": "v1.3.2-0.20230802210424-5b0b94c5c0d3",
"ecosystem": "go"
},
{
"name": "github.com/skeema/knownhosts",
"direct": false,
"version": "v1.3.1",
"ecosystem": "go"
},
{
"name": "github.com/xanzy/ssh-agent",
"direct": false,
"version": "v0.3.3",
"ecosystem": "go"
},
{
"name": "golang.org/x/crypto",
"direct": false,
"version": "v0.50.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "v0.53.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "v0.43.0",
"ecosystem": "go"
},
{
"name": "gopkg.in/warnings.v0",
"direct": false,
"version": "v0.1.2",
"ecosystem": "go"
},
{
"name": "modernc.org/libc",
"direct": false,
"version": "v1.72.3",
"ecosystem": "go"
},
{
"name": "modernc.org/mathutil",
"direct": false,
"version": "v1.7.1",
"ecosystem": "go"
},
{
"name": "modernc.org/memory",
"direct": false,
"version": "v1.11.0",
"ecosystem": "go"
}
],
"collected": true,
"truncated": false,
"total_count": 40,
"direct_count": 7,
"indirect_count": 33
}
},
"maintainership": {
"issues": {
"open_prs": 1,
"merged_prs": 2,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 1
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "victorlcampos",
"commits": 42,
"avatar_url": "https://avatars.githubusercontent.com/u/1539610?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 38,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.525
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"build.yml",
"pages.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": 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": 0,
"reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"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/29 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": 0,
"reason": "license file not 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": 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": 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": 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": 0,
"reason": "23 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "00f96029431db82ebcbd93ee05d8e076b2be2ee6",
"ran_at": "2026-07-22T02:45:33Z",
"aggregate_score": 1.9,
"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-15T09:30:34Z",
"oldest_open_prs": [
{
"number": 4,
"created_at": "2026-07-10T19:56:53Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-06-01T12:19:16Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/virtual360-io/vbrain",
"host": "github.com",
"name": "vbrain",
"owner": "virtual360-io"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 46,
"inputs": {
"security": 33,
"vitality": 65,
"community": 12,
"governance": 57,
"engineering": 55
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 65,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "at_risk",
"name": "Development activity",
"note": null,
"notes": [],
"value": 48,
"inputs": {
"commits_last_year": 88,
"human_commit_share": 0.909,
"days_since_last_push": 11,
"active_weeks_last_year": 2
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 11 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 11
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "2/52 weeks with commits",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 2
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "88 commits in the last year",
"points": 17.5,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 88
}
}
],
"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": 16,
"latest_release_tag": "v0.1.20",
"releases_from_tags": false,
"days_since_latest_release": 33,
"mean_days_between_releases": 1.9
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "16 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 16
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 33 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 33
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~1.9 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 1.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": "critical",
"name": "Community & Adoption",
"value": 12,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 0,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "0 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 0
}
}
],
"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": "critical",
"name": "Community health",
"note": null,
"notes": [],
"value": 25,
"inputs": {
"has_readme": true,
"has_license": false,
"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": "no license file detected",
"points": 0,
"status": "missed",
"details": [
{
"code": "license_absent",
"params": {}
}
],
"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
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 57,
"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": 2,
"top_contributor_share": 0.525
},
"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 52% of commits",
"points": 10.7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 52
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"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": "at_risk",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 48,
"inputs": {
"merged_prs": 2,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 1
},
"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": "2/3 decided PRs merged",
"points": 25.5,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 2,
"decided": 3
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/29 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"followers": 105,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "virtual360-io",
"public_repos": 34,
"account_age_days": 2609
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "105 followers of virtual360-io",
"points": 14.6,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 105,
"login": "virtual360-io"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "34 public repos, account ~7 yr old",
"points": 23.2,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 34
}
},
{
"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": [
"github.com/virtual360-io/vbrain"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 33
},
"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 33 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 33
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "15 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 15
}
}
],
"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": "moderate",
"name": "Engineering Quality",
"value": 55,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 48,
"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": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"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": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"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": "at_risk",
"name": "Security",
"value": 33,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 19,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 1.9
},
"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": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"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 0/29 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 not detected",
"points": 0,
"status": "missed",
"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": "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 not detected",
"points": 0,
"status": "missed",
"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": "23 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 40 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 40
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 89,
"inputs": {
"source": "osv",
"advisories": 37,
"affected_packages": 4,
"assessed_packages": 40,
"unassessed_packages": 0,
"affected_by_severity": "critical 1, moderate 1, unknown 2",
"direct_affected_packages": 1
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "1 affected: golang.org/x/text v0.37.0 (unknown)",
"points": 26.6,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 1,
"packages": "golang.org/x/text v0.37.0 (unknown)"
}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory has been public longer than 90 days",
"points": 40,
"status": "met",
"details": [
{
"code": "advisories_none_stale",
"params": {
"days": 90
}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 40,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 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": 79,
"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.975,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 6780
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "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": "78 of 80 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 78,
"sampled": 80
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.432,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "go.mod (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "go.mod"
}
}
],
"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": "38 of the last 88 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 38,
"sampled": 88
}
}
],
"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": 39872,
"source_files_sampled": 63,
"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/63 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 63,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [],
"report_type": "repository",
"generated_at": "2026-07-22T02:45:41.524671Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/v/virtual360-io/vbrain.svg",
"full_name": "virtual360-io/vbrain",
"license_state": "absent",
"license_spdx": null
}