18 Commits
Author SHA1 Message Date
OpenClaw Coder 5ff5993d98 feat(P4): extend tests, coverage config, build license fix, tasks.md
CI / quality (push) Canceled after 0s
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- geometry: property guard hex nut across-flats (regression guard)
- gui tests: rewrite to ASCII + cover _type_name/_mass helper paths
- coverage: source=fastengen, omit gui.py (UI headless); total 87%
- build: license-files for setuptools, sdist+wheel OK
- tasks.md: P4 recorded
2026-11-11 17:12:54 +10:00
OpenClaw Coder e407d59b13 chore(P4): ruff lint, coverage/CI, README overhaul
CI / quality (push) Canceled after 0s
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- ruff profile in pyproject (E/W/F/I/B/RUF); clean src/ + tests/
- remove dead code: threaded_len/s/d/coat/first_rec_for_size, self.cat in gui
- 59 public re-exports added to __all__ (sorted)
- renamed l->ln (E741), zip(strict=True), split long lines, [*list, x] (RUF005)
- CI: quality job (ruff), test runs tests/ -k 'not gen_all' w/ coverage
- README rewritten (commands, API modules, tests/lint/coverage, CI)
- docs/tasks.md: P4 recorded
- 136 passed, 3 deselected (regen); ruff: all checks passed
2026-11-11 16:30:07 +10:00
OpenClaw Coder 0df78cf3c9 test(geometry): property-based guards for extended families
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- stud_long / self_tacker_gost positive volume (regressions)
- hex bolt head across-flats == S (GOST) — direct guard against the
  polygon(6,r) geometry regression

139 passed in ~242s (full suite incl. 661 STEP regen).
2026-11-11 15:05:03 +10:00
OpenClaw Coder 477fbb5f30 feat(kompas): КОМПАС (.con) converter + CLI; packaging test
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- src/fastengen/kompas.py: build/save_document() produce KOMPAS .con XML
  (GOST, OKPД2 by product type, product params, model STEP ref);
  convert_step_to_kompas_template() for STEP->KOMPAS import container.
- cli.py: 'fastengen kompas --output dir' exports all catalog products as .con.
- tests/test_kompas.py (5): OKPД2 by type, valid XML, save roundtrip,
  default OKPД2, end-to-end CLI export.
- tests/test_packaging.py: pyproject.toml metadata parseable (3.11 tomllib
  or 3.10 fallback).
- docs/tasks.md: kompas + packaging recorded.
2026-11-11 13:30:07 +10:00
OpenClaw Coder d220064bc2 feat(validate): GOST dimension validation of STEP models against nominal sizes
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- src/fastengen/validate_geom.py: validate_model(path) reads STEP via OCC,
  uses cq.Shape.BoundingBox(), checks key dims (across-flats S, outer D,
  head/height k) against GOST tables within 4% tolerance.
- Insight: hexagon bbox min planar extent = across-flats, max = across-corners.
- DimensionResult (.ok/.failed/.checks) + validate_dir(models_dir).
- tests/test_validate_geom.py: 30 tests, all sizes match GOST, reject wrong S.
2026-11-11 13:17:24 +10:00
OpenClaw Coder 76db9827e6 feat(gui): tkinter catalog viewer — list products, per-item STEP mass, regen, vedomost export
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- src/fastengen/gui.py: MainWindow (tkinter, stdlib) lists catalog filtered by type,
  shows geometry-derived mass per item (mass_for_rec), regenerates STEP on double-click,
  exports vedomost md/csv/txt to chosen path. run_gui() auto-creates empty catalog.
- cli.py: 'fastengen gui --catalog cat.json --dir models' subcommand.
- tests/test_gui.py: _type_name filter + record selection logic (no display needed).
2026-11-11 12:50:23 +10:00
OpenClaw Coder 74bc4b0135 fix(geometry): correct hexagon across-flats (polygon r=2S/sqrt3); add STEP-volume mass calc + vedomost mass column
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- Hexagonal heads: polygon(6,r) across-flats = r*sqrt3/2, so use r=2S/sqrt3 for across-flats=S (was S/2 / S/sqrt3, ~13-25% undersized). 8 sites fixed.
- New module mass.py: STEP volume via BRepGProp.VolumeProperties_s * density (GOST 24705), per material.
- vedomost.build() computes 'Mass,г' from real geometry via --dir models path; add vedomost --dir flag.
- tests/test_mass.py: 4 tests (nut M12 ~21.7g, bolt M12x60 ~70g, washer>0, density default 7.85).
2026-11-11 12:40:44 +10:00
OpenClaw Coder 6f7697efd6 feat(vedomost): автозаполнение графов ведомости по ГОСТ 2.119
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- ОКПД2 автоматически по типу изделия (Болт/Гайка/Шайба/Шпилька/Саморез/Винт)
- поле product_type для ведомости ВЗ (элементы)
- render_markdown_full: таблица со всеми графами ГОСТ 2.119 (ОКПД2, масса)
- CLI: опция --full для полной спецификации
- CLI: unicode-safe source (no em-dash in code) - парсится на Python 3.10
- тесты: +3 (ОКПД2 автозаполнение, product_type, full render) -> 10 всего
2026-11-11 11:37:46 +10:00
OpenClaw Coder c1cd093a38 feat(vedomost): ведомость изделий по ГОСТ 2.119 — md/csv/txt/xlsx
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- src/fastengen/vedomost.py: Vedomost (группировка по наименование/ГОСТ/материал),
  render_markdown/csv/txt, write_xlsx (openpyxl, опционально)
- CLI: subcommand 'vedomost --format md|csv|txt|xlsx --output PATH'
- tests/test_vedomost.py: 7 тестов, все прошли
- fix vedomost: размер парсится из кириллической М/ D10 / 6x80
- fix cli.py: модуль-документация была без закрывающих triple-quote -> SyntaxError на '—',
  из-за чего все CLI-тесты падали; восстановлены """
2026-11-11 10:08:47 +10:00
OpenClaw Coder 5fa3ac70de catalog: замкнуть API — add_all_extended, add_washer_l/bolt_set; уникальные id и имени STEP для подтипов
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
- add_all_extended(): генерация всех семейств (базовые + 10 расширенных по ГОСТ)
- catalog.add_washer_l / add_bolt_set: увеличенные шайбы ГОСТ 11372 и винты-набронники ГОСТ 1170
- CLI: gen-all-extended, washer-l-gen, bolt-set-gen; все *-gen теперь сохраняют запись в каталог (_save_and_show)
- model_filename + from_spec: уникальный id/файл на подтип (nut_high, washer_grever, washer_large и т.д.) — устранена коллизия id/файлов
- тесты: покрытие новых подтипов и save-to-catalog
2026-11-11 09:40:45 +10:00
OpenClaw Coder 05ca0e1872 Repos: package renamed boltgen -> FastenGen (0.2.0)
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
Переименование пакета и репозитория:
- имя пакета boltgen -> fastengen (src/fastengen)
- имя пакета в pyproject: FastenGen 0.2.0, entry-point fastengen/fasten-gen
- обновления в __init__, standard, catalog, cli, README, CI workflow
- входной бинарник CLI теперь fastengen
Полный тестовый набор: 77 passed
2026-11-11 08:14:53 +10:00
OpenClaw Coder 1dc52fb16b boltgen: add GOST standards catalog extension (nuts/washers/studs/screws)
CI / test (3.10) (push) Canceled after 0s
CI / test (3.11) (push) Canceled after 0s
CI / test (3.12) (push) Canceled after 0s
CI / build-check (push) Canceled after 0s
Расширение каталогаboltgen новыми типами крепёжа по ГОСТ:

- Bolt (повышенная точность А): ГОСТ 7802-70
- Гайки: высокие ГОСТ 5916-70, барашковые ГОСТ 11889-76, пружинные ГОСТ 11394-74
- Шайбы: гровер ГОСТ 6402-70, стопорные с лапками ГОСТ 13463-77
- Шпильки: ГОСТ 25709-84
- Саморезы: ГОСТ Р 51472-99
- Винты потайные шестигранные: ГОСТ 1149-80

Для каждого добавлены: data-таблица размеров, Spec-класс, get_* валидатор,
iter_* итератор, _*_params (product_params), model_filename, build_*/*generate_*
в model.py, add_* в catalog.py и подкоманда CLI. Все генераторы валидируются
STEP-экспортом (объёмы сходятся). Тесты: +9 в test_specs.py (итого 77 passed).

Решена проблема revolve в этой сборке CadQuery 2.7: revolve(360.0) без
axisStart/axisEnd (данные оси падали с TypeError), для шпильки/конуса применён
revolve вокруг дефолтной оси Z.
2026-11-11 00:01:07 +10:00
OpenClaw Coder 811ec2c141 boltgen: fix stale test_models.py reference in test_specs docstring 2026-11-10 10:11:01 +10:00
OpenClaw Coder 95cfecd965 boltgen: GOST 1759.0-87 designation (strength class + coating Zn/Od/An/Ni); collapse duplicate designation helpers; add strength_class/coating to specs 2026-11-08 12:56:04 +10:00
OpenClaw Coder 0945496611 boltgen: expand bolts/nuts/washers to M27/M30; fix count assertions (167 bolts, 9 nuts, 9 washers) 2026-11-08 05:02:40 +10:00
OpenClaw Coder ec0540ad38 boltgen: property-based geometry tests + CI (cadquery) 2026-11-07 02:56:52 +10:00
OpenClaw Coder 6d614ac9ae boltgen: standalone spec tests (cadquery-free); lazy cadquery import
- tests/test_specs.py: 19 tests за спецификации/каталог без импорта cadquery
- model.py: cadquery теперь опционален (try/except), чтобы слой spec/каталога
  работал на хостах без cadquery (standalone-тесты)
- pip install cadquery 2.7.0 через Tsinghua mirror

Полный suite: 48/48. 93 модели экспортированы (bolt 79, nut 7, washer 7).
2026-11-07 02:40:08 +10:00
OpenClaw Coder 591aa57bd5 boltgen v0.1.0: генератор крепёжа со сравнительной базой и STEP-библиотекой
Self-contained Python-решение (без КОМПАСА):
- Генерация 3D-моделей болтов/гаек/шайб → STEP через CadQuery
- Каталог изделий: обозначение, стандарт, материал, модель, атрибуты
- CLI: bolt-gen / nut-gen / washer-gen / gen-all / list / show
- Стандарты: ГОСТ 7805-70, ГОСТ 5915-70, ГОСТ 11371-78
- 93 модели (73 болта + 7 гаек + 7 шайб), 30/30 тестов PASS
2026-11-07 01:35:03 +10:00