Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
47d4e89
test: define full-text write admission and authority ordering
seonghobae Sep 6, 2026
d36dad8
feat: bind full-text write admission to both verified authorities
seonghobae Sep 6, 2026
79e1c22
test: require bound full-text rollback and reconciliation
seonghobae Sep 6, 2026
425fb8c
feat: preserve full-text authority through conditional recovery
seonghobae Sep 6, 2026
bdf55bf
test: cover unresolved full-text recovery and opaque admission
seonghobae Sep 6, 2026
06b2771
docs: record full-text write and recovery evidence and remaining gates
seonghobae Sep 6, 2026
f4866e9
docs: record normal successor publication after API reset
seonghobae Sep 6, 2026
6cefb4f
docs: reconcile capability baseline and canonical owner issue kinds
seonghobae Sep 6, 2026
3acd93f
docs: trace statistical owners and unresolved orchestration release
seonghobae Sep 6, 2026
789637f
docs: record statistical audit verification without runtime promotion
seonghobae Sep 6, 2026
e300eb8
test: preserve unresolved original write observation contract
seonghobae Sep 6, 2026
dcc3631
feat: retain read-only evidence for indeterminate full-text writes
seonghobae Sep 6, 2026
77e8dce
docs: distinguish original-write inspection from recovery authority
seonghobae Sep 6, 2026
b645d6a
docs: record canonical source observation repair evidence
seonghobae Sep 6, 2026
1444c44
docs(research): audit relationship evidence owners
seonghobae Sep 6, 2026
ec14353
docs(research): record exact audit verification
seonghobae Sep 6, 2026
e1407d6
merge(research): inherit bounded metadata reads into PR #39
seonghobae Sep 6, 2026
cbc9121
docs(research): record deadline cascade and pending remote gate
seonghobae Sep 6, 2026
ffccc06
docs(research): distinguish completed propagation from remaining gates
seonghobae Sep 6, 2026
15d755d
docs(zotero): record local revision repair and pending propagation
seonghobae Sep 6, 2026
55b1d91
docs(zotero): reconcile live and visual library scope
seonghobae Sep 6, 2026
22a29c1
docs(research): reconcile visual audit and pushed PR evidence
seonghobae Sep 6, 2026
6779fc4
docs(research): track complete source inventory and admission gaps
seonghobae Sep 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ ConceptWeave owns automatic, evidence-bound **Semantic Model Engineering**. Do n
- Full-text review views are read-only evidence; never strip their outer binding into a metadata-only patch and claim full-text decision or approval provenance.
- Full-text decisions use the separate blank-start worksheet and atomic exact-view application; reverify the capture/report relation through finalization and whole-envelope governance. No reviewed-set downcast grants Zotero write authority.
- Offline full-text commands reuse the private-file boundary and pass completed-view bytes unchanged into atomic validation. Finalized files await external approval verification; no CLI command issues approval or writes Zotero.
- Full-text writes require a complete typed review, explicit destinations and mode; finish both local validation paths before real authority verification. Keep scope bindings through opaque execution/recovery receipts. Unknown original writes cannot become empty successful rollbacks, and serialized audit files are not executable authority.
- Delayed original-write observations retain the exact submitted request and complete earlier receipt; matching metadata does not prove causal completion or authorize retry/rollback.
- Published semantic truth is immutable; correction uses supersession/new release.
- Public Rust APIs require beginner-readable documentation.
- Owned production coverage target is 100% line/function/region/branch where tooling exposes it.
Expand Down
4 changes: 4 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ The separate Full-Text Review Worksheet starts blank and retains one capture ide

## Aggregate boundaries

Full-Text Write Scope belongs to Research Intake and combines a complete capture-bound semantic review with independently authorized explicit metadata replacements and mode. Existing local validation is composed before either authority verifier. The admitted plan is opaque; bound execution and recovery wrappers reuse the existing conditional Local API cores, with no legacy-plan or free inverse-operation projection. Versioned scope commitments preserve the complete input identity without copying source text into receipts. The scope is not published semantic truth or an approval issuer. Audit serialization cannot restore executable authority; durable recovery and independently unknown original-write reconciliation remain explicit gaps.

An Original Write Observation is a read-only audit projection inside this same context. It retains the opaque original receipt and exact submitted preconditions beside one later unverified response. It cannot clear uncertainty, prove request completion or enter execution/recovery as authority. The existing executor remains the sole mutation path.

### SemanticCandidate

Smallest consistency boundary for a single proposed semantic artifact and its evidence-bound publication state. It cannot jump directly from Draft to Published.
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ All notable changes to ConceptWeave are documented here.

### Added

- Research inventory now separates message ancestry, data changes and work dependencies from reviewed semantic relationships, with release limits and owner follow-up evidence.

- Unresolved changes can be inspected again without resending them or losing the original outcome. Later observations do not authorize retry or recovery.

- Research inventory now distinguishes three additional statistical-library candidates from adopted integrations and reviewed papers, with source-bound limitations and follow-up requirements.

- Full-text-reviewed changes can now carry separately verified destination and execution approval through the local write and recovery workflow. Unknown writes remain unresolved until their state is proven; no command issues approval or changes the live library.

- Private review commands now show saved text, accept completed decisions without replacing earlier work, and prepare a complete review for independent approval verification. They do not supply decisions or approve a review.

- Private inspection of pending papers alongside their saved text, preserving missing material and leaving previous reports and decisions unchanged.
Expand Down
4 changes: 4 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,7 @@ Zotero source capture must not alter the metadata report or renew its approval.
The separate full-text review view does not authorize decisions or writes. Keep its evidence binding intact; existing metadata-only apply/finalization cannot establish full-text-reviewed approval.

Use the capture-bound blank-start worksheet for full-text decision work. Only the dedicated atomic view path may apply completed slots; finalization/evaluation reverify capture/report bindings and require whole-envelope external approval. Offline CLI view/application/finalization preserve that envelope and earlier files. They do not supply a reviewer, authenticate approval, or admit Zotero writes.

The separate typed full-text write boundary additionally requires explicit destinations and mode verified against independent write authority, after all local checks. Keep the complete approved scope on the opaque plan and the same versioned commitment on every execution and recovery outcome. Do not extract legacy plans or mix inverse operations, restore authority from audit JSON, or call an unknown original write restored through empty rollback. No live-write CLI or approval issuer is introduced.

Delayed original-write inspection preserves the actual submitted request and complete earlier receipt. Its later response is unverified evidence, even when metadata matches; it never clears uncertainty or grants retry/rollback authority.
3 changes: 3 additions & 0 deletions crates/conceptweave-zotero/src/full_text_capture_tests.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
use super::*;
use crate::{StewardReviewWorksheet, ZoteroItem, classify_snapshot};

#[path = "full_text_write_tests.rs"]
mod full_text_write_tests;

fn completed_full_text_view(
report: &ClassificationReport,
worksheet: &FullTextReviewWorksheet,
Expand Down
28 changes: 21 additions & 7 deletions crates/conceptweave-zotero/src/full_text_review.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
use super::*;
use crate::StewardReviewWorksheet;

#[path = "full_text_write.rs"]
mod full_text_write;
pub use full_text_write::*;

/// Independently issued approval input for one full-text review context.
/// The issuer must bind the complete reviewed labels as well as this capture.
#[derive(Deserialize, Serialize)]
Expand Down Expand Up @@ -168,19 +172,29 @@ pub fn evaluate_full_text_review<F>(
where
F: FnOnce(&FullTextReviewedGoldenSet) -> bool,
{
validate_review_capture(report, capture, &reviewed.capture_digest)?;
let review_evaluation = crate::evaluate_complete_reviewed_classification(
report,
&reviewed.reviewed_golden_set,
|_| verify_approval(reviewed),
)
.map_err(|_| FullTextError("full-text review is invalid or unverified"))?;
let review_evaluation = prepare_full_text_review(report, capture, reviewed)?;
if !verify_approval(reviewed) {
return Err(FullTextError("full-text review is invalid or unverified"));
}
Ok(FullTextReviewEvaluation {
capture_digest: reviewed.capture_digest.clone(),
review_evaluation,
})
}

fn prepare_full_text_review(
report: &ClassificationReport,
capture: &FullTextCapture,
reviewed: &FullTextReviewedGoldenSet,
) -> Result<crate::GoldenSetEvaluation, FullTextError> {
validate_review_capture(report, capture, &reviewed.capture_digest)?;
if reviewed.reviewed_golden_set.labels.len() != report.classified_items.len() {
return Err(FullTextError("full-text review is invalid or unverified"));
}
crate::prepare_reviewed_golden_set(report, &reviewed.reviewed_golden_set)
.map_err(|_| FullTextError("full-text review is invalid or unverified"))
}

fn validate_review_capture(
report: &ClassificationReport,
capture: &FullTextCapture,
Expand Down
Loading