Skip to content

fix: narrow evidence validation to ArtifactNotFoundError in propose_claim#50

Merged
plind-junior merged 3 commits into
vouchdev:testfrom
Tet-9:fix/48-evidence-validation-error-masking
May 28, 2026
Merged

fix: narrow evidence validation to ArtifactNotFoundError in propose_claim#50
plind-junior merged 3 commits into
vouchdev:testfrom
Tet-9:fix/48-evidence-validation-error-masking

Conversation

@Tet-9

@Tet-9 Tet-9 commented May 21, 2026

Copy link
Copy Markdown
Contributor

Problem

The evidence validation loop in propose_claim() caught bare Exception
on store.get_source(). Any real error — YAML parse failure, permission
error, disk I/O — was silently swallowed and fell through to
store.get_evidence(), which also failed, raising a misleading
ProposalError("unknown source/evidence id: <eid>") even when the source
existed but was corrupt or unreadable. The real cause was completely
hidden from the caller.

Fix

Narrow both except clauses from Exception to ArtifactNotFoundError.
Only a genuinely missing artifact should produce the "unknown id" error.
All other exceptions now propagate with their original type and message
intact, making corruption and permission issues immediately visible.

Also adds ArtifactNotFoundError to the imports in proposals.py.

Tests

All 54 existing tests pass. No new failure paths were introduced —
the change only affects what gets caught, not the happy path.

Fixes #48

Summary by CodeRabbit

  • Bug Fixes

    • Improved evidence validation so missing evidence is handled specially while other I/O/parse failures surface their original errors.
    • Fixed a security issue in bundle import/export that prevented path traversal by validating member paths.
    • Corrected CLI search labeling so results use the appropriate backend label and fallback matches aren’t misattributed.
  • Tests

    • Added a regression test to ensure real parse/validation errors are exposed rather than replaced by a generic message.

Review Change Stack

@coderabbitai

coderabbitai Bot commented May 21, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 72fc05de-6040-4f4d-9e66-bf27e0a2673b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

propose_claim() now imports ArtifactNotFoundError and only catches that exception during store.get_source/get_evidence; other I/O/parse errors are allowed to propagate. A regression test and three CHANGELOG entries were added.

Changes

Exception Handling Tightening

Layer / File(s) Summary
Narrow evidence validation exception handling
src/vouch/proposals.py, tests/test_cli.py, CHANGELOG.md
Import ArtifactNotFoundError and narrow the evidence/source lookup exception handling in propose_claim() to catch only ArtifactNotFoundError, attempt store.get_evidence(eid) on source-miss, and raise ProposalError only if both lookups raise ArtifactNotFoundError. Add regression test that corrupts a source meta.yaml to ensure real parse/I/O errors surface, and document three fixes in CHANGELOG.md.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • vouchdev/vouch#31: Related changes that refine propose_claim() error preservation and add CLI error translation for ProposalError display.
  • vouchdev/vouch#33: Similar update narrowing caught exceptions to ArtifactNotFoundError in verification code paths.

Poem

A rabbit reads the tiny diff tonight,
It keeps the real errors in plain sight.
Corrupt meta.yaml cannot pretend,
True parse cries reach the very end.
Hooray—no more masking, hop and write! 🐇✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: narrowing error handling from broad Exception to specific ArtifactNotFoundError in propose_claim's evidence validation.
Linked Issues check ✅ Passed The PR fully addresses issue #48 requirements: narrows exception handling from Exception to ArtifactNotFoundError in propose_claim, includes regression test verifying original errors surface, and all 102 tests pass.
Out of Scope Changes check ✅ Passed All changes are directly scoped to issue #48: CHANGELOG documentation, proposals.py error handling narrowing, and regression test for corrupt source handling. No unrelated modifications detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@plind-junior

Copy link
Copy Markdown
Member

Nice and minimal — this matches exactly what #48 asked for. Just one thing before merge:

Needs changes

  1. No regression test for the bug. The whole point of bug: propose_claim swallows I/O and parse errors in evidence validation — misleading ProposalError raised #48 is that a corrupt source no longer gets mis-reported as "unknown id". Could you add a small test that:

    • registers a source
    • manually breaks its meta.yaml (write invalid YAML to it)
    • calls propose_claim(..., evidence=[that_source_id])
    • asserts the raised error is not ProposalError("unknown source/evidence id...") — the original YAML / parse error should surface instead

    Without it this bug can regress silently.

Nice to have

  1. Worth a one-line check that the same narrowing isn't needed in any sibling code path (e.g. _resolve_evidence if it exists, or the corresponding logic in propose_page / propose_entity). If they don't do the same lookup, ignore — just flagging.

Otherwise this looks great. Happy to re-review once the test lands. Thanks! 🙏

Tet-9 added a commit to Tet-9/vouch that referenced this pull request May 21, 2026
…_claim

Asserts that a corrupt meta.yaml surfaces a real parse error rather
than being swallowed and replaced with a misleading
ProposalError('unknown source/evidence id').

Requested in review of vouchdev#50.

Fixes vouchdev#48
@Tet-9

Tet-9 commented May 21, 2026

Copy link
Copy Markdown
Contributor Author

Nice and minimal — this matches exactly what #48 asked for. Just one thing before merge:

Needs changes

  1. No regression test for the bug. The whole point of bug: propose_claim swallows I/O and parse errors in evidence validation — misleading ProposalError raised #48 is that a corrupt source no longer gets mis-reported as "unknown id". Could you add a small test that:

    • registers a source
    • manually breaks its meta.yaml (write invalid YAML to it)
    • calls propose_claim(..., evidence=[that_source_id])
    • asserts the raised error is not ProposalError("unknown source/evidence id...") — the original YAML / parse error should surface instead

    Without it this bug can regress silently.

Nice to have

  1. Worth a one-line check that the same narrowing isn't needed in any sibling code path (e.g. _resolve_evidence if it exists, or the corresponding logic in propose_page / propose_entity). If they don't do the same lookup, ignore — just flagging.

Otherwise this looks great. Happy to re-review once the test lands. Thanks! 🙏

Added the regression test — it:

  1. Registers a source
  2. Corrupts its meta.yaml with invalid YAML
  3. Calls propose_claim citing that source id
  4. Asserts the raised error is NOT ProposalError("unknown source/evidence id") — the real parse error surfaces instead

On point 2: propose_page, propose_entity, and propose_relation
don't do evidence lookups so the narrowing isn't needed there. Only
propose_claim validates evidence ids.

All 102 tests pass.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/test_cli.py`:
- Around line 92-102: The test currently swallows the intended failure because
the "assert False" inside the try is caught by the broad "except Exception",
leading to false positives; replace the try/except with a proper assertion using
pytest.raises to ensure propose_claim raises ProposalError and then assert the
error message does not contain the misleading text. Concretely, wrap the call to
propose_claim(...) in "with pytest.raises(ProposalError) as excinfo:" (ensure
pytest is imported), call propose_claim inside that context, and then assert
"unknown source/evidence id" not in str(excinfo.value); alternatively, if you
prefer keeping try/except, remove the broad "except Exception" and let
unexpected exceptions propagate so the test fails.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f7e855c4-7b7e-4f10-8a0c-de91a406f585

📥 Commits

Reviewing files that changed from the base of the PR and between a43a768 and 24119b0.

📒 Files selected for processing (1)
  • tests/test_cli.py

Comment thread tests/test_cli.py Outdated
@plind-junior

Copy link
Copy Markdown
Member

Fix conflict

Tet-9 added a commit to Tet-9/vouch that referenced this pull request May 22, 2026
…_claim

Asserts that a corrupt meta.yaml surfaces a real parse error rather
than being swallowed and replaced with a misleading
ProposalError('unknown source/evidence id').

Requested in review of vouchdev#50.

Fixes vouchdev#48
@Tet-9
Tet-9 force-pushed the fix/48-evidence-validation-error-masking branch from 24119b0 to 1b75453 Compare May 22, 2026 08:40

@coderabbitai coderabbitai 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.

♻️ Duplicate comments (1)
tests/test_cli.py (1)

92-102: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Fix false-positive exception test flow and Ruff blocker.

Line 96 (assert False) is both a lint failure (B011) and currently masked by the broad except Exception on Lines 101-102, so this test can pass when no exception is raised.

Suggested fix
-    try:
-        propose_claim(
-            store, text="some claim", evidence=[src.id], proposed_by="agent"
-        )
-        assert False, "expected an exception"
-    except ProposalError as e:
-        assert "unknown source/evidence id" not in str(e), (
-            f"real parse error was swallowed and replaced with misleading message: {e}"
-        )
-    except Exception:
-        pass  # any non-ProposalError is correct behaviour
+    with pytest.raises(Exception) as exc:
+        propose_claim(
+            store, text="some claim", evidence=[src.id], proposed_by="agent"
+        )
+    if isinstance(exc.value, ProposalError):
+        assert "unknown source/evidence id" not in str(exc.value), (
+            f"real parse error was swallowed and replaced with misleading message: {exc.value}"
+        )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_cli.py` around lines 92 - 102, The test currently uses assert
False inside a try/except and a broad except Exception that can mask a missing
exception (and triggers Ruff B011); replace the try/except with
pytest.raises(ProposalError) as excinfo around the call to propose_claim(store,
text="some claim", evidence=[src.id], proposed_by="agent") to ensure an
exception is actually raised, then assert "unknown source/evidence id" not in
str(excinfo.value) to preserve the original message check, and remove the broad
except Exception branch; reference propose_claim and ProposalError to locate the
code to change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@tests/test_cli.py`:
- Around line 92-102: The test currently uses assert False inside a try/except
and a broad except Exception that can mask a missing exception (and triggers
Ruff B011); replace the try/except with pytest.raises(ProposalError) as excinfo
around the call to propose_claim(store, text="some claim", evidence=[src.id],
proposed_by="agent") to ensure an exception is actually raised, then assert
"unknown source/evidence id" not in str(excinfo.value) to preserve the original
message check, and remove the broad except Exception branch; reference
propose_claim and ProposalError to locate the code to change.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c439e4d2-0d68-4e00-8c0e-89c5c1442345

📥 Commits

Reviewing files that changed from the base of the PR and between 24119b0 and 1b75453.

📒 Files selected for processing (3)
  • CHANGELOG.md
  • src/vouch/proposals.py
  • tests/test_cli.py
✅ Files skipped from review due to trivial changes (1)
  • CHANGELOG.md

Tet-9 added a commit to Tet-9/vouch that referenced this pull request May 22, 2026
The previous try/except pattern could pass silently if propose_claim
unexpectedly succeeded, since assert False was caught by the broad
except Exception. Replace with pytest.raises to ensure an exception
is always raised.

Suggested by CodeRabbit review of vouchdev#50.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/test_cli.py`:
- Around line 85-86: Tests currently trigger Ruff I001 due to function-local
imports; move these imports to the module scope in tests/test_cli.py. Ensure
pytest and propose_claim are imported at the top of the module (keep the
existing "import pytest" and "from vouch.proposals import propose_claim"), and
also add ProposalError to that same module-level import list (from
vouch.proposals import ProposalError, propose_claim) rather than importing
ProposalError inside any test function. This removes redundant local imports and
satisfies Ruff's import ordering/formatting rule.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 80d09407-6aaa-4e2f-a983-bb7e3c659147

📥 Commits

Reviewing files that changed from the base of the PR and between 1b75453 and c658e46.

📒 Files selected for processing (1)
  • tests/test_cli.py

Comment thread tests/test_cli.py
Comment on lines +85 to +86
import pytest
from vouch.proposals import ProposalError, propose_claim

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Move function-local imports to module scope to fix failing Ruff I001

These local imports are redundant and are currently breaking CI (ruff import formatting check). Keep pytest and propose_claim at module scope, and only add ProposalError there.

Suggested diff
 import pytest
 from click.testing import CliRunner

 from vouch.cli import cli
-from vouch.proposals import propose_claim
+from vouch.proposals import ProposalError, propose_claim
 from vouch.storage import KBStore
@@
 def test_propose_claim_corrupt_source_surfaces_real_error(store: KBStore) -> None:
     """Corrupt meta.yaml must surface a parse error, not 'unknown source/evidence id'."""
-    import pytest
-    from vouch.proposals import ProposalError, propose_claim
-
     src = store.put_source(b"evidence content")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import pytest
from vouch.proposals import ProposalError, propose_claim
def test_propose_claim_corrupt_source_surfaces_real_error(store: KBStore) -> None:
"""Corrupt meta.yaml must surface a parse error, not 'unknown source/evidence id'."""
src = store.put_source(b"evidence content")
🧰 Tools
🪛 GitHub Actions: ci / 1_test (py3.12).txt

[error] 85-86: ruff (I001) Import block is un-sorted or un-formatted. Test file has imports inside the function; organize imports or run 'ruff check src tests --fix'.

🪛 GitHub Actions: ci / 2_test (py3.11).txt

[error] 85-86: ruff check failed (I001): Import block is un-sorted or un-formatted in tests/test_cli.py. Help: Organize imports.

🪛 GitHub Actions: ci / 3_test (py3.13).txt

[error] 85-86: ruff check failed (I001): Import block is un-sorted or un-formatted. Help: Organize imports.

🪛 GitHub Actions: ci / test (py3.11)

[error] 85-86: Ruff (python -m ruff check src tests): I001 Import block is un-sorted or un-formatted. Help: Organize imports.

🪛 GitHub Actions: ci / test (py3.12)

[error] 85-86: ruff check failed (I001). Import block is un-sorted or un-formatted. Organize imports. Found 1 error.

🪛 GitHub Actions: ci / test (py3.13)

[error] 85-86: Ruff check failed (I001): Import block is un-sorted or un-formatted. Help: Organize imports.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_cli.py` around lines 85 - 86, Tests currently trigger Ruff I001
due to function-local imports; move these imports to the module scope in
tests/test_cli.py. Ensure pytest and propose_claim are imported at the top of
the module (keep the existing "import pytest" and "from vouch.proposals import
propose_claim"), and also add ProposalError to that same module-level import
list (from vouch.proposals import ProposalError, propose_claim) rather than
importing ProposalError inside any test function. This removes redundant local
imports and satisfies Ruff's import ordering/formatting rule.

Tet-9 added a commit to Tet-9/vouch that referenced this pull request May 22, 2026
Replace try/except pattern with pytest.raises(Exception) and assert
the raised exception is not a misleading ProposalError('unknown
source/evidence id'). Fixes Ruff B011 and ensures the test fails
if propose_claim unexpectedly succeeds.

Suggested by CodeRabbit review of vouchdev#50.
@Tet-9

Tet-9 commented May 22, 2026

Copy link
Copy Markdown
Contributor Author

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
🪄 Autofix (Beta)
ℹ️ Review info

Updated — replaced the try/except pattern with pytest.raises(Exception)
and assert the raised exception is not a misleading
ProposalError("unknown source/evidence id"). This ensures:

  1. The test fails if propose_claim unexpectedly succeeds
  2. A yaml.ParserError (or any non-misleading exception) passes —
    proving the real error surfaces instead of being swallowed
  3. Ruff B011 is resolved

125 tests pass.

@Tet-9

Tet-9 commented May 22, 2026

Copy link
Copy Markdown
Contributor Author

@plind-junior , ready to merge🫡

@Tet-9

Tet-9 commented May 22, 2026

Copy link
Copy Markdown
Contributor Author

ASAP 😄.... As soon as those three are merged I should pull some more issues and requests, waiting at your approval on these first 💪

@plind-junior

Copy link
Copy Markdown
Member

Fix MR conflict

1 similar comment
@plind-junior

Copy link
Copy Markdown
Member

Fix MR conflict

@plind-junior

Copy link
Copy Markdown
Member

One thing worth a second look before we merge: this branch quietly deletes test_search_fts5_backend_label and test_search_substring_backend_label, which are still living on main from the #53 search-label fix — I think they got dropped in a rebase rather than on purpose, and we'd be losing that coverage for something unrelated to #48, so could you restore them? Other than that, LGTM!

@Tet-9

Tet-9 commented May 25, 2026

Copy link
Copy Markdown
Contributor Author

One thing worth a second look before we merge: this branch quietly deletes test_search_fts5_backend_label and test_search_substring_backend_label, which are still living on main from the #53 search-label fix — I think they got dropped in a rebase rather than on purpose, and we'd be losing that coverage for something unrelated to #48, so could you restore them? Other than that, LGTM!

All right
Working on that 🫡

Tet-9 added a commit to Tet-9/vouch that referenced this pull request May 25, 2026
…_claim

Asserts that a corrupt meta.yaml surfaces a real parse error rather
than being swallowed and replaced with a misleading
ProposalError('unknown source/evidence id').

Requested in review of vouchdev#50.

Fixes vouchdev#48
Tet-9 added a commit to Tet-9/vouch that referenced this pull request May 25, 2026
The previous try/except pattern could pass silently if propose_claim
unexpectedly succeeded, since assert False was caught by the broad
except Exception. Replace with pytest.raises to ensure an exception
is always raised.

Suggested by CodeRabbit review of vouchdev#50.
Tet-9 added a commit to Tet-9/vouch that referenced this pull request May 25, 2026
Replace try/except pattern with pytest.raises(Exception) and assert
the raised exception is not a misleading ProposalError('unknown
source/evidence id'). Fixes Ruff B011 and ensures the test fails
if propose_claim unexpectedly succeeds.

Suggested by CodeRabbit review of vouchdev#50.
@Tet-9
Tet-9 force-pushed the fix/48-evidence-validation-error-masking branch from 9e8354a to 3057c3b Compare May 25, 2026 21:17
@Tet-9

Tet-9 commented May 25, 2026

Copy link
Copy Markdown
Contributor Author

@plind-junior , fixed already..... Ready to get merged 🫡

@plind-junior

Copy link
Copy Markdown
Member

PR should target test branch, not main

@Tet-9
Tet-9 changed the base branch from main to test May 26, 2026 13:36
Tet-9 added a commit to Tet-9/vouch that referenced this pull request May 27, 2026
…_claim

Asserts that a corrupt meta.yaml surfaces a real parse error rather
than being swallowed and replaced with a misleading
ProposalError('unknown source/evidence id').

Requested in review of vouchdev#50.

Fixes vouchdev#48
@Tet-9
Tet-9 force-pushed the fix/48-evidence-validation-error-masking branch from 4dfdaef to 2074297 Compare May 27, 2026 06:36
Tet-9 added a commit to Tet-9/vouch that referenced this pull request May 27, 2026
Replace try/except pattern with pytest.raises(Exception) and assert
the raised exception is not a misleading ProposalError('unknown
source/evidence id'). Fixes Ruff B011 and ensures the test fails
if propose_claim unexpectedly succeeds.

Suggested by CodeRabbit review of vouchdev#50.
@Tet-9

Tet-9 commented May 27, 2026

Copy link
Copy Markdown
Contributor Author

PR should target test branch, not main

Already fixed, but there's a blocker about the ci;
Rebased onto vouchdev:test — no conflicts, 3 clean commits. All 184
tests pass locally with the exact CI config (pip install -e '.[dev]',
ruff check, mypy, pytest --cov). The 3 CI failures may need
workflow approval from a maintainer since this is our first push
targeting the test branch.

@plind-junior

Copy link
Copy Markdown
Member

Fix ci

Tet-9 added 3 commits May 27, 2026 23:33
…laim

Bare except Exception on store.get_source() silently swallowed real
I/O and parse errors, masking them as a misleading
ProposalError('unknown source/evidence id'). Narrowing both except
clauses to ArtifactNotFoundError lets genuine errors propagate with
their original type and message intact.

Fixes vouchdev#48
Replace try/except pattern with pytest.raises(Exception) and assert
the raised exception is not a misleading ProposalError('unknown
source/evidence id'). Fixes Ruff B011 and ensures the test fails
if propose_claim unexpectedly succeeds.

Suggested by CodeRabbit review of vouchdev#50.
@Tet-9
Tet-9 force-pushed the fix/48-evidence-validation-error-masking branch from 2074297 to a0ee15c Compare May 27, 2026 22:41
@Tet-9

Tet-9 commented May 27, 2026

Copy link
Copy Markdown
Contributor Author

Fix ci

Thanks for pointing that out.
It's fixed now 🫡

@plind-junior
plind-junior merged commit 6c98431 into vouchdev:test May 28, 2026
5 checks passed
@igeabdulrahmanikeoluwa-str

Copy link
Copy Markdown

Excuse me, but why is the issue number 48 that was supposed to be closed by this pr still opened, just curious

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.

bug: propose_claim swallows I/O and parse errors in evidence validation — misleading ProposalError raised

3 participants