kproj 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. kproj-0.1.0/.github/workflows/publish.yml +44 -0
  2. kproj-0.1.0/.github/workflows/semantic-release.yml +36 -0
  3. kproj-0.1.0/.github/workflows/test.yml +38 -0
  4. kproj-0.1.0/.gitignore +47 -0
  5. kproj-0.1.0/.pre-commit-config.yaml +22 -0
  6. kproj-0.1.0/.python-version +1 -0
  7. kproj-0.1.0/CHANGELOG.md +1329 -0
  8. kproj-0.1.0/LICENSE +21 -0
  9. kproj-0.1.0/PKG-INFO +91 -0
  10. kproj-0.1.0/README.md +63 -0
  11. kproj-0.1.0/docs/AGENT-HANDOFF.md +72 -0
  12. kproj-0.1.0/docs/DESIGN.md +863 -0
  13. kproj-0.1.0/docs/GLOSSARY.md +132 -0
  14. kproj-0.1.0/docs/PRD.md +282 -0
  15. kproj-0.1.0/docs/RFEs.md +24 -0
  16. kproj-0.1.0/docs/adr/0001-inherit-jbom-architectural-patterns.md +46 -0
  17. kproj-0.1.0/docs/adr/0002-jekyll-publisher-scope-a-b-split.md +54 -0
  18. kproj-0.1.0/docs/adr/0003-jbom-separation-read-not-invoke.md +69 -0
  19. kproj-0.1.0/docs/adr/0004-show-what-is-provided-audit-policy.md +60 -0
  20. kproj-0.1.0/docs/adr/0005-writetracker-transactional-site-writes.md +96 -0
  21. kproj-0.1.0/docs/adr/0006-library-shape-boundary-discipline.md +67 -0
  22. kproj-0.1.0/docs/adr/0007-local-cli-v1-ci-deferred.md +55 -0
  23. kproj-0.1.0/docs/adr/0008-ibom-direct-script-invocation.md +78 -0
  24. kproj-0.1.0/docs/adr/0009-kicad-install-locator.md +108 -0
  25. kproj-0.1.0/docs/adr/README.md +52 -0
  26. kproj-0.1.0/docs/phase-g-handoff.md +65 -0
  27. kproj-0.1.0/docs/phase1/analysis.json +192 -0
  28. kproj-0.1.0/docs/phase1/audit-rerun/audit.json +949 -0
  29. kproj-0.1.0/docs/phase1/audit-rerun/audit.py +237 -0
  30. kproj-0.1.0/docs/phase1/audit-rerun/findings.csv +51 -0
  31. kproj-0.1.0/docs/phase1/jbom-reuse-map.md +456 -0
  32. kproj-0.1.0/docs/phase1/kicad-metadata-survey.md +300 -0
  33. kproj-0.1.0/docs/phase1/site-platform-assessment.md +114 -0
  34. kproj-0.1.0/docs/phase1/survey.csv +35 -0
  35. kproj-0.1.0/docs/phase1/survey.json +672 -0
  36. kproj-0.1.0/docs/phase4-resolutions.md +92 -0
  37. kproj-0.1.0/docs/phase4-review.md +95 -0
  38. kproj-0.1.0/docs/wave3-review.md +155 -0
  39. kproj-0.1.0/pyproject.toml +147 -0
  40. kproj-0.1.0/src/kproj/__init__.py +4 -0
  41. kproj-0.1.0/src/kproj/__main__.py +8 -0
  42. kproj-0.1.0/src/kproj/application/__init__.py +22 -0
  43. kproj-0.1.0/src/kproj/application/publish_workflow.py +948 -0
  44. kproj-0.1.0/src/kproj/cli/__init__.py +8 -0
  45. kproj-0.1.0/src/kproj/cli/main.py +234 -0
  46. kproj-0.1.0/src/kproj/common/__init__.py +40 -0
  47. kproj-0.1.0/src/kproj/common/kicad_install.py +316 -0
  48. kproj-0.1.0/src/kproj/common/kicad_libraries.py +125 -0
  49. kproj-0.1.0/src/kproj/common/logging_setup.py +91 -0
  50. kproj-0.1.0/src/kproj/common/project_docs.py +114 -0
  51. kproj-0.1.0/src/kproj/common/subprocess_runner.py +239 -0
  52. kproj-0.1.0/src/kproj/config.py +382 -0
  53. kproj-0.1.0/src/kproj/formatters/__init__.py +18 -0
  54. kproj-0.1.0/src/kproj/formatters/front_matter_summary_formatter.py +250 -0
  55. kproj-0.1.0/src/kproj/formatters/markdown_table_formatter.py +157 -0
  56. kproj-0.1.0/src/kproj/formatters/stderr_formatter.py +72 -0
  57. kproj-0.1.0/src/kproj/model/__init__.py +40 -0
  58. kproj-0.1.0/src/kproj/model/analysis_info.py +77 -0
  59. kproj-0.1.0/src/kproj/model/export_result.py +37 -0
  60. kproj-0.1.0/src/kproj/model/finding.py +51 -0
  61. kproj-0.1.0/src/kproj/model/library_ref.py +48 -0
  62. kproj-0.1.0/src/kproj/model/project_info.py +83 -0
  63. kproj-0.1.0/src/kproj/model/publication.py +99 -0
  64. kproj-0.1.0/src/kproj/model/publish_request.py +37 -0
  65. kproj-0.1.0/src/kproj/model/publish_result.py +130 -0
  66. kproj-0.1.0/src/kproj/model/raw_title_block.py +63 -0
  67. kproj-0.1.0/src/kproj/model/resolved_project.py +71 -0
  68. kproj-0.1.0/src/kproj/model/severity.py +41 -0
  69. kproj-0.1.0/src/kproj/services/__init__.py +36 -0
  70. kproj-0.1.0/src/kproj/services/change_journal.py +219 -0
  71. kproj-0.1.0/src/kproj/services/design_analyzer.py +397 -0
  72. kproj-0.1.0/src/kproj/services/fab_packager.py +313 -0
  73. kproj-0.1.0/src/kproj/services/ibom_generator.py +167 -0
  74. kproj-0.1.0/src/kproj/services/kicad_project_reader.py +418 -0
  75. kproj-0.1.0/src/kproj/services/metadata_analyzer.py +398 -0
  76. kproj-0.1.0/src/kproj/services/pcb_exporter.py +207 -0
  77. kproj-0.1.0/src/kproj/services/schematic_exporter.py +239 -0
  78. kproj-0.1.0/src/kproj/services/site_publisher.py +428 -0
  79. kproj-0.1.0/src/kproj/services/source_packager.py +230 -0
  80. kproj-0.1.0/src/kproj/services/thumbnail_generator.py +92 -0
  81. kproj-0.1.0/src/kproj/services/zip_archiver.py +107 -0
  82. kproj-0.1.0/templates/Makefile.kicad +67 -0
  83. kproj-0.1.0/tests/__init__.py +0 -0
  84. kproj-0.1.0/tests/_kicad_fixtures.py +111 -0
  85. kproj-0.1.0/tests/contract/__init__.py +0 -0
  86. kproj-0.1.0/tests/contract/test_ibom_generator.py +72 -0
  87. kproj-0.1.0/tests/contract/test_kicad_cli_drc.py +183 -0
  88. kproj-0.1.0/tests/contract/test_kicad_cli_erc.py +145 -0
  89. kproj-0.1.0/tests/contract/test_kicad_install_locator.py +96 -0
  90. kproj-0.1.0/tests/contract/test_pcb_exporter.py +62 -0
  91. kproj-0.1.0/tests/contract/test_schematic_exporter.py +54 -0
  92. kproj-0.1.0/tests/features/batch_safety.feature +30 -0
  93. kproj-0.1.0/tests/features/drc_erc_mechanical_failure.feature +34 -0
  94. kproj-0.1.0/tests/features/dry_run.feature +10 -0
  95. kproj-0.1.0/tests/features/findings_surfaced.feature +19 -0
  96. kproj-0.1.0/tests/features/preflight.feature +14 -0
  97. kproj-0.1.0/tests/features/private_status.feature +15 -0
  98. kproj-0.1.0/tests/features/project_resolution.feature +22 -0
  99. kproj-0.1.0/tests/features/publish.feature +24 -0
  100. kproj-0.1.0/tests/features/site_repo_cleanliness.feature +13 -0
  101. kproj-0.1.0/tests/features/steps/preflight_steps.py +54 -0
  102. kproj-0.1.0/tests/features/steps/private_status_steps.py +110 -0
  103. kproj-0.1.0/tests/features/steps/publish_steps.py +620 -0
  104. kproj-0.1.0/tests/features/verbose.feature +19 -0
  105. kproj-0.1.0/tests/fixtures/minimal/minimal.kicad_pcb +53 -0
  106. kproj-0.1.0/tests/fixtures/minimal/minimal.kicad_sch +19 -0
  107. kproj-0.1.0/tests/unit/__init__.py +0 -0
  108. kproj-0.1.0/tests/unit/application/__init__.py +0 -0
  109. kproj-0.1.0/tests/unit/application/test_publication_assembly.py +142 -0
  110. kproj-0.1.0/tests/unit/application/test_publish_workflow.py +1009 -0
  111. kproj-0.1.0/tests/unit/common/__init__.py +0 -0
  112. kproj-0.1.0/tests/unit/common/test_kicad_install.py +370 -0
  113. kproj-0.1.0/tests/unit/common/test_kicad_libraries.py +227 -0
  114. kproj-0.1.0/tests/unit/common/test_logging_setup.py +86 -0
  115. kproj-0.1.0/tests/unit/common/test_project_docs.py +139 -0
  116. kproj-0.1.0/tests/unit/common/test_subprocess_runner.py +146 -0
  117. kproj-0.1.0/tests/unit/formatters/__init__.py +0 -0
  118. kproj-0.1.0/tests/unit/formatters/test_front_matter_summary_formatter.py +418 -0
  119. kproj-0.1.0/tests/unit/formatters/test_markdown_table_formatter.py +159 -0
  120. kproj-0.1.0/tests/unit/formatters/test_stderr_formatter.py +123 -0
  121. kproj-0.1.0/tests/unit/formatters/test_stubs.py +34 -0
  122. kproj-0.1.0/tests/unit/model/__init__.py +0 -0
  123. kproj-0.1.0/tests/unit/model/test_analysis_info.py +57 -0
  124. kproj-0.1.0/tests/unit/model/test_export_result.py +42 -0
  125. kproj-0.1.0/tests/unit/model/test_finding.py +58 -0
  126. kproj-0.1.0/tests/unit/model/test_library_ref.py +36 -0
  127. kproj-0.1.0/tests/unit/model/test_project_info.py +62 -0
  128. kproj-0.1.0/tests/unit/model/test_publication.py +54 -0
  129. kproj-0.1.0/tests/unit/model/test_resolved_project.py +45 -0
  130. kproj-0.1.0/tests/unit/model/test_severity.py +30 -0
  131. kproj-0.1.0/tests/unit/services/__init__.py +0 -0
  132. kproj-0.1.0/tests/unit/services/test_change_journal.py +233 -0
  133. kproj-0.1.0/tests/unit/services/test_design_analyzer.py +388 -0
  134. kproj-0.1.0/tests/unit/services/test_fab_packager.py +403 -0
  135. kproj-0.1.0/tests/unit/services/test_ibom_generator.py +248 -0
  136. kproj-0.1.0/tests/unit/services/test_kicad_project_reader.py +342 -0
  137. kproj-0.1.0/tests/unit/services/test_metadata_analyzer.py +463 -0
  138. kproj-0.1.0/tests/unit/services/test_pcb_exporter.py +283 -0
  139. kproj-0.1.0/tests/unit/services/test_schematic_exporter.py +285 -0
  140. kproj-0.1.0/tests/unit/services/test_site_publisher.py +356 -0
  141. kproj-0.1.0/tests/unit/services/test_source_packager.py +121 -0
  142. kproj-0.1.0/tests/unit/services/test_stubs.py +56 -0
  143. kproj-0.1.0/tests/unit/services/test_thumbnail_generator.py +67 -0
  144. kproj-0.1.0/tests/unit/services/test_zip_archiver.py +94 -0
  145. kproj-0.1.0/tests/unit/test_cli.py +292 -0
  146. kproj-0.1.0/tests/unit/test_config.py +285 -0
  147. kproj-0.1.0/uv.lock +618 -0
@@ -0,0 +1,44 @@
1
+ name: Build and Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+ env:
11
+ PYTHONPATH: src
12
+
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v5
18
+ with:
19
+ # Match the floor declared by pyproject.toml (requires-python = ">=3.11").
20
+ python-version: "3.11"
21
+
22
+ - name: Install build and test dependencies
23
+ run: |
24
+ python -m pip install --upgrade pip
25
+ pip install -e .[dev]
26
+ pip install build twine
27
+
28
+ - name: Run tests
29
+ run: |
30
+ python -m pytest
31
+ python -m behave --format progress tests/features
32
+
33
+ - name: Build distribution
34
+ run: |
35
+ python -m build
36
+
37
+ - name: Check distribution
38
+ run: |
39
+ python -m twine check dist/*
40
+
41
+ - name: Publish to PyPI
42
+ uses: pypa/gh-action-pypi-publish@release/v1
43
+ with:
44
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,36 @@
1
+ name: Semantic Release
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+
7
+ permissions:
8
+ contents: write
9
+ pull-requests: write
10
+ id-token: write
11
+
12
+ jobs:
13
+ release:
14
+ runs-on: ubuntu-latest
15
+ concurrency: release
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ with:
20
+ fetch-depth: 0
21
+ token: ${{ secrets.GITHUB_TOKEN }}
22
+ - name: Set up Python
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: "3.11"
26
+ - name: Install python-semantic-release
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ pip install python-semantic-release==9.12.0
30
+ - name: Python Semantic Release
31
+ env:
32
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33
+ run: |
34
+ git config user.name "github-actions"
35
+ git config user.email "github-actions@github.com"
36
+ semantic-release version
@@ -0,0 +1,38 @@
1
+ name: Tests
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ branches: [main]
7
+ workflow_dispatch:
8
+ jobs:
9
+ tests:
10
+ name: Tests (py3.11)
11
+ runs-on: ubuntu-latest
12
+ env:
13
+ PYTHONPATH: src
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ with:
17
+ fetch-depth: 0
18
+ - name: Set up Python 3.11
19
+ uses: actions/setup-python@v5
20
+ with:
21
+ python-version: "3.11"
22
+ - name: Install dependencies
23
+ run: |
24
+ python -m pip install --upgrade pip
25
+ pip install -e .[dev]
26
+ - name: Ruff
27
+ run: |
28
+ ruff check src tests
29
+ ruff format --check src tests
30
+ - name: Mypy
31
+ run: |
32
+ mypy src
33
+ - name: Pytest
34
+ run: |
35
+ python -m pytest
36
+ - name: Behave
37
+ run: |
38
+ python -m behave --format progress tests/features
kproj-0.1.0/.gitignore ADDED
@@ -0,0 +1,47 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.egg-info/
6
+ *.egg
7
+ .eggs/
8
+ build/
9
+ dist/
10
+ .installed.cfg
11
+ MANIFEST
12
+
13
+ # Virtual environments
14
+ .venv/
15
+ venv/
16
+ env/
17
+
18
+ # uv (commit uv.lock for application/dev reproducibility; only cache excluded)
19
+ .uv-cache/
20
+
21
+ # Testing
22
+ .coverage
23
+ .coverage.*
24
+ .pytest_cache/
25
+ htmlcov/
26
+ .tox/
27
+ .cache
28
+
29
+ # Type checkers
30
+ .mypy_cache/
31
+ .pyre/
32
+ .pytype/
33
+
34
+ # IDE
35
+ .vscode/
36
+ .idea/
37
+ *.swp
38
+ *.swo
39
+
40
+ # macOS
41
+ .DS_Store
42
+
43
+ # kproj-specific
44
+ .kproj-staging/
45
+
46
+ # KiCad per-user local state (regenerated on demand by kicad-cli)
47
+ *.kicad_prl
@@ -0,0 +1,22 @@
1
+ # Pre-commit hooks for kproj.
2
+ #
3
+ # Run locally:
4
+ # uv run pre-commit install # one-time
5
+ # uv run pre-commit run -a # ad-hoc full sweep
6
+ #
7
+ # CI integration deferred per ADR 0007.
8
+ repos:
9
+ - repo: https://github.com/astral-sh/ruff-pre-commit
10
+ rev: v0.15.20
11
+ hooks:
12
+ - id: ruff
13
+ args: [--fix]
14
+ - id: ruff-format
15
+ - repo: https://github.com/pre-commit/pre-commit-hooks
16
+ rev: v4.6.0
17
+ hooks:
18
+ - id: trailing-whitespace
19
+ - id: end-of-file-fixer
20
+ - id: check-yaml
21
+ - id: check-toml
22
+ - id: check-merge-conflict
@@ -0,0 +1 @@
1
+ 3.11