feat: add meeting-to-tree skill - #2033
Conversation
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The report-only boundary is directionally sound, but the live capture path can read outside the freshly authorized window and can fetch raw content before the complete notes lineage is known; the shipped agent behavior also lacks required eval and Tree coordination.
Risk level: A
- Path baseline: includes the Client runtime's bundled-skill installer and generated briefing surface.
- Semantic lift: none beyond the A baseline.
PR summary
- Author / repo: Gandy2025 / agent-team-foundation/first-tree
- Problem: Decisions settled in Feishu meetings can remain trapped in meeting history, so future humans and agents miss durable rationale and constraints.
- Approach: Ship an explicit owner-scoped skill that discovers owned meetings, assembles temporary raw evidence, derives sanitized review candidates, persists a private revision ledger/report, and deliberately stops before confirmation or Context Tree publication.
- Impacted modules: Client skill bundling/bootstrap/briefing, the new meeting-context skill and deterministic scripts, skill-eval inventory, and cross-surface QA cases.
Review findings
❌ 1. Bind both ends of the provider read to the fresh human-authorized window. plan-window.mjs accepts only --end; its start comes from a prior watermark or persistent bootstrap_start, then the skill tells the agent to use that result exactly. On a first run—or after a stale watermark—a request for one day can therefore read meetings from much earlier than the request authorized. Pass the explicit authorized start/end into planning and clamp any overlap to that scope (with a regression test), rather than treating saved state as authorization. [skills/return-meeting-context/scripts/plan-window.mjs:14-31]
❌ 2. Validate the entire notes lineage before the first transcript fetch. The loop fetches each valid-looking note immediately; if a later note is missing a lineage field, duplicates a token, or conflicts with the earlier set, sourceStatus becomes partial only after raw content has already been fetched and written. This contradicts the stated invariant that incomplete/conflicting lineage stops before raw fetch. Do one metadata-only pass over all notes first, fail the occurrence closed on any ambiguity, and add a mixed valid+invalid/mixed-conflict case that asserts zero docs +fetch calls. [skills/return-meeting-context/scripts/collect-feishu.mjs:175-240]
❌ 3. Add real @first-tree/skill-evals coverage for the shipped agent behavior instead of classifying the new skill as unevaluated. The deterministic suite can guard the scripts, and formal provider QA can guard live Feishu/filesystem boundaries, but neither evaluates the agent-owned settlement, later-override, durability, semantic-dedupe, rationale, redaction, and no-change judgments already enumerated in references/eval-cases.md. The absence of tracked-answer UX does not block report-only synthetic gate/quality cases because this pilot explicitly stops before asking or publishing. [packages/skill-evals/src/core/case-schema.ts:21-30]
❌ 4. Pair this code PR with a draft Context Tree update and cross-link them. The current normal system/architecture.md explicitly enumerates the runtime-installed skill set and describes it as the full shipped family; adding return-meeting-context to the Client/runtime briefing makes that durable system node stale. The already-merged meeting-boundary PR #828 updates the raw-record policy, but it does not update the skill topology. [packages/client/src/runtime/agent-briefing.ts:231-240]
Action taken
- Submitted a request-changes review. No code or documentation was modified, and no tests were run locally.
yuezengwu
left a comment
There was a problem hiding this comment.
Requesting changes on head 4944013d.
Two additional blockers remain beyond the existing authorization-window and pre-fetch-lineage findings:
-
skills/return-meeting-context/scripts/validate-output.mjs:264-271deliberately carriesconfirmation_member_idsinto the validated candidate, andfinalize-run.mjs:55-65embeds that validated object unchanged in the persistent report. This contradicts the skill's run-lifetime-only rule for participant identifiers and the new QA case's explicit assertion that persistent private state contains no participant identifier. Remove identifying member/participant values from the persisted report contract (or replace them with a non-identifying settlement fact), and add a regression that inspects the finalized report. -
skills/return-meeting-context/scripts/finalize-run.mjs:71-78advancesstate.source_revisionsfor every completecandidatesresult unless a candidate isblocked-sourceorfailed, so arevisitcandidate is advanced too. The next run then exits throughprepare-run.mjs:170-173solely because the meeting source hash is unchanged; neitherrevisit_triggernor a changed Tree/proposal snapshot is evaluated. The promised re-evaluation can therefore never happen without a transcript revision. Keep revisit outcomes eligible for re-analysis, or bind the fast path to the persisted trigger and relevant Tree/proposal revision.
This PR also introduces the return-meeting-context.state.v1 ledger and persistent report schema, so the identity-retention and revision-transition semantics need explicit human review as core data-structure changes.
No local tests or QA were run, per the review instructions.
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The artifact-driven redesign removes the unsafe live-capture state machine, but the new packet contract does not yet bind a packet to the exact supplied artifact or prove that its settlement basis is supported by the cited source.
Risk level: A
- Path baseline: includes the Client runtime's bundled-skill installer and generated briefing surface.
- Semantic lift: none beyond the A baseline.
PR summary
- Author / repo: Gandy2025 / agent-team-foundation/first-tree
- Problem: Durable decisions and rationale in user-supplied meeting artifacts should become reusable context without copying raw meeting records into the Context Tree.
- Approach: Replace provider discovery and persistent capture state with a provider-agnostic, task-local artifact bundle; emit a sanitized decision-evidence packet; and hand eligible write-intent packets to
first-tree-writefor Tree dedupe, targeting, verification, and draft PR preparation. - Impacted modules: Client skill bundling/bootstrap/briefing, the new meeting artifact/packet contracts and validators, a model-backed skill-eval suite, and cross-surface QA coverage.
Review findings
❌ 1. Bind source_revision to the exact supplied artifact reference. The revision projection omits content_ref.kind and content_ref.locator, so two bundles that point at different provider documents, attachments, or local files but reuse the same artifact ID/revision/metadata produce the same hash. A packet validated for source A can therefore validate against source B. Include a privacy-safe digest of the reference (and keep the declared provider/content revision), then add a regression proving that changing only the locator changes source_revision. [skills/return-meeting-context/scripts/lib.mjs:127-142]
❌ 2. Cross-check each strong settlement basis against the source roles of the candidate's cited evidence. Today an AI-notes-only bundle passes ready-for-write if the packet simply labels its basis human_confirmed_minutes, because validation checks only that the enum is in STRONG_SETTLEMENT_BASES; it never verifies that any referenced artifact is actually human_minutes (and the same gap applies to decision-record and transcript bases). Build an artifact-ID → source-role map, require a matching cited artifact for the claimed basis, and add the AI-only spoof regression. [skills/return-meeting-context/scripts/lib.mjs:265-271, skills/return-meeting-context/scripts/lib.mjs:313-345]
❌ 3. Complete the two-way code/Tree coordination. Draft Tree PR first-tree-context#830 now supplies the missing topology update and links back here, but this code PR still links only #828 and its body still describes the deleted Feishu/owner/window/ledger design, including the now-false claim that the skill never calls first-tree-write. Link #830 from this PR and update the safety/behavior summary to the current artifact-driven handoff so both sides of the pair describe the same design.
✅ 4. The previous authorization-window, pre-fetch-lineage, participant-persistence, and revisit-fast-path findings are resolved by removing live discovery and persistent meeting state from this skill. The new eval suite also resolves the missing skill-eval coverage finding.
Action taken
- Submitted a new request-changes review on head
65df0006. No code or documentation was modified, and no local tests or QA were run.
baixiaohang
left a comment
There was a problem hiding this comment.
Follow-up on head 65df0006: the edited PR body now reflects the artifact-driven design and links paired draft Tree PR #830, while #830 links back here. Finding 3 from my latest review is resolved.
The request-changes recommendation remains for findings 1–2 only:
- bind
source_revisionto the exact supplied artifact reference; - verify each claimed settlement basis against the source role of the cited evidence.
No local tests or QA were run.
|
Resolved on code head Current review findings:
Earlier findings remain resolved by the artifact-driven redesign:
Verification on this head:
The concurrent skill-evals run reproduced two unrelated existing 5-second fixture timeouts; the affected review and audit files passed independently (10/10 and 12/12), and the full suite passed serially. The previous code head's unrelated server mock-race failure is not modified here; the new head has a fresh CI run. |
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The two validator blockers are fixed, but the generated briefing still tells agents to route meeting notes directly to
first-tree-write, and the eval suite does not exercise the natural-language routing boundary that is supposed to prevent that path.
Risk level: A
- Path baseline: includes the Client runtime's bundled-skill installer and generated briefing surface.
- Semantic lift: none beyond the A baseline.
PR summary
- Author / repo: Gandy2025 and yuezengwu / agent-team-foundation/first-tree
- Problem: Durable decisions in user-supplied meeting artifacts need a provider-agnostic path into reusable context without copying raw meeting records into the Context Tree.
- Approach: Normalize an explicit task-local artifact bundle, validate a sanitized decision-evidence packet, require meeting sources to pass through
return-meeting-context, and hand only eligible packets tofirst-tree-write. - Impacted modules: Client skill bundling and briefing, both meeting/write skills, deterministic packet validation, skill evals, and cross-surface QA coverage.
Review findings
❌ 1. Make every generated routing instruction obey the new meeting-first boundary, and cover it with a natural user prompt. The family map and skill descriptions now say meeting artifacts must go through return-meeting-context, but the always-generated “Writing the Tree” section still says a meeting note should load first-tree-write directly; the writer's own worked examples also still name a raw meeting note as the tree-write trigger. Meanwhile every implemented gate prompt explicitly says “Use return-meeting-context,” so none proves that a realistic request such as “reflect these meeting notes into the Context Tree” selects the interpreter and produces a validated packet before any writer action. Remove the contradictory direct-writer instructions/examples and add a routing gate whose prompt does not name either skill, with an oracle that observes return-meeting-context before any Tree mutation. [packages/client/src/runtime/templates/agent-briefing.ejs:470-480, skills/first-tree-write/SKILL.md:229-250, packages/skill-evals/src/suites/return-meeting-context/cases.ts:11-90]
✅ 2. The previous source_revision blocker is resolved: the projection now includes a privacy-safe digest of the exact content_ref, with a locator-change regression.
✅ 3. The previous settlement-basis blocker is resolved: validation now maps cited artifact IDs to source roles and rejects all three strong bases when the cited role does not match.
Action taken
- Submitted request changes on head
17351cfd. No code or documentation was modified, and no local tests or QA were run.
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The production briefing conflict is fixed, but the new “natural-language routing gate” preselects the interpreter in its fixture and cannot detect the direct-writer regression it is meant to guard.
Risk level: A
- Path baseline: includes the Client runtime's generated briefing and bundled-skill surface.
- Semantic lift: none beyond the A baseline.
PR summary
- Author / repo: Gandy2025 and yuezengwu / agent-team-foundation/first-tree
- Problem: User-supplied meeting artifacts need to yield durable context without allowing raw meeting material to bypass settlement, chronology, and privacy interpretation.
- Approach: Route every meeting artifact through
return-meeting-context, validate a sanitized decision-evidence packet, then usefirst-tree-writeas the unified publication path for eligible packets. - Impacted modules: Client briefing generation, meeting/write skills, packet validation, skill evals, and cross-surface QA coverage.
Review findings
❌ 1. Make the routing gate exercise a real choice between both skills. The user prompt no longer names a skill, but the fixture installs and advertises only return-meeting-context, explicitly orders the agent to read that skill, and explicitly forbids invoking first-tree-write or creating a Tree. routing_pass then checks only that the interpreter file was read. This case must pass even if the real generated briefing or a composed two-skill environment would choose the writer first, so it does not guard the exclusive-routing contract. Install both skills with the effective generated routing instructions (or an equivalent composed fixture), remove evaluator guidance that selects/forbids either skill, and grade the trace so interpreter selection plus packet validation occurs before any writer/Tree mutation attempt; use side-effect shims if the gate should stop at the handoff. [packages/skill-evals/src/suites/return-meeting-context/fixture.ts:13-30, packages/skill-evals/src/suites/return-meeting-context/grader.ts:17-24, packages/skill-evals/src/suites/return-meeting-context/grader.ts:165-179]
✅ 2. The generated bound-Tree briefing and first-tree-write worked example now consistently route meeting artifacts through the interpreter first.
✅ 3. The exact-reference binding and settlement-source-role fixes from the previous head remain intact.
Action taken
- Submitted request changes on head
43e41045. No code or documentation was modified, and no local tests or QA were run.
|
Resolved on exact head The natural routing case now exercises a real composed choice:
Regression coverage now proves that writer-first and validator-after-writer traces fail, while interpreter → validator → writer passes. Fixture coverage also verifies both skills are installed and the composed instructions contain no evaluator preselection. Verification on this exact head:
No model-backed gate was run because repository policy requires explicit human authorization. Please re-review the exact head. |
yuezengwu
left a comment
There was a problem hiding this comment.
Re-reviewed exact head 85a2475a.
The composed fixture now installs both skills without preselecting either one, and the earlier artifact-binding, settlement-source-role, production-routing, and removed live-state findings remain resolved.
One blocker remains in the new routing oracle:
packages/skill-evals/src/suites/return-meeting-context/grader.ts:57-59treats any successful command whose text merely containsvalidate-output.mjsas a validator invocation. A model can therefore read the validator withcat/sed, loadfirst-tree-write, and only run the validator afterward; the earlier read is recorded asvalidatorInvocationOrder, sorouting_passsucceeds even though the real validation happened after the writer handoff. Detect an actual validator execution (or emit/consume an explicit successful validation event/receipt), and add a regression wheresed .../validate-output.mjsprecedes the writer butnode .../validate-output.mjsfollows it—the route must fail.
No local tests or QA were run, per the review instructions.
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The composed routing environment is now correct, but its order oracle treats any successful command mentioning the validator filename as successful packet validation.
Risk level: A
- Path baseline: includes the Client runtime's generated briefing and bundled-skill surface.
- Semantic lift: none beyond the A baseline.
PR summary
- Author / repo: Gandy2025 and yuezengwu / agent-team-foundation/first-tree
- Problem: Meeting artifacts must pass settlement, chronology, and privacy interpretation before entering the unified Context Tree writer.
- Approach: Use
return-meeting-contextto create and validate a sanitized evidence packet, then permitfirst-tree-writeonly after that handoff. - Impacted modules: Client briefing generation, meeting/write skills, packet validators, skill evals, and paired Tree topology.
Review findings
❌ 1. Distinguish executing the validator from merely reading or mentioning it. successfulCommand() returns the text of any successful command, and the next check accepts it whenever that text contains validate-output.mjs. A trace such as interpreter read → sed -n ... validate-output.mjs → writer read → node ... validate-output.mjs is therefore graded as correctly ordered even though actual validation happens after the writer handoff. Parse an actual validator execution or consume an explicit successful-validation receipt/event, and add this exact read-before-writer/run-after-writer regression. [packages/skill-evals/src/suites/return-meeting-context/grader.ts:33-40, packages/skill-evals/src/suites/return-meeting-context/grader.ts:57-59, packages/skill-evals/src/suites/return-meeting-context/__tests__/grader.test.ts:88-146]
✅ 2. The dual-skill fixture, production routing text, exact artifact binding, settlement provenance, and paired Tree boundary remain directionally correct.
Action taken
- Submitted request changes on exact head
85a2475a. No code or documentation was modified, and no local tests or QA were run.
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: approve
- Rationale: The final routing-oracle bypass is closed on exact head
eb9e365558a0190ef10c5a68601ac006ae04a344, and the earlier source-binding, provenance, routing, privacy, and paired-Tree findings remain resolved.
Risk level: A
- Path baseline: includes
packages/client/**for bundled-skill and generated-briefing behavior. - Semantic lift: none beyond the path baseline.
PR summary
- Author / repo: Gandy2025 / agent-team-foundation/first-tree
- Problem: Agents need a safe, deterministic way to interpret user-supplied meeting artifacts before any durable Context Tree publication workflow begins.
- Approach: Route every raw meeting artifact through a provider-agnostic interpreter, validate a sanitized
DecisionEvidencePacket, and hand only eligible write intent to the unifiedfirst-tree-writeworkflow. Provider discovery, authorization, persistent capture state, and direct Tree writes stay outside this skill. - Impacted modules:
skills/return-meeting-context,skills/first-tree-write, client skill bundling/briefing, skill evals, and cross-surface QA fixtures.
Review findings
- ✅ Exact artifact references now participate in the privacy-safe source revision.
- ✅ Strong settlement bases are cross-checked against cited source roles.
- ✅ The composed routing fixture exposes both skills and enforces interpreter read → successful packet validation → optional writer read.
- ✅ Validator ordering now recognizes only an actual successful Node execution; reads, mentions, syntax checks, pipelines, and chained commands cannot satisfy the oracle.
- ✅ The paired draft Context Tree PR #830 records the same exclusive-routing and raw-data boundary.
Action taken
- Approved exact head
eb9e365558a0190ef10c5a68601ac006ae04a344after explicit owner authorization and green exact-head CI/CodeQL.
No local tests or QA were run, per the review instructions.
|
@yuezengwu The final routing-oracle finding from head The grader now recognizes only a successful, static Node execution of the exact The requested regression is present: interpreter read → validator source read → writer read → actual validator execution fails and records the real execution after the writer. Positive coverage includes relative, absolute, Exact-head status:
Please re-review this exact head so the stale request-changes state can be resolved without dismissing review history. |
yuezengwu
left a comment
There was a problem hiding this comment.
Recommendation: approve
- Re-reviewed exact head
eb9e365558a0190ef10c5a68601ac006ae04a344. - The remaining routing-oracle bypass is closed: only a successful static Node execution of the exact
return-meeting-context/scripts/validate-output.mjsentry point counts as packet validation. Reads/mentions, syntax checks, preload-only use, pipelines, chained commands, dynamic shell input, and failed executions do not satisfy the ordering gate. - The requested regression proves that reading the validator before
first-tree-writeand executing it only afterward fails; valid interpreter → validator → optional writer traces pass. - Earlier exact-reference binding, settlement-basis/source-role provenance, production and composed meeting-first routing, raw-data privacy boundary, and paired draft Context Tree PR #830 remain resolved.
No local tests or QA were run, per the review instructions.
|
Superseding the previously approved design on exact head The Skill is now named
All Client installer/bootstrap/briefing changes, core skill-evals registration, The exact-reference digest, source-role/confirmation binding, chronology
No model-backed evaluation or live meeting read was performed. Please |
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The standalone, destination-neutral boundary is coherent, but the current validator cannot represent one of the skill's required blocked states, its privacy backstop accepts several explicitly forbidden value shapes, the agent-owned semantics have no executable eval, and the paired Tree proposal still records the superseded core-routing design.
Risk level: C
- Path baseline: the effective PR diff against
mainnow contains onlyskills/analyze-meeting-notes/**. - Semantic lift: none.
PR summary
- Author / repo: Gandy2025 and yuezengwu / agent-team-foundation/first-tree
- Problem: A user who supplies meeting minutes, notes, transcripts, or decision records needs a safe analysis of decisions, progress, plans, actions, blockers, and risks without implicitly publishing that analysis anywhere.
- Approach: Keep acquisition in ordinary readers, normalize an exact task-local artifact bundle, have a standalone skill produce a destination-neutral
MeetingAnalysisPacket, and leave all downstream orchestration outside the skill. - Impacted modules: the new standalone
skills/analyze-meeting-notes/**payload only; the prior Client/core-skill, writer, QA, and skill-eval integration is no longer part of the effective PR diff.
Review findings
❌ 1. Make blocked-source represent every source condition that the skill says must stop analysis. The skill permits source_role: unknown and says unknown provenance or another safely-unclassifiable source may require blocked-source, but source_status is derived only from extraction completeness and packet validation accepts blocked-source only when an artifact is partial/unknown in the completeness field. A fully extracted artifact whose provenance cannot be classified safely is therefore forced either into semantic analysis or into a packet the validator rejects. Add an explicit classification-safety signal (or conservatively treat unknown provenance as blocked) and cover the complete-but-unclassifiable case. [skills/analyze-meeting-notes/SKILL.md:88-99, skills/analyze-meeting-notes/scripts/lib.mjs:220-223, skills/analyze-meeting-notes/scripts/lib.mjs:340-345]
❌ 2. Enforce the privacy contract against the value shapes it actually forbids. scanPrivateOutput() rejects only http(s) URLs, a short allowlist of absolute path roots, and underscore-shaped secret/provider prefixes. As written, values such as /etc/passwd, file:///tmp/source.md, a relative source path, sk-proj-..., a hyphenated Slack token, or a provider document token without an underscore can pass even though the skill promises no URLs, file paths, credentials, provider identifiers, or document tokens. Tighten the value policy (prefer a narrow structural allowlist where possible) and add representative regressions for each promised class. [skills/analyze-meeting-notes/SKILL.md:108-122, skills/analyze-meeting-notes/scripts/lib.mjs:244-255, skills/analyze-meeting-notes/scripts/test.mjs:331-348]
❌ 3. Add executable agent-behavior coverage for the standalone skill instead of shipping only an eval design document. The deterministic suite hand-constructs packets and proves the validator contract, but it cannot show that an agent loads the skill for a natural meeting-analysis request, preserves six-category granularity, removes later overrides, keeps AI-only material uncertain, blocks partial input before semantic analysis, or avoids copying raw prose. references/eval-cases.md enumerates exactly those model-owned behaviors, yet no suite registers or runs them. Adapt the repo-local harness (without making the skill a Client/core payload) or provide an equivalent executable standalone-skill eval with deterministic oracles. [skills/analyze-meeting-notes/references/eval-cases.md:15-70, packages/skill-evals/src/suites/registry.ts:1-18]
❌ 4. Retire or reconcile the paired Context Tree proposal before this code PR can merge. Draft first-tree-context#830 still says return-meeting-context is a runtime-installed core skill that exclusively routes into first-tree-write; this head instead adds an unbundled analyze-meeting-notes skill with no downstream handoff. The code PR body/title also still present the superseded design and instruct that #830 should become ready after merge. Close #830 as superseded or rewrite both sides to the standalone decision so the next step cannot publish false durable architecture.
✅ 5. Reverting Client installation, generated briefing, writer coupling, and core-family routing is consistent with the newly stated standalone boundary; this review does not require restoring those surfaces.
Action taken
- Submitted request changes on exact head
313f2d8dae968375bb9957e0cdbbe863a0c93701.
No local tests or QA were run, per the review instructions.
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The experimental standalone distribution and stale paired-Tree topology are now reconciled, but three contract blockers remain unchanged: an unrepresentable blocked-source state, privacy checks that accept explicitly forbidden values, and no executable coverage of the agent-owned semantics.
Risk level: C
- Path baseline: the effective PR diff contains only
skills/.experimental/synthesize-meeting-records/**. - Semantic lift: none.
PR summary
- Author / repo: Gandy2025 and yuezengwu / agent-team-foundation/first-tree
- Problem: Users need a separately installable Codex Skill that can synthesize explicitly supplied meeting artifacts into a safe, destination-neutral analysis.
- Approach: Publish an experimental subpath installable with the standard Skill Installer; keep acquisition in ordinary readers, meeting interpretation inside the skill, and all downstream publication outside it.
- Impacted modules:
skills/.experimental/synthesize-meeting-records/**only.
Review findings
❌ 1. Make blocked-source represent every source condition that the skill says must stop analysis. The skill permits source_role: unknown and says unknown provenance or another safely-unclassifiable source may require blocked-source, but source_status is derived only from extraction completeness and packet validation accepts blocked-source only when an artifact is partial/unknown in the completeness field. A fully extracted artifact whose provenance cannot be classified safely is therefore forced either into semantic analysis or into a packet the validator rejects. Add an explicit classification-safety signal (or conservatively treat unknown provenance as blocked) and cover the complete-but-unclassifiable case. [skills/.experimental/synthesize-meeting-records/SKILL.md:88-106, skills/.experimental/synthesize-meeting-records/scripts/lib.mjs:220-223, skills/.experimental/synthesize-meeting-records/scripts/lib.mjs:340-345]
❌ 2. Enforce the privacy contract against the value shapes it actually forbids. scanPrivateOutput() rejects only http(s) URLs, a short allowlist of absolute path roots, and underscore-shaped secret/provider prefixes. As written, values such as /etc/passwd, file:///tmp/source.md, a relative source path, sk-proj-..., a hyphenated Slack token, or a provider document token without an underscore can pass even though the skill promises no URLs, file paths, credentials, provider identifiers, or document tokens. Tighten the value policy (prefer a narrow structural allowlist where possible) and add representative regressions for each promised class. [skills/.experimental/synthesize-meeting-records/SKILL.md:108-122, skills/.experimental/synthesize-meeting-records/scripts/lib.mjs:244-255, skills/.experimental/synthesize-meeting-records/scripts/test.mjs:331-348]
❌ 3. Add executable agent-behavior coverage for the experimental skill instead of shipping only an eval design document. The deterministic suite hand-constructs packets and proves the validator contract, but it cannot show that an agent loads the skill for a natural meeting-synthesis request, preserves six-category granularity, removes later overrides, keeps AI-only material uncertain, blocks partial input before semantic analysis, or avoids copying raw prose. references/eval-cases.md enumerates exactly those model-owned behaviors, yet no suite runs them. Provide an executable standalone-skill eval with deterministic oracles; it does not need to register the payload as a Client/core skill. [skills/.experimental/synthesize-meeting-records/references/eval-cases.md:15-70]
✅ 4. The latest head resolves the earlier distribution/coordination finding: the payload is explicitly experimental and independently installable, the PR title/body now describe that boundary, and obsolete paired Context Tree PR #830 is closed. Restoring Client/core bundling is not required.
Action taken
- Submitted request changes on exact head
c8485140703a51cf21f9166616754998dd50ea44.
No local tests or QA were run, per the review instructions.
yuezengwu
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The experimental, destination-neutral boundary is coherent and the obsolete Tree proposal is now closed, but the packet contract still cannot represent every required blocked source, its privacy validator accepts explicitly forbidden value shapes, and the agent-owned synthesis behavior remains unevaluated.
Risk level: C
- Path baseline: the effective diff against
maincontains onlyskills/.experimental/synthesize-meeting-records/**. - Semantic lift: none.
PR summary
- Goal: safely synthesize exact user-supplied meeting artifacts into decisions, progress, plans, actions, blockers, and risks without publishing downstream.
- Approach: ordinary readers supply a task-local
MeetingArtifactBundle; the experimental skill emits and validates a destination-neutralMeetingAnalysisPacket; downstream orchestration stays outside the skill. - Core data structures: new
MeetingArtifactBundleandMeetingAnalysisPacketcontracts. There is no database change.
Review findings
❌ 1. Make blocked-source represent every condition that the skill requires to stop analysis. source_status depends only on extraction completeness, while the skill says unknown provenance or missing chronology may be unsafe to analyze and defines blocked-source for sources that cannot be classified safely. A fully extracted but safely-unclassifiable artifact is therefore forced into analysis or rejected if the agent emits the required blocked packet. Add an explicit classification/chronology-safety signal, or conservatively block the relevant unknown state, and cover the complete-but-unclassifiable case. [skills/.experimental/synthesize-meeting-records/SKILL.md:83-107, skills/.experimental/synthesize-meeting-records/scripts/lib.mjs:219-223, skills/.experimental/synthesize-meeting-records/scripts/lib.mjs:340-345]
❌ 2. Enforce the stated privacy contract against allowed output values. The scanner catches only http(s), selected absolute-path roots, and underscore-shaped provider/secret prefixes. Allowed fields can still contain /etc/passwd, file:///tmp/source.md, relative source paths, sk-proj-..., hyphenated Slack tokens, and provider document tokens without an underscore, despite the skill forbidding URLs, paths, credentials, provider identifiers, and document tokens. Tighten the value policy—prefer a narrow structural allowlist where feasible—and add representative regressions in actual allowed fields rather than unknown top-level keys. [skills/.experimental/synthesize-meeting-records/SKILL.md:109-124, skills/.experimental/synthesize-meeting-records/scripts/lib.mjs:226-255, skills/.experimental/synthesize-meeting-records/scripts/test.mjs:331-348]
❌ 3. Add executable agent-behavior coverage for the standalone skill. The deterministic suite validates hand-authored packets, but it cannot prove natural-language skill selection, six-category granularity, later-override removal, AI-only uncertainty, pre-semantic blocking, or raw-prose minimization. eval-cases.md specifies these model-owned behaviors but nothing registers or executes them. Adapt the repo-local harness without making this a Client/core payload, or add an equivalent standalone-skill eval with deterministic trace/output oracles. [skills/.experimental/synthesize-meeting-records/references/eval-cases.md:25-75, packages/skill-evals/src/suites/registry.ts:1-18]
✅ 4. The standalone experimental placement is consistent with removing Client/core routing and writer coupling.
✅ 5. Draft Context Tree PR #830 is now closed as obsolete, and this PR's current title/body describe the standalone design, so the earlier cross-surface coordination blocker is resolved.
Action taken
- Submitted request changes on exact head
c8485140703a51cf21f9166616754998dd50ea44.
No local tests or QA were run, per the review instructions.
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: approve
- Rationale: Post-failure grading no longer resolves model-controlled workspace paths, and the successful-fixture side-effect probe now observes entries without following symlink targets.
Risk level: C
- Path baseline: the effective diff is limited to
packages/skill-evals/**andskills/.experimental/synthesize-meeting-records/**. - Semantic lift: none.
PR summary
- Goal: provide an independently installable, provider-neutral meeting-record synthesis Skill without coupling analysis to Client routing or downstream publication.
- Approach: validate normalized meeting bundles and sanitized analysis packets, with an isolated Linux/Codex executable gate for activation, semantics, privacy, source handling, and side effects.
- Core bundle/packet contracts remain destination-neutral; there is no database or installed First Tree architecture change.
Review findings
✅ 1. deriveMetrics() now receives fixture validity and fail-closes without reading packet/source paths after fixture failure: packet data remains absent, source mutation is assumed, and contextTreeCreated is assumed true. This removes the reported post-guard target resolution.
✅ 2. On a valid fixture, entryExistsNoFollowBeneath() walks directory components relative to already-open descriptors and uses follow_symlinks=False for the final entry. Existing and dangling context-tree symlinks are both counted as side effects without resolving their targets; helper failure is also treated fail-closed.
✅ 3. The safe-file primitive test covers existing and dangling final symlinks, while the runner/grader regression locks failed-fixture metrics and rejection. Raw-monitor finalization, Linux process containment, canonical snapshots, event provenance, packet privacy, and the standalone product boundary remain coherent.
Action taken
- Approved exact head
62e75be11c17997fca0d5ec434699b44e36df9ae. - No local tests or QA were run, per the review instructions; four exact-head CI jobs were still running at review time.
|
Independent exact-head re-review: no blocker found The grading-path finding is resolved on exact head
Independent deterministic verification:
One aggregate GitHub |
|
Resolved on exact head This follow-up remains limited to the standalone eval oracle. The product
Exact-head evidence:
No model-backed gate was run. The PR remains draft and no merge was performed. |
yuezengwu
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The standalone boundary and eval hardening are coherent, but the packet validator does not enforce one privacy class that the shipped contract and PR explicitly promise to reject.
Risk level: C
- Path baseline: the effective diff is limited to
packages/skill-evals/**andskills/.experimental/synthesize-meeting-records/**. - Semantic lift: none.
PR summary
- Goal: provide an independently installable, provider-neutral Skill that synthesizes exact user-supplied meeting artifacts without coupling analysis to Client routing, Context Tree publication, or another downstream destination.
- Approach: normalize a
MeetingArtifactBundle, produce a sanitized destination-neutralMeetingAnalysisPacket, and exercise activation, semantic, privacy, source-isolation, and side-effect behavior through an isolated Linux/Codex gate. - Core data structures: this introduces the two JSON contracts above, but no database or installed First Tree architecture change.
Review findings
❌ 1. Enforce the promised contact-detail boundary for phone numbers, and cover it through allowed packet fields. The contract says packet values reject “contact details,” the Skill prohibits unnecessary personal details, and the PR body repeats the contact-detail guarantee. scanPrivateOutput() currently rejects email addresses but has no phone-number check, so values such as Call +1 (415) 555-2671 or Owner phone 415-555-2671 can remain in reason, statement, context, attribution, or location_hint and pass validation. Add a conservative phone/contact pattern (or narrow every shipped claim if phone numbers are intentionally outside the machine backstop) and add representative regressions in actual allowed fields that assert the specific privacy failure. [skills/.experimental/synthesize-meeting-records/references/contracts.md:145-150, skills/.experimental/synthesize-meeting-records/scripts/lib.mjs:249-264, skills/.experimental/synthesize-meeting-records/scripts/test.mjs:363-429]
✅ 2. The provider-neutral, destination-neutral separation matches the durable raw-meeting boundary: raw records remain task-private, and this payload does not install Client/core routing or publish to the Context Tree.
✅ 3. Source provenance/status gates, exact artifact binding, chronology and settlement validation, canonical validator execution, recursive fixture integrity, descriptor-relative reads, process-tree containment, raw-monitor cleanup, and post-failure grading remain coherent on this head.
Action taken
- Submitted request changes on exact head
62e75be11c17997fca0d5ec434699b44e36df9ae. - No local tests, QA, or model-backed gate were run, per the review instructions. Exact-head CI, CodeQL, and CLA were green at submission time.
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The standalone architecture and eval hardening are coherent, but the packet validator does not enforce the promised contact-detail boundary for phone numbers.
Risk level: C
- Path baseline: the effective diff is limited to
packages/skill-evals/**andskills/.experimental/synthesize-meeting-records/**. - Semantic lift: none.
PR summary
- Goal: provide an independently installable, provider-neutral meeting-record synthesis Skill without coupling analysis to Client routing or downstream publication.
- Approach: validate normalized meeting bundles and sanitized analysis packets, with an isolated Linux/Codex executable gate for activation, semantics, privacy, source handling, and side effects.
- Core bundle/packet contracts remain destination-neutral; there is no database or installed First Tree architecture change.
Review findings
❌ 1. Enforce the promised contact-detail boundary for phone numbers and cover it through actual allowed packet fields. The contract says packet values reject contact details, separately prohibits contact details in optional attribution, and the PR body repeats that machine-enforced guarantee. scanPrivateOutput() currently detects email addresses but no phone/contact number, so strings such as Call +1 (415) 555-2671 or Owner phone 415-555-2671 can pass in reason, statement, context, attribution, or location_hint. Add a conservative phone/contact pattern with representative regressions in allowed fields that assert the specific privacy failure, or explicitly narrow the shipped contract and PR claim if phone numbers are intentionally outside the validator backstop. [skills/.experimental/synthesize-meeting-records/references/contracts.md:104-108, skills/.experimental/synthesize-meeting-records/references/contracts.md:145-150, skills/.experimental/synthesize-meeting-records/scripts/lib.mjs:230-268, skills/.experimental/synthesize-meeting-records/scripts/test.mjs:363-429]
✅ 2. The provider-neutral, destination-neutral separation remains intact: this experimental Skill is not installed into the Managed Client/core family and does not publish to a downstream destination.
✅ 3. Provenance/status gates, chronology and settlement validation, canonical validator execution, recursive fixture integrity, descriptor-relative reads, process-tree containment, raw-monitor cleanup, and post-failure grading remain coherent on this head.
Action taken
- Submitted request changes on exact head
62e75be11c17997fca0d5ec434699b44e36df9ae, superseding my approval after the new privacy-contract evidence arrived. - No local tests, QA, or model-backed gate were run, per the review instructions.
|
Resolved on exact head This follow-up enforces the existing contact-detail privacy contract without
Exact-head deterministic evidence:
No model-backed gate was run. No live meeting material or downstream system |
|
Independent exact-head finding: phone coverage remains region-specific The contact-detail fix on exact head A direct exact-head validator probe still accepted all of these allowed
The first three have explicit international prefixes and are high-confidence phone-contact shapes, so rejecting them does not require an aggressive ambiguous-number heuristic. At minimum, add a conservative international The deterministic contract suite passes on this head, but it currently proves only the newly added US examples. No model-backed gate was run. This remains a privacy-contract blocker; the Reader → standalone synthesis → optional destination boundary is otherwise unchanged. |
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The new validator closes the reported examples but still does not enforce the shipped, provider-neutral contact-detail boundary for common non-NANP and country-code phone formats.
Risk level: C
- Path baseline: the effective diff remains limited to
packages/skill-evals/**andskills/.experimental/synthesize-meeting-records/**. - Semantic lift: none.
PR summary
- Goal: provide an independently installable, provider-neutral Skill that turns exact user-supplied meeting artifacts into a sanitized, destination-neutral analysis packet.
- Approach: validate source provenance and chronology, minimize raw/private output, and exercise the contract through a standalone Linux/Codex gate without installing Client/core routing or publishing downstream.
- Core data structures:
MeetingArtifactBundleandMeetingAnalysisPacket; no database or installed First Tree architecture change.
Review findings
❌ 1. Either cover common international/country-code phone numbers or narrow the generic contact-detail guarantee. HIGH_CONFIDENCE_PHONE_NUMBER recognizes only a subset of NANP forms: for example, 1-415-555-2671 is missed because bare country code 1 is unsupported and the boundary prevents restarting at 415; clear international contacts such as +44 20 7946 0958 and +86 138 0013 8000 are also outside the pattern. Those values can still pass in every allowed field added to this regression suite, while the contract continues to say that packet values reject “contact details” and the Skill remains provider-neutral. Add conservative country-code/international coverage with positive and ordinary-number false-positive regressions, or explicitly scope the contract and PR claim to the machine-detectable formats actually enforced. [skills/.experimental/synthesize-meeting-records/scripts/lib.mjs:47-48, skills/.experimental/synthesize-meeting-records/references/contracts.md:145-150, skills/.experimental/synthesize-meeting-records/scripts/test.mjs:402-433]
✅ 2. The added tests correctly exercise the new privacy check through reason, statement, context, attribution, and location_hint, and the ordinary numeric-prose regression is useful.
✅ 3. The standalone experimental boundary and the earlier provenance, validation, filesystem, process-containment, and post-failure grading hardening remain coherent.
Action taken
- Submitted request changes on exact head
7265b6002691cf9de91d92fa64dd3725116aa601. - No local tests, QA, or model-backed gate were run, per the review instructions. Exact-head CI was still running at submission time.
|
Scope reset on exact head Per the clarified product boundary, this head removes the packet schemas, The cumulative PR diff is now only three new files and 85 lines:
The Skill owns meeting semantics only: the six output categories, chronology, Exact-head verification:
No model-backed evaluation was run, and no merge was performed. Please review |
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: approve
- Rationale: The exact cumulative diff now defines a small, coherent meeting-semantics Skill and removes the superseded packet, privacy-parser, runtime, and eval machinery that caused the earlier blockers.
Risk level: C
- Path baseline: the cumulative diff adds only
skills/.experimental/synthesize-meeting-records/**. - Semantic lift: none.
PR summary
- Goal: let a user or agent synthesize meeting records they explicitly supplied into decisions, progress, plans, actions, blockers, and risks without discovering adjacent material or publishing anywhere.
- Approach: add one provider-neutral experimental Skill that reconciles chronology and later corrections, distinguishes evidence strength from uncertainty, and leaves reading, confirmation, and downstream publication to independent workflows.
- Impacted modules:
skills/.experimental/synthesize-meeting-records/{SKILL.md,VERSION,agents/openai.yaml}only.
Review findings
✅ 1. The scope reset fully removes the packet contract and machine-enforced privacy/contact-detail claim, so the previous international-phone finding no longer applies to the current product contract.
✅ 2. The exact-source boundary, chronology and correction rules, evidence-strength distinctions, and six-category output are internally consistent without coupling the Skill to provider authorization or artifact discovery.
✅ 3. The destination-neutral boundary is explicit: the Skill performs analysis only and cannot create publication state, branches, PRs, tracked asks, schedules, or downstream writes.
✅ 4. The experimental payload remains outside the Managed First Tree Skill family and introduces no Client, core registry, first-tree-write, Context Tree topology, shared runtime, schema, or eval-harness change.
Action taken
- Approved exact head
888fd59aea4e94249bfaa8a244e52d02c4f34c73. - No local tests, QA, or model-backed evaluation were run, per the review instructions. Exact-head CI, Skill validation, CodeQL, and CLA were green at approval time.
|
Corrected to the original meeting-to-Tree objective on exact head The Skill is now
The cumulative diff remains three files / 120 lines. It introduces no schema, validator, privacy parser, scripts, model gate, shared runtime, Client/core installation, provider adapter, or Tree-writing implementation. Direct and repository Skill validation passed; repository typecheck passed 10/10; |
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The new orchestration sends member confirmation requests before applying the durable Tree-write bar, so it can create unnecessary third-party asks for content that must never enter the Context Tree.
Risk level: C
- Path baseline: the cumulative diff adds only
skills/.experimental/sync-meeting-records-to-tree/**. - Semantic lift: none.
PR summary
- Goal: let a user turn one explicitly supplied meeting record into confirmed, reviewable Context Tree updates while preserving raw transcripts outside the Tree.
- Approach: reconcile meeting chronology, map source-visible participants to First Tree members, confirm attributed or decision-bearing points, then delegate the actual source-backed Tree edit and PR/MR preparation to
first-tree-write. - Impacted modules: the experimental
sync-meeting-records-to-treeSkill payload only.
Review findings
❌ 1. Apply the durable-context filter before contacting members. The current order tells the agent to send every matched member the points attributed to them or requiring their decision, and only afterward delegates the Double Test to first-tree-write. A meeting containing ordinary status updates, temporary plans, task assignments, or transient blockers can therefore generate tracked questions to multiple people even though the following section explicitly says those facts remain in their source systems and may produce no Tree change at all. Member messages are externally visible side effects, so they should be limited to candidate facts that have already passed a preliminary durable Tree bar and genuinely require confirmation. Reorder the flow so first-tree-write/the shared Double Test identifies potential Tree-bound facts first, then confirm only those candidates (and reapply the normal write gate after replies). [skills/.experimental/sync-meeting-records-to-tree/SKILL.md:70-85, skills/.experimental/sync-meeting-records-to-tree/SKILL.md:87-100]
✅ 2. The exact-source, no-discovery, chronology, provenance, and ambiguity boundaries are clear.
✅ 3. Delegating target selection, surrounding Tree reads, verification, branch creation, and PR/MR preparation to first-tree-write avoids a second Tree writer and preserves the existing review/merge boundary.
✅ 4. Raw transcripts are explicitly kept out of the Context Tree and source repositories.
Action taken
- Submitted request changes on exact head
cabaf1e23c924982ea485dd5c4ac672853d10715. - No local tests, QA, or model-backed evaluation were run, per the review instructions. Exact-head Skill validation had passed while static analysis checks were still running.
|
Resolved the pre-confirmation durability blocker on exact head The Skill now performs, in order:
Routine progress, plans, actions, blockers, and risks are signals only, not a mandatory summary or confirmation list. Final output is limited to changed Tree nodes and PR/MR, no-write reason, and unresolved durable claims. A supplied raw transcript remains task-local per the meeting agent contract, reusing a reader-produced local file when possible; it is not duplicated unnecessarily and never enters the Tree, source repository, or parallel persistent state. The cumulative diff remains three Skill files / 132 lines. Direct and repository Skill validation, repository typecheck 10/10, |
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: approve
- Rationale: The meeting-to-Tree workflow now filters for durable context before any member-facing confirmation and cleanly delegates the actual Tree write to the existing source-backed workflow.
Risk level: C
- Path baseline: the cumulative diff adds only
skills/.experimental/sync-meeting-records-to-tree/**. - Semantic lift: none.
PR summary
- Goal: let a user turn one explicitly supplied meeting record into confirmed, reviewable Context Tree updates without importing raw transcripts or routine meeting detail into normal Tree content.
- Approach: reconcile exact sources and chronology, preliminarily apply the Double Test, confirm only unsettled durable claims with relevant members, then pass the source and replies to
first-tree-writefor normal revalidation, Tree reads, verification, and PR/MR preparation. - Impacted modules: the three-file experimental
sync-meeting-records-to-treeSkill payload only.
Review findings
✅ 1. The prior side-effect ordering blocker is resolved: the preliminary Double Test now runs before member mapping or confirmation, and routine progress, temporary plans, task lists, and transient blockers are signals only when they establish durable context.
✅ 2. Confirmation is claim-scoped and limited to unsettled durable candidates; clear human-confirmed records avoid redundant asks, while ownership or durable responsibility changes still require the affected human.
✅ 3. One unresolved claim no longer blocks independently settled candidates, and every surviving claim is revalidated by first-tree-write before any Tree change.
✅ 4. The Skill preserves exact-source/no-discovery boundaries, keeps raw meeting content out of the Tree and source repositories, and does not create a parallel reader, confirmation store, writer, review, or merge workflow.
Action taken
- Approved exact head
c881fdb4c845bf37f17ec3a2ceaafefaf352ee45. - No local tests, QA, or model-backed evaluation were run, per the review instructions. Exact-head Skill validation, CodeQL, and CLA were green; one static analysis check was still running.
|
Applied the final naming and raw-source boundary on exact head
The cumulative diff remains three files / 134 lines under Exact-head deterministic verification:
The metadata generator could not run because its optional PyYAML dependency is No model-backed evaluation was run, no live meeting material or Context Tree was |
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: approve
- Rationale: The shorter Skill trigger preserves the already-reviewed meeting-to-Tree workflow and keeps the existing reader, confirmation, and
first-tree-writeboundaries intact.
Risk level: C
- Path baseline: the cumulative diff adds only three files under
skills/.experimental/meeting-to-tree/**. - Semantic lift: none.
PR summary
- Author / repo: Gandy2025 and yuezengwu / agent-team-foundation/first-tree
- Problem: A user with exact meeting artifacts needs a guided way to promote only durable meeting context into the team's Context Tree, without turning routine notes into Tree content or creating a second write path.
- Approach: The Skill filters exact supplied sources through chronology, evidence strength, and a preliminary Double Test; confirms only unsettled durable claims; and delegates final Tree validation and PR/MR preparation to
first-tree-write. - Impacted modules:
skills/.experimental/meeting-to-tree/**.
Review findings
✅ 1. The rename is internally complete: folder name, frontmatter name, display metadata, and $meeting-to-tree default prompt agree, with no superseded Skill left in the cumulative diff.
✅ 2. The externally visible ordering remains correct: durable candidates pass the preliminary Double Test before member mapping or confirmation, and unresolved claims block only themselves.
✅ 3. The source lifecycle is narrower and clearer: the Skill reuses reader-transient content when available, creates no additional retained raw copy, and keeps raw meeting material out of the Tree, source repositories, and parallel persistent state.
✅ 4. first-tree-write remains the single owner of the final write gate, surrounding Tree reads, target selection, verification, branch, and PR/MR workflow; this Skill stops before review or merge.
Action taken
- Approved exact head
903fa4f7a19fcec50dd02d8f727bb470cae6ecef.
Decision
Add
meeting-to-treeas an experimental Skill for syncing one explicitlysupplied meeting into the Context Tree.
The Skill composes existing surfaces instead of creating a new runtime:
Feishu source uses the available Feishu reader or CLI. If the reader already
provides a transient local file, the Skill may reuse it, but the Skill does
not create or retain another raw copy.
ambiguity, then applies the Context Tree Double Test as a preliminary filter.
The candidates are durable decisions and rationale, constraints,
responsibility changes, and cross-domain relationships. Routine progress,
plans, actions, blockers, and risks are only signals when they establish one
of those candidates.
claim-level confirmation. An unresolved claim blocks only itself;
independently settled candidates continue.
meeting source bundle for the existing
first-tree-writeworkflow.first-tree-writereapplies the normal write gate and owns surrounding Treereads, target selection, verification, branch, and Tree PR or MR.
What changed
skills/.experimental/meeting-to-tree.per run, and explicit handling of missing or unordered material.
request.
decision records avoid redundant asks, while ownership or durable
responsibility changes still require the affected human.
additional raw copy solely for the Skill. Raw meeting content never enters
the Context Tree, a source repository, or parallel persistent state.
first-tree-write, thenreport changed nodes plus the PR/MR, a no-write reason, and unresolved
durable claims.
The exact cumulative PR diff contains only:
SKILL.mdVERSIONagents/openai.yamlIt adds no schema, packet contract, validator, privacy/contact/amount parser,
script, model gate,
skill-evalsruntime, Client/core-family installation,provider adapter, Context Tree topology, or new Tree-writing implementation.
It does not discover meetings, authorize providers, maintain schedules or
ledgers, dump raw transcripts or whole meeting summaries into normal Tree
content, review a Tree PR, or merge it.
Verification
python3 scripts/quick_validate_skill.py skills/.experimental/meeting-to-treepnpm validate:skillpnpm checkpassed with 16 pre-existing warnings and oneinformational diagnostic
git diff --checkNo model-backed evaluation was run. No live meeting material was read, no
Context Tree was changed, and no merge was performed.