Fix #115: Unify aep-record to a single aep/v0.3 — two consumers have forked it in conflicting ways - #119
Conversation
…forked it in conflicting ways
SummaryAdditive, backward-compatible schema bump to aep/v0.3 with new optional fields, signature kept explicitly optional, and matching valid/invalid fixtures; no breaking changes. Severitylow Blocking findings
Verdict✅ Approved Merge risklow Audit
{
"approved": true,
"severity": "low",
"summary": "Additive, backward-compatible schema bump to aep/v0.3 with new optional fields, signature kept explicitly optional, and matching valid/invalid fixtures; no breaking changes.",
"findings": [
{
"file": "schemas/aep/aep-record.schema.json",
"line": 197,
"issue": "argument_drift sets additionalProperties: true, allowing unvalidated keys inside an otherwise-structured object; consider whether open extensibility is intended or if it should be constrained.",
"kind": "suggestion"
}
],
"merge_risk": "low",
"Model": "opus",
"model": "claude-cli",
"effort": "high",
"tokens": {
"input_tokens": 0,
"output_tokens": 0
},
"same_verdict_count": 1
} |
|
Merge gate failed: |
SummaryClean additive schema bump to aep/v0.3: new optional fields, backward-compatible enum widening (aep/v0.1 and aep/v0.2 still accepted), signature explicitly kept optional, plus matching valid/invalid fixtures; no blockers found. Severitylow Blocking findings
Verdict✅ Approved Merge risklow Audit
{
"approved": true,
"severity": "low",
"summary": "Clean additive schema bump to aep/v0.3: new optional fields, backward-compatible enum widening (aep/v0.1 and aep/v0.2 still accepted), signature explicitly kept optional, plus matching valid/invalid fixtures; no blockers found.",
"findings": [
{
"file": "schemas/aep/aep-record.schema.json",
"line": 175,
"issue": "The side_effect_class enum is duplicated verbatim in run_side_effect_class_max (line 180); the PR's stated goal is one shared vocabulary, so extracting both into a $defs/$ref would prevent the two copies from drifting later.",
"kind": "suggestion"
},
{
"file": "schemas/aep/aep-record.schema.json",
"line": 165,
"issue": "New fields are documented as 'aep/v0.3+' but the schema has no if/then gating, so a v0.1/v0.2 record carrying user_id/side_effect_class would also validate; adding a fixture that proves an older-version record still passes with these fields omitted would lock in the additive-only intent.",
"kind": "suggestion"
},
{
"file": "tests/fixtures/valid/aep-record/v0.3-fields.json",
"line": 11,
"issue": "Valid fixture sets side_effect_class=mutate-external while run_side_effect_class_max=network-egress, which is an inconsistent ordering relative to the enum's implied severity; consider a fixture where the per-run max actually dominates the per-record value to document the intended semantics.",
"kind": "suggestion"
}
],
"merge_risk": "low",
"Model": "opus",
"model": "claude-cli",
"effort": "high",
"tokens": {
"input_tokens": 0,
"output_tokens": 0
},
"same_verdict_count": 2
} |
|
Merge gate failed: |
SummaryClean additive, backward-compatible schema evolution to aep/v0.3 with new optional fields, retained v0.1/v0.2 acceptance, signature kept optional, and matching valid/invalid fixtures. Severitynone Blocking findingsNone. Verdict✅ Approved Merge risklow Audit
{
"approved": true,
"severity": "none",
"summary": "Clean additive, backward-compatible schema evolution to aep/v0.3 with new optional fields, retained v0.1/v0.2 acceptance, signature kept optional, and matching valid/invalid fixtures.",
"findings": [],
"merge_risk": "low",
"Model": "opus",
"model": "claude-cli",
"effort": "high",
"tokens": {
"input_tokens": 0,
"output_tokens": 0
},
"same_verdict_count": 3
} |
|
Merge gate failed: |
SummaryBackward-compatible additive schema bump to aep/v0.3: new optional fields, version bumps, and matching valid/invalid fixtures; no blockers. Severitylow Blocking findings
Verdict✅ Approved Merge risklow Audit
{
"approved": true,
"severity": "low",
"summary": "Backward-compatible additive schema bump to aep/v0.3: new optional fields, version bumps, and matching valid/invalid fixtures; no blockers.",
"findings": [
{
"file": "schemas/aep/aep-record.schema.json",
"line": 180,
"issue": "run_side_effect_class_max is described as 'the highest side-effect class observed' but the shared enum has no documented severity ordering, so consumers cannot deterministically compute a max across records; consider documenting the rank (e.g. read \u003c mutate-local \u003c mutate-external \u003c network-egress).",
"kind": "suggestion"
},
{
"file": "schemas/aep/aep-record.schema.json",
"line": 198,
"issue": "argument_drift uses additionalProperties: true, allowing arbitrary extra keys in canonical evidence; if this field is meant to be part of the contract, consider tightening to false while it is still new.",
"kind": "suggestion"
}
],
"merge_risk": "low",
"Model": "opus",
"model": "claude-cli",
"effort": "high",
"tokens": {
"input_tokens": 0,
"output_tokens": 0
},
"same_verdict_count": 4
} |
|
Merge gate failed: |
SummaryClean additive aep/v0.3 schema bump: all new fields optional, aep/v0.1/v0.2 still accepted, signature stays optional, and valid/invalid fixtures cover each new field. Severitylow Blocking findings
Verdict✅ Approved Merge risklow Audit
{
"approved": true,
"severity": "low",
"summary": "Clean additive aep/v0.3 schema bump: all new fields optional, aep/v0.1/v0.2 still accepted, signature stays optional, and valid/invalid fixtures cover each new field.",
"findings": [
{
"file": "schemas/aep/aep-record.schema.json",
"line": 180,
"issue": "run_side_effect_class_max is described as the 'highest' side-effect class observed, implying the enum is severity-ordered, yet 'unknown' is listed last (after 'network-egress'), which would make 'unknown' the most severe value; consider documenting the ordering or relocating 'unknown' so the per-record and per-run fields share an unambiguous rank.",
"kind": "suggestion"
}
],
"merge_risk": "low",
"Model": "opus",
"model": "claude-cli",
"effort": "high",
"tokens": {
"input_tokens": 0,
"output_tokens": 0
},
"same_verdict_count": 5
} |
|
Merge gate failed: |
SummaryClean additive schema bump to aep/v0.3 with optional fields, consistent version bumps, and valid/invalid fixtures; no breaking changes, secrets, or CI weakening. Severitylow Blocking findings
Verdict✅ Approved Merge risklow Audit
{
"approved": true,
"severity": "low",
"summary": "Clean additive schema bump to aep/v0.3 with optional fields, consistent version bumps, and valid/invalid fixtures; no breaking changes, secrets, or CI weakening.",
"findings": [
{
"file": "schemas/aep/aep-record.schema.json",
"line": 180,
"issue": "side_effect_class and run_side_effect_class_max declare the same enum literal (read/mutate-local/mutate-external/network-egress/unknown) inline; if a new class is added to one and not the other they will silently drift despite the description claiming a shared vocabulary. Consider extracting to a $defs entry and $ref-ing both.",
"kind": "suggestion"
},
{
"file": "tests/fixtures/valid/aep-record/v0.3-fields.json",
"line": 9,
"issue": "run_side_effect_class_max is documented as the 'highest' class observed across the run, but the fixture pairs side_effect_class 'mutate-external' with a max of 'network-egress' while the schema defines no ordering over the enum values; clarify the intended rank or align the example so the aggregate is consistent with the per-record value.",
"kind": "suggestion"
}
],
"merge_risk": "low",
"Model": "opus",
"model": "claude-cli",
"effort": "high",
"tokens": {
"input_tokens": 0,
"output_tokens": 0
},
"same_verdict_count": 6
} |
|
Merge gate failed: |
SummaryAdditive, backward-compatible aep/v0.3 schema bump to 0.1.7 with consistent versioning across package.json/pyproject.toml/README/index.json and full valid/invalid fixture coverage; no blockers. Severitylow Blocking findings
Verdict✅ Approved Merge risklow Audit
{
"approved": true,
"severity": "low",
"summary": "Additive, backward-compatible aep/v0.3 schema bump to 0.1.7 with consistent versioning across package.json/pyproject.toml/README/index.json and full valid/invalid fixture coverage; no blockers.",
"findings": [
{
"file": "schemas/aep/aep-record.schema.json",
"line": 188,
"issue": "argument_drift declares no required sub-properties and sets additionalProperties: true, so an empty object {} validates as 'drift detected' with no drift payload; consider requiring at least tool_name/actual_digest when the field is present.",
"kind": "suggestion"
},
{
"file": "schemas/aep/aep-record.schema.json",
"line": 178,
"issue": "run_side_effect_class_max implies an ordering ('highest side-effect class observed') over an enum whose severity order is implicit and interrupted by 'unknown'; the per-record vs per-run max relationship cannot be enforced in-schema, so the ordering/unknown handling should be documented for consumers.",
"kind": "suggestion"
}
],
"merge_risk": "low",
"Model": "opus",
"model": "claude-cli",
"effort": "high",
"tokens": {
"input_tokens": 0,
"output_tokens": 0
},
"same_verdict_count": 7
} |
|
Merge gate failed: |
SummaryAdditive, backward-compatible aep/v0.3 bump with new optional fields, matching valid/invalid fixtures, and no public API break; only minor schema-design suggestions. Severitylow Blocking findings
Verdict✅ Approved Merge risklow Audit
{
"approved": true,
"severity": "low",
"summary": "Additive, backward-compatible aep/v0.3 bump with new optional fields, matching valid/invalid fixtures, and no public API break; only minor schema-design suggestions.",
"findings": [
{
"file": "schemas/aep/aep-record.schema.json",
"line": 178,
"issue": "run_side_effect_class_max is described as the 'highest' side-effect class, but the shared enum lists 'unknown' last, implying it is the maximum severity; the ordering used to compute 'max' is neither documented nor constrained in the schema.",
"kind": "suggestion"
},
{
"file": "schemas/aep/aep-record.schema.json",
"line": 188,
"issue": "argument_drift sets additionalProperties: true with no required inner fields, allowing arbitrary or empty payloads in an evidence record; consider tightening.",
"kind": "suggestion"
}
],
"merge_risk": "low",
"Model": "opus",
"model": "claude-cli",
"effort": "high",
"tokens": {
"input_tokens": 0,
"output_tokens": 0
},
"same_verdict_count": 8
} |
|
Merge gate failed: |
SummaryAdditive, backward-compatible aep/v0.3 schema bump with consistent version bumps across package.json/pyproject.toml/index.json and matching valid/invalid fixtures; no blockers. Severitylow Blocking findings
Verdict✅ Approved Merge risklow Audit
{
"approved": true,
"severity": "low",
"summary": "Additive, backward-compatible aep/v0.3 schema bump with consistent version bumps across package.json/pyproject.toml/index.json and matching valid/invalid fixtures; no blockers.",
"findings": [
{
"file": "schemas/aep/aep-record.schema.json",
"line": 181,
"issue": "run_side_effect_class_max is described as 'the highest side-effect class observed', implying an ordinal ranking over the shared enum, but no field documents that ranking (e.g. where 'unknown' sits relative to 'network-egress'), leaving aggregation semantics ambiguous for consumers; consider documenting the severity order or renaming to avoid the implicit max.",
"kind": "suggestion"
}
],
"merge_risk": "low",
"Model": "opus",
"model": "claude-cli",
"effort": "high",
"tokens": {
"input_tokens": 0,
"output_tokens": 0
},
"same_verdict_count": 9
} |
Fixes #115
Generated by claude-bot-go worker.