Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ All notable changes to OriginWeave are documented in this file. The format follo
- Refreshed the product-gap queue to 126 open pull requests (54 ready, 72 draft) after #190, #188, #185, #192, #182, #184, #115, #181, #116, #117, #118, #183, #114, #127, #112, #109, #186, #110, #108, #111, #174, and #113 were merged into their immediate stacked prerequisites. PRs #147, #146, #145, #144, #143, #142, #141, #139, #136, #132, #129, and #128 moved to ready after exact-head checks and thread review; these are queue-consolidation results, not protected-main shipment.

### Added
- Added international UTF-8 release-limitation regressions that preserve exact 1024-byte claim and consequence text and reject adjacent 1025-byte inputs with exact errors. Independent literal boundaries and isolated mutations verify test sensitivity; production validation and release authority are unchanged.
- Corrected the 2026-08-26 product-gap snapshot with current #229 presentation-identity evidence, stacked-only #205 integration evidence, current base/head pairs, the 126-PR queue count, explicit root-versus-child merge ordering, and the active GitHub counted-approval gate.
- Refreshed the product and technical gap baseline onto the 2026-08-26 live inventory: 126 open pull requests (54 ready, 72 draft), protected-main promotion of #168/#194/#196/#216/#151, a verified maintenance-loop record (supersession closure of #153, conflict reconciliations on #37/#149/#152/#173/#175, issue #212 option-(b) authorization on #43, Strix vuln-0001 homoglyph remediation on #124), provider-rerun outcome evidence, an organization review-pipeline congestion record, and refreshed merge-order queue guidance. Documentation evidence contracts were aligned to the same snapshot so the baseline, its dated markers, and the pinned exact-head rows cannot silently diverge.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
use originweave_core::release_acceptance::{
DeclaredLimitation, MAX_RELEASE_LIMITATION_TEXT_BYTES, ReleaseDecisionError,
};

#[test]
fn international_claim_preserves_exact_1024_bytes_and_rejects_1025()
-> Result<(), ReleaseDecisionError> {
assert_eq!(MAX_RELEASE_LIMITATION_TEXT_BYTES, 1024);
let exact = format!("{}x", "가".repeat(341));
assert_eq!(exact.len(), 1024);
let consequence = "지원 범위를 설명하는 구매자 안내";
let limitation = DeclaredLimitation::new(&exact, consequence)?;
assert_eq!(limitation.unsupported_claim(), exact);
assert_eq!(limitation.buyer_consequence(), consequence);

let oversized = format!("{exact}x");
assert_eq!(oversized.len(), 1025);
assert_eq!(
DeclaredLimitation::new(&oversized, consequence),
Err(ReleaseDecisionError::LimitationClaimTooLong),
);
Ok(())
}

#[test]
fn international_consequence_preserves_exact_1024_bytes_and_rejects_1025()
-> Result<(), ReleaseDecisionError> {
assert_eq!(MAX_RELEASE_LIMITATION_TEXT_BYTES, 1024);
let exact = format!("{}x", "가".repeat(341));
assert_eq!(exact.len(), 1024);
let claim = "bounded_claim";
let limitation = DeclaredLimitation::new(claim, &exact)?;
assert_eq!(limitation.unsupported_claim(), claim);
assert_eq!(limitation.buyer_consequence(), exact);

let oversized = format!("{exact}x");
assert_eq!(oversized.len(), 1025);
assert_eq!(
DeclaredLimitation::new(claim, &oversized),
Err(ReleaseDecisionError::LimitationConsequenceTooLong),
);
Ok(())
}
2 changes: 2 additions & 0 deletions docs/TEST_STRATEGY.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ Hostile classes include:

A hostile test must assert the safe failure/result, not merely that the process does not crash.

International release-limitation regressions use independently constructed UTF-8 inputs of exactly 1024 and 1025 bytes for both the unsupported claim and buyer consequence. Accepted text must be retained byte-for-byte, and each oversized field must return its exact length-error variant. The tests assert the fixed 1024-byte contract independently of the production constant and preserve existing ASCII and canonical-text tests. Isolated international boundary mutations must fail these regressions. This verifies already-correct limitation metadata validation, not benchmark execution or release authorization.

## 6. Prompt-injection and LLM tests

Model behavior is nondeterministic evidence and must be surrounded by deterministic assertions.
Expand Down
Loading