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
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ All notable changes to OriginWeave are documented in this file. The format follo

## [Unreleased]

- Scoped pull-request workflow cancellation by workflow, repository, and PR while keeping push and manual runs independent; removed the completed nightly materializer and the redundant standalone `cargo check`, with all-target Clippy retained as the workspace compile/check gate.
- 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
Expand Down Expand Up @@ -102,4 +103,4 @@ All notable changes to OriginWeave are documented in this file. The format follo
- The hourly product agent has no Git metadata or repository authority. A separate post-verification publisher opens one PR and cannot approve or merge it.
- The unprivileged OpenCode user is restricted to loopback egress during model execution, preventing runner-wide allow-listed endpoints from becoming direct source-exfiltration channels.

[Unreleased]: https://github.com/ContextualWisdomLab/OriginWeave/compare/main...HEAD
[Unreleased]: https://github.com/ContextualWisdomLab/OriginWeave/compare/main...HEAD
2 changes: 1 addition & 1 deletion docs/quality-gates.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ A PR is mergeable only when all apply:
- required PR checks explicitly check out the pull request head SHA; GitHub synthetic merge-ref evidence is supplemental and cannot substitute for exact-head evidence;
- production function, line, region, and branch coverage each at 100%;
- all public Rust APIs documented and rustdoc warnings denied;
- format, check, test, Clippy, and documentation jobs pass;
- format, test, Clippy, and documentation jobs pass; Clippy is the workspace compile/check gate because CI lints every target, so a separate `cargo check` invocation is not required;
- dependency and GitHub Action references are locked or commit-pinned;
- generated build outputs are ignored and absent from `git ls-files`;
- review threads are resolved with code or evidence;
Expand Down
47 changes: 47 additions & 0 deletions tests/test_pr284_governance_contract.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
"""Regression contracts for the PR #284/#286 CI-governance repairs."""

from __future__ import annotations

import pathlib
import unittest

ROOT = pathlib.Path(__file__).resolve().parents[1]


class WorkflowGovernanceRepairTests(unittest.TestCase):
"""Keep workflow optimization, lifecycle admission, and docs in one contract."""

def test_concurrency_and_draft_lifecycle_contracts_remain_composed(self) -> None:
"""Main must retain both exact concurrency scoping and Draft-run admission rules."""

ci = (ROOT / ".github/workflows/ci.yml").read_text(encoding="utf-8")
mv3 = (ROOT / ".github/workflows/mv3-compatibility.yml").read_text(encoding="utf-8")
concurrency = (
"concurrency:\n"
" group: ${{ github.workflow }}-${{ github.repository }}-"
"${{ github.event.pull_request.number || github.run_id }}\n"
" cancel-in-progress: ${{ github.event_name == 'pull_request' }}"
)
lifecycle = (
"types: [opened, synchronize, reopened, ready_for_review, "
"converted_to_draft, closed]"
)

self.assertIn(concurrency, ci)
self.assertIn(concurrency, mv3)
self.assertIn(lifecycle, ci)
self.assertIn(lifecycle, mv3)
self.assertEqual(ci.count("github.event.pull_request.draft == false"), 2)
self.assertIn("github.event.pull_request.draft == false", mv3)

def test_quality_gate_and_changelog_describe_the_optimized_ci_boundary(self) -> None:
"""Repository docs must retain the post-optimization compile/check semantics."""

quality_gates = (ROOT / "docs/quality-gates.md").read_text(encoding="utf-8")
changelog = (ROOT / "CHANGELOG.md").read_text(encoding="utf-8")
self.assertIn("Clippy is the workspace compile/check gate", quality_gates)
self.assertIn("Scoped pull-request workflow cancellation", changelog)


if __name__ == "__main__":
unittest.main()
Loading