mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-12 19:44:48 +01:00
test(W7c): ship-apple-gate matches its gates on meaning, not capitals
W7c (t06 #19). One test file. Removed assertion groups: - "A genuine blocker may require a safety or named documentation-risk decision" and "routine interactions and blocking decisions above" sentence pins. Invariant: routine release authorization never waives a blocking safety/docs decision. Remaining protection: kept free meaning check `/stop for that decision rather than treating release authorization as a waiver/i` plus `/named documentation-risk exception before distribution/i`. - Full-sentence "in `read-only` mode against the selected release source". Invariant: the docs preflight is read-only. Remaining protection: kept free check on "`read-only` mode". Loosened (case-insensitive, kept): apply-only-to-repository-landing scope line, CLASSIFY-before-credentials (credential boundary), never abort a store release over branch topology (demonstrated failure), two routine interactions (numeric limit), stop-for-decision (consent/stop line). Kept unchanged: manifest trigger routing, Apple read before the branch gate, byte-exact branch gate appearing once, docs preflight before the authorization moment, fastlane/iris/appPriceSchedules command anchors, stale-wording bans. No gate-tier E2E covers the Apple adapter, so every invariant keeps a free check here. Cosmetic pins dropped: capitals on ONLY / CLASSIFY / STOP. Mutation log: .context/mutation-ship-apple-gate.md (14 mutations, 0 unexpected: 2 reorders, 1 marker and 6 safety mutations red; 5 rewordings green).
This commit is contained in:
1 parent
ff54f3c955
commit
8b1e3423a7
1 file changed
+9
-16
@@ -39,7 +39,7 @@ describe("ship Apple gate ordering (R2)", () => {
|
||||
|
||||
test("store distribution explicitly bypasses the branch/PR ceremony", () => {
|
||||
expect(SKELETON).toContain("Store distribution proceeds");
|
||||
expect(SKELETON).toMatch(/branch gate and repository-landing pipeline below apply ONLY to\s*\n?repository-landing asks/);
|
||||
expect(SKELETON).toMatch(/branch gate and repository-landing pipeline below apply only to\s+repository-landing asks/i);
|
||||
});
|
||||
|
||||
test("the non-Apple branch gate is byte-unchanged and appears exactly once", () => {
|
||||
@@ -50,30 +50,23 @@ describe("ship Apple gate ordering (R2)", () => {
|
||||
|
||||
test("the adapter section exists in the union with its battle-tested spine", () => {
|
||||
const section = readFileSync(join(ROOT, "ship", "sections", "apple-release.md"), "utf-8");
|
||||
for (const anchor of [
|
||||
"one authorization moment",
|
||||
"fastlane spaceauth",
|
||||
"iris/v1/apiKeys",
|
||||
"appPriceSchedules",
|
||||
"CLASSIFY the error before touching credentials",
|
||||
"Never abort an App Store release over branch topology",
|
||||
]) {
|
||||
for (const anchor of ["one authorization moment", "fastlane spaceauth", "iris/v1/apiKeys", "appPriceSchedules"]) {
|
||||
expect(section).toContain(anchor);
|
||||
}
|
||||
expect(section).toMatch(/classify the error before touching credentials/i);
|
||||
expect(section).toMatch(/never abort an App Store release over branch topology/i);
|
||||
});
|
||||
|
||||
test("routine interaction limits cannot waive blocking documentation or safety decisions", () => {
|
||||
for (const name of ["apple-release.md.tmpl", "apple-release.md"]) {
|
||||
const section = readFileSync(join(ROOT, "ship", "sections", name), "utf-8");
|
||||
expect(section).toContain("Plan for two routine interactions");
|
||||
expect(section).toContain("A genuine blocker may require a safety or named documentation-risk decision");
|
||||
expect(section).toContain("STOP for that decision rather than treating release authorization as a waiver");
|
||||
expect(section).toContain("routine interactions and blocking decisions above");
|
||||
const section = readFileSync(join(ROOT, "ship", "sections", name), "utf-8").replace(/\s+/g, " ");
|
||||
expect(section).toMatch(/two routine interactions/i);
|
||||
expect(section).toMatch(/stop for that decision rather than treating release authorization as a waiver/i);
|
||||
expect(section).not.toContain("exactly two interactions, and no others");
|
||||
expect(section).not.toContain("two permitted interactions");
|
||||
expect(section.indexOf("**Documentation preflight:**")).toBeLessThan(section.indexOf("## The one authorization moment"));
|
||||
expect(section).toContain("in `read-only` mode against the selected release source");
|
||||
expect(section).toContain("Resolve blockers or obtain an explicit named documentation-risk exception before distribution");
|
||||
expect(section).toContain("`read-only` mode");
|
||||
expect(section).toMatch(/named documentation-risk exception before distribution/i);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user