Skip to content

feat(analysis): bind relation-absence refusals to an analysis-run profile - #460

Draft
seonghobae wants to merge 7 commits into
feat/copy-identity-analysis-run-gap-004from
feat/relation-absence-analysis-run-gap-004
Draft

feat(analysis): bind relation-absence refusals to an analysis-run profile#460
seonghobae wants to merge 7 commits into
feat/copy-identity-analysis-run-gap-004from
feat/relation-absence-analysis-run-gap-004

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Consolidation status

fold_into_landing_vehicle — this profile targets #416 (feat/copy-identity-analysis-run-gap-004), not protected main. The comparison base has been refreshed non-destructively to the live #416 exact head 0b7155cc238defb1e55129ff3000658f04b343cf. GitHub still reports mergeable=false, so the remaining work is a real conflict-resolving fold of shared Cargo/lib/lock/docs surfaces, not a stale-base restack and not permission to land independently.

Preserve cutoff-safe relation_absence_v1 execution, digest-bound census, observed/inferred presence versus unobserved refusal semantics, MAX_EVIDENCE_UNITS execution/artifact bounds, metric-free inspect behavior, profile/snapshot/cutoff mismatch refusals, focused tests, and doctoring. ADR 0071 is implementation lineage pending #437 normalization, not independent architecture authority.

RED -> repair evidence

  • RED 8c6c6865e5e8ec3625e792b4c7e17c556fc4d042 / repair 6b280c31687d83f35f7d5b2910266a706514ba39: impossible compact artifact counts above MAX_EVIDENCE_UNITS fail parse and serialization validation.
  • RED aaeab0a8825ee78bb76f09329fe24cb8bf7a8341 / repair 38873c326bb86ca14c3e791cabe3993c1ccbc434: equivalent RFC 3339 spellings of one cutoff compare as typed KnowledgeCutoff::instant() values.
  • RED ce161e089938bcc4caceaf261478d1ea65178be6 / repair dfab4eab5ff733731e565a9348072b8dab2e4912: the domain inference claim stays in RelationAbsenceArtifact.inference_status; terminal summary.validation_status is "validated".

Current exact source head: dfab4eab5ff733731e565a9348072b8dab2e4912. Source/test lineage is preserved, but child-head workflows are not merge evidence for the eventual #416 surviving head.

Next safe action

Fold the repaired unique source/tests/doctoring into the live #416 head while resolving shared Cargo/lib/lock/docs surfaces. Only the resulting landing head's exact workflows and qualifying independent review count.

…file

GAP-004 leftover / ADR 0071. Bind existing ObservationStatus and
refuse_absence_as_negative to cutoff-safe relation_absence_v1
(tepp.relation_absence.v1). Mixed observed/inferred/unobserved census,
AvailableTime cutoff exclusion, and MAX_EVIDENCE_UNITS fail closed.
status_recovery_rate stays library-side. Distinct from outcome-order,
membership-target, location-membership, copied-text, and copy-identity.
@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Operator-visible GAP-004 leftover / ADR 0071. Binds existing relation_absence::ObservationStatus + refuse_absence_as_negative to relation_absence_v1 (tepp.relation_absence.v1). Inference unobserved_is_not_negative_observed_inferred_are_presence. AvailableTime cutoff exclusion and MAX_EVIDENCE_UNITS enforced. status_recovery_rate stays library-side. no_relationship is not a wire status. Distinct from #458 outcome-order, #434 membership-target, #430 location-membership, #427 copied-text, and #416 copy-identity. Author COMMENT is not independent APPROVE. Two independent current-head APPROVEs required. Exact-head Checks on eedbc0a only. Do not self-approve.

Copy link
Copy Markdown
Contributor Author

Hour-37 shipped this slice. Head eedbc0a. Author review is COMMENT not APPROVE. Two independent current-head APPROVEs required. Exact-head Checks on eedbc0a only. Do not self-approve. @opencode-agent review.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Devin Review

|| !valid_identifier(&self.run_id)
|| !valid_identifier(&self.snapshot_id)
|| KnowledgeCutoff::parse_rfc3339(&self.knowledge_cutoff).is_err()
|| self.pair_count < 3

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Oversized imported censuses pass validation

RelationAbsenceArtifact::validate accepts consistent counts above MAX_EVIDENCE_UNITS. Imported artifacts can claim censuses that the executor always rejects.

Prompt for agents
Enforce the execution corpus bound while validating RelationAbsenceArtifact in crates/analysis_engine/src/relation_absence_artifact.rs. Reject pair_count values above MAX_EVIDENCE_UNITS, which also bounds each component because the validated components sum to pair_count. Add round-trip/tampering coverage for a count-consistent artifact above the limit.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant