Meeting repo registry: spec + parser + seeded registry (#11) - #32
Open
michaeloboyle wants to merge 2 commits into
Open
Meeting repo registry: spec + parser + seeded registry (#11)#32michaeloboyle wants to merge 2 commits into
michaeloboyle wants to merge 2 commits into
Conversation
Gherkin spec for the meeting repo-registry parser (Issue #11 candidate pool / OIA-attractor target list). Makes the judgment calls explicit: introducer = earliest speaker not owner; curated Feb-Apr seed merges with automated passes (earliest date wins); public-safe output (no PII); unparsed sources reported not dropped. No implementation yet. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…s part of #11) Parser that turns repos introduced in AF meetings into a public-safe registry, each entry attributed to its INTRODUCER (earliest speaker, not owner) and first-seen date. Implements features/repo-registry.feature (spec-first). - lib/repo-registry.js: pure buildRegistry() (deterministic) + toPublicRegistry() (whitelisted fields, PII guard). Extraction via GitHub URLs + a known-project lexicon; earliest-speaker attribution; URL/lexicon dedupe; seed merge. - test/repo-registry.test.js: 11 tests mapping 1:1 to the feature scenarios. Red-first, and mutation-checked (inverting earliest-wins fails the test; PII guard proven to fire on a leaked phone). - scripts/build-repo-registry.mjs: CLI. Reads the curated seed + optional --sources dir (raw transcripts stay in PKM, passed at runtime, never committed). - data/meeting-repos-seed.json: 18 curated Feb-Apr entries from member-intel. - data/meeting-repos.json: generated registry (18 repos; 9 May-Jul Meet transcripts reported as not_yet_parsed, not silently dropped). Full suite 129 -> 140, all green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR introduces a “meeting repo registry” pipeline that turns meeting chat/transcript inputs plus a curated seed into a deterministic registry, along with a public-safe projection and a CLI that writes data/meeting-repos.json for use as an OSS committee candidate pool (Issue #11).
Changes:
- Adds a Gherkin spec and a matching Node test suite for registry extraction, attribution, dedupe, public-safe output, and reporting of unparsed sources.
- Implements the registry builder (
buildRegistry) and a public projection (toPublicRegistry) plus a lexicon of known projects. - Adds a CLI to generate the public registry JSON from the seed and optional runtime-provided transcript sources, and commits the initial seed + generated output.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
features/repo-registry.feature |
Defines the expected registry behavior and output contract (spec-first). |
lib/repo-registry.js |
Implements registry construction + public-safe projection + lexicon. |
scripts/build-repo-registry.mjs |
CLI to generate data/meeting-repos.json from seed and optional sources. |
test/repo-registry.test.js |
Tests mapping to the Gherkin scenarios for extraction/merge/dedupe/output. |
data/meeting-repos-seed.json |
Curated seed entries + provenance + not-yet-parsed list. |
data/meeting-repos.json |
Generated public registry output committed to the repo. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+10
to
+14
| export const LEXICON = [ | ||
| { canonical: 'agenticsorg/OIA-Model', name: 'OIA-Model', aliases: ['OIA-Model'], owner: 'agenticsorg', url: 'https://github.com/agenticsorg/OIA-Model' }, | ||
| { canonical: 'CraftsMan-Labs/SimpleAgents', name: 'SimpleAgents', aliases: ['SimpleAgents'], owner: 'CraftsMan-Labs', url: 'https://github.com/CraftsMan-Labs/SimpleAgents' }, | ||
| { canonical: 'ruvnet/RuVector', name: 'RuVector', aliases: ['RuVector'], owner: 'ruvnet', url: 'https://github.com/ruvnet/RuVector' }, | ||
| { canonical: 'ruvnet/ruflo', name: 'ruflo', aliases: ['ruflo'], owner: 'ruvnet', url: 'https://github.com/ruvnet/ruflo' }, |
Comment on lines
+1
to
+6
| // Tests for the meeting repo registry parser. | ||
| // Implements features/repo-registry.feature. Introducer = earliest speaker. | ||
| import { test } from 'node:test'; | ||
| import assert from 'node:assert/strict'; | ||
| import { buildRegistry, toPublicRegistry, LEXICON } from '../lib/repo-registry.js'; | ||
|
|
Comment on lines
+14
to
+18
| import { readFile, writeFile, readdir } from 'node:fs/promises'; | ||
| import { existsSync } from 'node:fs'; | ||
| import { join, basename } from 'node:path'; | ||
| import { buildRegistry, toPublicRegistry, LEXICON } from '../lib/repo-registry.js'; | ||
|
|
|
|
||
| async function loadSources(dir) { | ||
| if (!dir || !existsSync(dir)) return []; | ||
| const files = (await readdir(dir)).filter((f) => /\.(txt|md)$/i.test(f)); |
Comment on lines
+8
to
+10
| // files. Each file's date is taken from a leading YYYY-MM-DD in its name. | ||
| // Raw transcripts live in PKM (internal) and are NOT committed here; pass | ||
| // the dir at runtime. Without it, the registry is built from the seed. |
| # AF meeting chats/transcripts + AF-Member-Intelligence (Feb-Jul 2026); | ||
| # OIA-as-attractor plan (2026-07-13) -- the registry is the warm-lead | ||
| # target list of repos to assess against OIA. | ||
| # Status: RED (no implementation) |
| return { entries, report: { parsed_sources: sources.length, not_yet_parsed: [...notYetParsed] } }; | ||
| } | ||
|
|
||
| /** Project entries to the public-safe shape (whitelisted fields, PII-checked). */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Turns "repos people introduced in AF meetings" into a maintained, public-safe registry — the candidate pool for Issue #11 and the target list for OIA assessment. Each entry is attributed to its introducer (earliest speaker, not the owner) and its first-seen date.
Spec-first (RGBDD)
features/repo-registry.feature(Gherkin, house style) makes the judgment calls explicit: introducer = earliest speaker; curated Feb–Apr seed merges with automated passes (earliest date wins); public-safe output (no PII); unparsed sources reported, not dropped.test/repo-registry.test.js— 11 tests mapping 1:1 to the scenarios.Implementation
lib/repo-registry.js— purebuildRegistry()(deterministic; no Date/random) +toPublicRegistry()(whitelisted fields + PII guard). Extraction via GitHub URLs and a known-project lexicon; earliest-speaker attribution; URL/lexicon dedupe; seed merge.scripts/build-repo-registry.mjs— CLI. Reads the curated seed + an optional--sources <dir>. Raw transcripts stay in PKM (internal) and are passed at runtime, never committed — only the public-safe projection lands here.data/meeting-repos-seed.json— 18 curated Feb–Apr entries from member-intelligence.data/meeting-repos.json— the generated registry: 18 repos, and the 9 May–Jul Google Meet transcripts listed undernot_yet_parsed(coverage honesty — completing them needs those transcripts as text).Verification (behavioral, not deploy-state)
ERR_MODULE_NOT_FOUNDbefore the lib existed.Known limits (stated, not hidden)
source: member-intel).nullwhere unverified carry anowner-unverifiedflag rather than a guess.🤖 Generated with Claude Code