Commit Graph
135 Commits
Author SHA1 Message Date
michele d0bbd582a8 Rewrite Settings as native Periscope config.
DeepSeek remains the only live provider; leftover Anthropic env names
are coerced or ignored. Skills manifest is resolved across the split tree.
2026-09-20 19:21:52 +02:00
michele 40b251c387 Stamp 2.50.0 after pipeline and leftover analysis rewrite.
Full pytest is green. Inherited copies stay on disk; auth untouched.
2026-09-20 19:14:50 +02:00
michele 82ffa755cd Rewrite leftover analysis modules imported by src.
validate/validation_tools alias native lookup and review tools. Passive
resolve, derating, BOM summary, pin-mux, LED current, and net-function
tokens are original Periscope code. finding_engine and pcb_* unchanged.
2026-09-20 19:14:20 +02:00
michele 3d7fa21eb6 Rewrite analysis pipeline, projects, email, and LCSC client.
Native job_workspace / datasheet_extract / review_session stay the live
BOM-extract-graph-review path. Project writes follow owner_user_id.
2026-09-20 19:10:28 +02:00
michele 6a4903fa3a Rewrite job_runner, event_bridge, cost estimator, and DigiKey client.
Local pid-file dispatch stays the self-host path. DigiKey still rejects unrelated MPNs. Inherited copies remain on disk.
2026-09-20 18:57:58 +02:00
michele e240afce23 Rewrite leftover LLM factory (DeepSeek-only), storage, validation.
Anthropic/Gemini names resolve to DeepSeek. Extraction import path re-exports datasheet_extract. Inherited copies stay on disk. storage_gcs unused, skipped.
2026-09-20 18:55:18 +02:00
michele 572b8d24f3 Rewrite normalize, cross-IC dedupe, and billing seam (2.49.0).
Downgrade-only clamp and fail-soft coverage stay in src. Inherited copies remain on disk. Self-host billing is NullBilling.
2026-09-20 18:47:45 +02:00
michele fe89851c10 Rewrite taxonomy loader; JSON path via repo_paths (2.48.0).
TAXONOMY_DIR is taxonomy_dir() so src reads dependency/taxonomy until a src tree exists. Inherited taxonomy.py stays on disk. Changelog covers models, parsers, and taxonomy.
2026-09-20 18:41:12 +02:00
michele 9997f39718 Rewrite PADS/BOM dispatch and EDIF ingest as Periscope parsers.
KiCad schematic parser and PCB via≠pad parser stay native. Inherited
parser files remain in dependency/.
2026-09-20 18:38:26 +02:00
michele 24f9c952e2 Rewrite Periscope models.py with disjoint layout primitives.
Pad, via, track, and zone stay separate types. Inherited models.py remains
in dependency/. Public graph/finding fields are unchanged.
2026-09-20 18:37:03 +02:00
michele 19a1eef936 Record 2.47.0 native graph rewrite in changelog and independence plan. 2026-09-20 18:32:47 +02:00
michele 7ff049f6d0 Rewrite DesignGraph builder as original Periscope graph.py.
Src module classifies refs, infers net type/voltage, and prefers board nets
when a .kicad_pcb is present. PinScope graph.py remains in dependency/.
2026-09-20 18:32:36 +02:00
michele 5a1d31ce7b Revert PinScope overlay copies from periscope/src (2.46.0).
Remove stamped near-identical modules so inherited code loads from
dependency/ again. Keep native finding engine, PCB/placement, review,
job workspace, datasheet extract, via-vs-pad parser, logo, and local JWT.
2026-09-20 18:30:21 +02:00
michele 2f2e35e802 Replace paraphrased constitution with the 1224-line master.
Copy CODING_CONSTITUTION.md from the AgentStore docs/development path and split
the seven always-on .mdc files from that exact text.
2026-09-20 18:24:29 +02:00
michele 0533d4ebd2 Add Periscope Cursor engineering constitution and always-on rules.
Docs-only: master CODING_CONSTITUTION plus seven .mdc splits. Git policy is
phase = test then commit+push; deploy only after a macro-phase.
2026-09-20 18:06:00 +02:00
michele 6d6e70cec0 Overlay leftover FastAPI entry, routers, and jobs into periscope/src (2.45.0).
Copy main, config, middleware/auth, leftover routers, pipeline_worker,
job_runner, event_bridge, projects, and admin_settings without deleting
dependency copies. Native auth and impedance routers stay as-is.
2026-09-20 17:39:15 +02:00
michele 49a27d5951 Fix leftover service overlay stamps so __future__ stays first.
Use comment headers instead of a second module docstring so overlay copies remain valid Python.
2026-09-20 17:21:57 +02:00
michele 0b01617b37 Overlay leftover services and LLM factory into periscope/src (2.44.0).
Copy api_logs, findings normalize/dedupe, billing_hook, datasheet_store,
cost_estimator, storage, purple_parts, email, digikey, and llm factory/types/base
without deleting the inherited dependency copies.
2026-09-20 17:15:55 +02:00
michele 1389d832df Overlay leftover PinScope modules src still imported.
utils, resolve_passives, derating, bom_summary, pin_mux, LED current,
pin-function tokens, plus live analysis validate/validation_tools/pipeline/
validation/extraction, skills, and taxonomy JSON now resolve from
periscope/src. Inherited copies stay in dependency/. repo_paths prefers
src then /app; Docker copies src taxonomy/skills last.
2026-09-20 16:56:20 +02:00
michele 31fd389b38 Native overlay of graph, parsers, models, taxonomy; Periscope mark.
Src-first imports now load graph/parsers/EDIF/models/taxonomy from
periscope/src. Inherited copies stay in dependency/. Taxonomy JSON path
uses repo_paths. New periscope/lens mark at existing 16/32/180/192/512
favicon sizes; header uses PeriscopeMark instead of the lucide CPU glyph.
2026-09-20 16:41:50 +02:00
michele 34a9b30a35 Re-parse .kicad_pcb on PCB exam instead of stale layout_graph.
Cached layout_graph still listed stitching via-pads as component pads,
so PE-BOM-011 kept firing after the ingest fix. PCB/placement jobs now
parse the board file and refresh the cache.
2026-09-20 16:16:46 +02:00
michele 09c49f8529 Resolve board via nets by net code, not pad-net token.
_via_from_node used _pad_net first, so (net 1) stayed as '1' instead of GND.
2026-09-20 16:06:54 +02:00
michele ad21d00cd0 Fix PE-BOM-011: classify footprint vias as vias, not pads.
KiCad stitching/thermal vias inside a footprint are (via) or copper-only
thru_hole (pad) objects. parse_kicad_pcb was appending every (pad) to
LayoutFootprint.pads, so PE-BOM-011 compared datasheet pin_count to via
numbers. Nested vias join LayoutGraph.vias; soldered THT pads stay pads.
2026-09-20 16:06:10 +02:00
michele 19eab09000 Native PipelineWorkspace and event broker in periscope/src.
PCB and placement jobs import job_workspace instead of PinScope
pipeline.py. Analysis run_pipeline re-exports the same broker singleton.
2026-09-20 15:34:41 +02:00
michele 5c0c5184fb Native DeepSeek datasheet extraction in periscope/src (Fase C3).
Pipeline and LCSC resolve call datasheet_extract; inherited extraction.py
stays in dependency as fallback. No Anthropic Console skill ids.
2026-09-20 15:26:21 +02:00
michele a96ee2e88a Stop periscope/src importing PinScope validate.py after live C2 smoke.
PCB review and src checks use native parse, constraints lookup, and
review_session. Inherited validate.py and validation_tools.py stay in
dependency/.
2026-09-20 15:21:32 +02:00
michele 974923b2e6 Native DeepSeek review loop in periscope/src (Fase C2).
Live review_ic_async comes from review_session; PinScope validate.py and
validation_tools.py stay in dependency as _inherited_review_ic_async fallback.
2026-09-20 15:14:21 +02:00
michele a0a2f5bdbf Fix DeepSeek-only tests after env file moves to the repo root.
Give the routing tests a dummy key so they do not require a live .env.
2026-09-20 14:33:23 +02:00
michele c362ef8a56 Split native Periscope (periscope/src) from inherited PinScope (periscope/dependency).
Keep validate.py and the finding engine as-is. AGPL LICENSE stays at the repo root.
Docker overlays dependency then src. Do not delete the inherited tree.
2026-09-20 14:31:42 +02:00
michele 0a75e5971a Gate PCB SI not_reviewed to board ICs, not the shared library.
Emmaforo listed 20 stale 1.5–1.7 MPNs (LAN8720A, W25Q, …) as
not reviewed while the four BOM ICs were already extracted and reviewed.
2026-09-20 14:05:03 +02:00
michele 312057b6d3 Gate SI layout_rules to the quoted bus, not EN RC onto USB.
PE-SI-009 no longer treats ESP32 CHIP_PU/EN RC as a USB series R.
USB without a library Z number stays PE-SI-010 measurement-only.
Pintable skill 1.13.0 requires net_class on SI kinds (usb2/usb3/MDI/RGMII/DDR3).
2026-09-20 13:13:19 +02:00
michele a63e5bd7ab Fase A identity on PCB HEAD: operator fence, keep BOM/SPOF/EMI.
Replace Faradworks Inc. TOS/privacy/contact/metadata with Michele Bigi.
Dual-read pinscope_* keys; write periscope_* only. AGPL LICENSE and
GitHub fork parent unchanged. validate.py not edited.
2026-09-20 12:41:17 +02:00
michele 1b3529501f Ship remaining PCB plan slices: BOM chain, SPOF, EMI FACT, gated Tj.
Package/pinout/ratings mismatches, SPOF as REVIEW, EMI only with a
datasheet quote, and Tj from copper+vias+θJA when every parameter exists.
Re-extract SI layout_rules from 1.12.0; ImpedenceFinder license stays UNKNOWN.
2026-09-20 12:29:27 +02:00
michele 65a91419a2 Check ImpedenceFinder against datasheet SI rules, not a dump table.
Each layout_rules SI requirement (diff/SE Z, skew, max length, spacing,
ref plane, vias, layer, return, series R) is one PASS/FAIL/MARGIN finding
with FACT and REQUIREMENT. USB/HDMI/PCIe/ETH/LVDS/DDR only; I2C GPIO CC
and analog REGN are skipped. No invented 90 Ω.
2026-09-20 10:45:27 +02:00
michele 187605763d Treat finished PCB review as complete, not a raw SSE error.
The status watcher synthesized pcb_error with pcb_status=complete (terminal)
when the worker finished before pcb_complete arrived. Map that hatch to
pcb_complete, publish the event before flipping status, and send /pcb to
the layout report tree.
2026-09-20 10:23:53 +02:00
michele 1f3876eadc Fix findings tree TypeScript duplicate findings prop.
Spread parent props first, then override with the bucketed findings list so Next build typecheck passes.
2026-09-20 10:05:02 +02:00
michele bee6369c1d Replace findings list with a tree; filter ESD/PI false positives.
PE-ESD-001 only on J* connector–IC nets (skip NC, unconnected, VSYS/GND/3V3).
PE-PI-001 treats any capacitor on the rail, including KiCad slash prefixes, as
decoupling. Sort findings ERROR then WARNING then INFO, then RULE/RISK/REVIEW/INFO.
Report sidebar is a collapsed expand-on-click tree instead of an all-open list.
GET /report and complete_findings fail-soft and sort the same way.
2026-09-20 10:03:50 +02:00
michele 342792df2d Ship Fase B slices: hierarchy, derating bands, timing, PI, ESD/return.
ERROR stays only for RULE+MANDATORY. Hierarchy walks component→pin→net→block.
Derating is PASS/MARGIN/RISK from Vop/Vrated. Timing and PI skip without numbers.
ESD and HS return path are REVIEW, not RULE ERROR.
2026-09-20 09:35:04 +02:00
michele facbaa2305 Show Action on finding cards and inject PCB geometry into AI context.
Layout and AI findings always get action (fallback recommendation). The card
renders that sentence in the body. PCB review context now includes vias under
the footprint, copper thickness, nearby widths, courtyard, and keepout polygons.
2026-09-20 09:13:51 +02:00
michele f63c1c3411 Tighten PCB findings: actions, stitch gating, real copper.
Fill action on every finding and show it in the report. Stitch/return only
on large HS/power nets. Parse stackup thickness, arcs, and vias from the
board. IC courtyard pad copper is not PE-PLC-004 RULE. Recommended RC/cap
stay REVIEW.
2026-09-20 08:58:54 +02:00
michele 1e379f6042 Restore build_placement_plan import in the PCB pipeline.
MODE=pcb classify crashed with NameError after the finding-engine import swap.
2026-09-20 08:44:26 +02:00
michele dc65e96a22 Apply the finding engine to schematic and PCB reviews.
FACT, REQUIREMENT, and INFERENCE are separate fields; datasheet provenance
lives in the rule DB so Recommended cannot stay ERROR; LLM output is REVIEW.
Designer decisions persist across rescans. Schematic and PCB share one library
and the same finding object in the report UI.
2026-09-20 08:38:59 +02:00
michele 8f4ebc645c Share library/extracted for schematic and PCB review.
PCB AI skips a second PDF exam (pintable cache, pdf_path=None) and the report
gains a PCB exam section plus power-trace, thermal, via, Kelvin, and GND-stitch
checks grounded in board geometry and extracted specs.
2026-09-20 08:32:23 +02:00
michele f3f96ea4d1 Treat KiCad /net vs schematic net as one hierarchy finding.
Pad-net compare strips leading slash and nested sheet path so /ESP32_EN
matches ESP32_EN. If every mismatch is only that prefix, emit PE-LAY-003
once instead of per-pad reconnect errors.
2026-09-20 08:10:34 +02:00
michele 89a484830e Unstick analysis running when the worker is dead.
A container rebuild left Emmaforo status=running with no process, so
PCB start kept 409. Heal on GET now matches placement/PCB: complete if
report.json exists, otherwise error.
2026-09-20 00:59:22 +02:00
michele 3e2ba269f9 Write project.json to the storage owner prefix.
update_project used meta.user_id for the path, so JWT projects that still
have user_id=local never persisted pcb_status=queued and the PCB worker
exited as draft. Point writes at the prefix used to read the project.
2026-09-20 00:57:15 +02:00
michele 344ecb3389 Join railway-caddy network pinscope_pinscope after compose up.
Caddy reverse_proxies periscope-frontend by Docker DNS and is not on
the compose project bridge; attach the app containers so HTTPS stops 502.
2026-09-20 00:37:04 +02:00
michele ddab6917a3 Keep Caddy on pinscope_periscope after compose rename.
Pin the app bridge to the pre-rename network name and add DNS aliases
pinscope / periscope-frontend so the host proxy can reach the stack again.
2026-09-20 00:35:12 +02:00
michele 6b0e44a50c Pin VPS deploy to /root/periscope only.
Refuse update-periscope.sh unless dirname resolves to the canonical
checkout, set compose project name periscope, and document that the
GitHub clone URL may still be manvalan/pinscope.
2026-09-20 00:15:34 +02:00
michele 16c606ae3d Add MODE=pcb layout exam job with AI and deterministic checks.
Parallel pcb_status pipeline: parse board, classify domains/groups,
inventory traces, PE-LAY/PLC/SI/DRT checks, per-IC datasheet review.
Findings merge into the report UI. No auto-place or pcbnew write-back.
2026-09-19 22:54:17 +02:00