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
8 changes: 4 additions & 4 deletions .github/workflows/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ jobs:
GITLEAKS_ARGS: --no-git

dependency-review:
# The action requires GitHub's Dependency Graph repository setting. Keep the
# job opt-in so repositories without that setting do not report a false-red
# security workflow; pip-audit remains mandatory below.
if: >
github.event_name == 'pull_request' &&
(
github.event.repository.private == false ||
vars.ENABLE_PRIVATE_DEPENDENCY_REVIEW == 'true'
)
vars.ENABLE_DEPENDENCY_REVIEW == 'true'
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
Expand Down
11 changes: 11 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Structorium
Copyright (c) 2025 Peter O'Malley

This distribution preserves the original MIT license notice and Peter
O'Malley's authorship metadata. The repository at
https://github.com/DivyamTalwar/Structorium is currently maintained by
Divyam Talwar and contains subsequent maintenance and development work.

This notice records the metadata present in the project's initial public
scaffold. It does not make claims about any unavailable upstream repository
or transfer copyright ownership. See LICENSE for the complete license terms.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
<h1 align="center">Structorium</h1>
<h3 align="center">Architecture. Automatically Enforced.</h3>

<p align="center"><small>
The original MIT license and Peter O'Malley's authorship are preserved. This
repository is maintained by Divyam Talwar. See <a href="NOTICE">NOTICE</a>
for the precise attribution statement.
</small></p>

<p align="center">
<img src="https://img.shields.io/badge/python-3.11+-050505?style=flat-square" alt="Python"/>
<img src="https://img.shields.io/badge/languages-28-FF4500?style=flat-square" alt="Languages"/>
Expand Down Expand Up @@ -2172,4 +2178,3 @@ copies or substantial portions of the Software.
<p align="center">
<a href="#structorium">↑ Back to top</a>
</p>

9 changes: 6 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ license = "MIT"
authors = [
{name = "Peter O'Malley", email = "pom@banodoco.ai"},
]
maintainers = [
{name = "Divyam Talwar"},
]
keywords = ["code-quality", "technical-debt", "linter", "static-analysis", "refactoring"]
classifiers = [
"Development Status :: 4 - Beta",
Expand All @@ -29,9 +32,9 @@ classifiers = [
dependencies = []

[project.urls]
Homepage = "https://github.com/peteromallet/structorium"
Repository = "https://github.com/peteromallet/structorium"
Issues = "https://github.com/peteromallet/structorium/issues"
Homepage = "https://github.com/DivyamTalwar/Structorium"
Repository = "https://github.com/DivyamTalwar/Structorium"
Issues = "https://github.com/DivyamTalwar/Structorium/issues"

[project.optional-dependencies]
treesitter = ["tree-sitter-language-pack>=0.3"]
Expand Down
22 changes: 22 additions & 0 deletions tests/ci/test_metadata_contracts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from pathlib import Path
import tomllib


ROOT = Path(__file__).resolve().parents[2]


def test_package_metadata_preserves_author_and_names_current_maintainer() -> None:
metadata = tomllib.loads((ROOT / "pyproject.toml").read_text())["project"]

assert metadata["authors"][0]["name"] == "Peter O'Malley"
assert metadata["maintainers"][0]["name"] == "Divyam Talwar"
assert metadata["urls"]["Repository"].endswith("/DivyamTalwar/Structorium")


def test_notice_and_license_preserve_original_attribution() -> None:
license_text = (ROOT / "LICENSE").read_text()
notice_text = (ROOT / "NOTICE").read_text()

assert "Copyright (c) 2025 Peter O'Malley" in license_text
assert "Copyright (c) 2025 Peter O'Malley" in notice_text
assert "does not make claims" in notice_text
23 changes: 13 additions & 10 deletions tests/review/test_review_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -775,17 +775,20 @@ def test_do_run_batches_dry_run_generates_packet_and_prompts(
assert len(packet_files) == 1
blind_packet = tmp_path / ".structorium" / "review_packet_blind.json"
assert blind_packet.exists()
prompt_files = list(runs_dir.glob("*/prompts/batch-*.md"))
prompt_files = sorted(runs_dir.glob("*/prompts/batch-*.md"))
assert len(prompt_files) == 2
prompt_text = prompt_files[0].read_text()
assert "Blind packet:" in prompt_text
assert str(blind_packet) in prompt_text
assert "Previously flagged issues" in prompt_text
assert "Legacy surface remains primary" in prompt_text
assert "Mechanical concern signals" in prompt_text
assert "foo.ts mixes orchestration and transformation" in prompt_text
assert "Should orchestration move to a dedicated coordinator?" in prompt_text
assert "Workflow integrity checks" in prompt_text
prompt_texts = [prompt_file.read_text() for prompt_file in prompt_files]
assert all("Blind packet:" in prompt_text for prompt_text in prompt_texts)
assert all(str(blind_packet) in prompt_text for prompt_text in prompt_texts)
assert any(
"Previously flagged issues" in prompt_text for prompt_text in prompt_texts
)
joined_prompts = "\n".join(prompt_texts)
assert "Legacy surface remains primary" in joined_prompts
assert "Mechanical concern signals" in joined_prompts
assert "foo.ts mixes orchestration and transformation" in joined_prompts
assert "Should orchestration move to a dedicated coordinator?" in joined_prompts
assert "Workflow integrity checks" in joined_prompts
run_logs = sorted(runs_dir.glob("*/run.log"))
assert len(run_logs) == 1
run_log_text = run_logs[0].read_text()
Expand Down
Loading