Define acquisition eligibility policy v0.1 #54
No reviewers
Labels
No labels
area/deployment
area/governance
area/metadata
area/pipeline
area/search
type/data
type/design
type/implementation
type/testing
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Arkive/arkive!54
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/issue-43-acquisition-eligibility"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
docs/acquisition-eligibility.md, turning ADR-0002's architecture decision into an operational policy for deciding whether a source may be offered as a user-side acquisition target.Deliverables
governance/ordocs/docs/acquisition-eligibility.mdAcceptance criteria
user_acquirableon any required undetermined result, on an unjustified or misappliednot applicable, and on a mode change since review, and states there is no default-permit path; Section 9.1 reverts expired determinations tocatalog_onlyautomatically rather than pending re-review.Verification
git diff --checkpython pipeline/validate/validate_records.py— PASS, 6 sources, 6 documents, 2 chunkspython -m unittest discover -s tests -v— 21 tests passingpython -m ruff check src pipeline testspython -m ruff format --check src pipeline testsScope confirmation
Correction applied after review
The review correctly identified an internal inconsistency. Section 3 permitted only three result values and blocked eligibility on any undetermined result, while Section 4 exempted some dimensions for manual import and Section 8 allowed
not applicable. A manual-only target had no consistent value for its exempt dimensions, which would have made the Issue #44 schema ambiguous.Applied in
14d7de4:not applicableis now an explicit fourth result value, permitted only where Section 4 exempts the dimension for the selected mode and only with a recorded rationale. It is defined as a positive determination and as mode-bound, so a missing answer isundeterminedand a change of acquisition mode invalidates everynot applicableresult.undeterminedresult in a dimension required for the selected acquisition mode blocksuser_acquirable. Section 6 additionally fails closed on an unjustifiednot applicable, onnot applicablerecorded for a required dimension, and on a mode change since review.undetermined.One related gap the review did not name was fixed alongside it, since it is the same ambiguity: what a
not permittedresult does. It now makes that mode unavailable rather than the target ineligible, so a target that cannot be automated may still qualify for manual import, and a target with no qualifying mode iscatalog_only. Section 3.1 remains the stated exception.The branch has been updated from
developfollowing PR #53, and the complete validation baseline was rerun clean afterwards.Points for reviewer attention
Manual import does not require automation permission or, in most cases, service-terms review. This is the most substantive judgement in the document. The reasoning in Section 4.1 is that Arkive retrieves nothing in that mode, so terms governing retrieval do not bind Arkive's conduct — while terms governing the user's use of the file still apply and are surfaced to them. If that reasoning is wrong, Section 4.1 is where it is wrong.
The four states are derived outcomes rather than a new hand-set status field. They are explicitly not to be collapsed with
review_statusorlicense.status, consistent with how the intake workflow keeps its dimensions orthogonal. Machine representation is deferred to #44 rather than guessed at here.Jurisdiction is user-declared configuration, and IP geolocation is explicitly rejected as a legal control (Section 7, rule 4). This constraint was not in the issue text. It is included because the alternative tends to get built by default, and geolocation is unreliable for travellers and VPN users, trivially wrong at borders, and privacy-invasive. If Arkive wants geolocation as a convenience default rather than a control, that should be stated deliberately.
Section 8 states that an automated suggestion identifies a candidate and is never evidence. This closes the gap where a plausible-looking model-generated licence claim could be recorded as though it were an authoritative source. It does not prevent using automated tools to find candidates; it prevents their output from satisfying an evidence requirement.
Section 11 is deliberately a list of open questions rather than answers. The policy is written to be conservative in their absence, and says so. It should not be read as having resolved them.
Linked issue
Closes #43
Review — one correction required before merge
This is a strong implementation of Issue #43 and the overall policy structure is correct. It covers the required eligibility dimensions, source states, hard boundaries, jurisdiction handling, evidence requirements, re-review, emergency withdrawal, legal-review questions, and the distinction between manual import and automated acquisition.
I found one internal consistency issue that should be corrected before merge:
Section 3 says every review dimension resolves only to
permitted,not permitted, orundetermined, and that anyundeterminedresult preventsuser_acquirable.However:
not applicable.This leaves manual-only eligibility without a consistent result value and would make the downstream Issue #44 schema ambiguous.
Please update the policy so that:
not applicableis an explicitly defined result, allowed only where the selected acquisition mode does not require that dimension and accompanied by a recorded rationale; andundeterminedresult in a dimension required for the selected acquisition mode blocksuser_acquirable.The PR description and commit summary should likewise say “any required undetermined result” rather than “any undetermined result.”
The branch is also one commit behind
developfollowing PR #53. Please update it fromdevelopand rerun the complete validation baseline after making the correction.Once those changes are made and validation remains clean, I expect this PR to be ready for approval.
Correction applied in
14d7de4. The finding was right: a manual-only target had automation permission sitting atundetermined, and section 6's blanket rule would have blocked it, contradicting section 4.1. There was no result value meaning "not required in this mode".1.
not applicableis now an explicit fourth result value. Section 3 carries a table ofpermitted,not permitted,not applicable, andundetermined, withnot applicableallowed only where section 4 exempts the dimension for the selected mode and only with a recorded rationale. Two constraints are stated: it is a positive determination rather than an omission, so a missing answer isundetermined; and it is mode-bound, so changing the acquisition mode invalidates everynot applicableresult and forces re-evaluation.2. Only a required
undeterminedblocks. Section 3 and section 6 both now say "any dimension required for the selected acquisition mode". Section 6 additionally fails closed on an unjustifiednot applicable, onnot applicablerecorded for a dimension section 4 requires, and on a mode change since review.3. Sections 4.1 and 4.2 now list required, exempt, and non-blocking dimensions explicitly, and 3.4 and 3.5 carry their manual-import treatment inline. 3.5 is exempt only where the terms govern retrieval alone; where they also govern the user's possession, processing, or onward use, it stays required, since those obligations survive the download.
4. Section 8's checklist and section 13's summary are aligned, and a blank answer is read as
undetermined.Wording updated in the PR description and in the new commit message to "any required undetermined result".
One related gap fixed alongside it, since it is the same ambiguity and would have reached #44 the same way: the policy never said what a
not permittedresult does. It now makes that mode unavailable rather than the target ineligible — a target that cannot be automated may still qualify for manual import, and a target with no qualifying mode iscatalog_only. Section 3.1 remains the stated exception, wherenot permittedis the normal case and blocks nothing.Branch updated from
developfollowing PR #53, merged rather than rebased so the pushed history stays intact. The complete baseline was rerun afterwards and is clean:git diff --check, validator PASS on 6 sources, 21 unit tests passing,ruff check, andruff format --check. I also swept every occurrence ofundeterminedin the document to confirm none remains unqualified.Ready for another look.