@fateforge/xpedition-cli 1.0.0

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 (64) hide show
  1. package/.agent/AGENT.md +59 -0
  2. package/.agent/AGENT_zh.md +59 -0
  3. package/.agent/CLI-SPEC.md +1073 -0
  4. package/.agent/CLI-SPEC_zh.md +891 -0
  5. package/.agent/SEC-SPEC.md +158 -0
  6. package/.agent/SEC-SPEC_zh.md +132 -0
  7. package/.agent/SKILL-SPEC.md +266 -0
  8. package/.agent/SKILL-SPEC_zh.md +221 -0
  9. package/.agent/SPEC_VERSION +1 -0
  10. package/AGENTS.md +34 -0
  11. package/AGENTS_zh.md +33 -0
  12. package/CHANGELOG.md +795 -0
  13. package/CODE_OF_CONDUCT.md +35 -0
  14. package/CODE_OF_CONDUCT_zh.md +35 -0
  15. package/CONTRIBUTING.md +50 -0
  16. package/CONTRIBUTING_zh.md +42 -0
  17. package/LICENSE +21 -0
  18. package/NOTICE.md +16 -0
  19. package/NOTICE_zh.md +13 -0
  20. package/README.md +200 -0
  21. package/README_zh.md +178 -0
  22. package/SECURITY.md +108 -0
  23. package/SECURITY_zh.md +83 -0
  24. package/docs/AGENT_HARDENING_EVIDENCE.md +102 -0
  25. package/docs/AGENT_READS.md +74 -0
  26. package/docs/AGENT_READS_METRICS.json +216 -0
  27. package/docs/AGENT_READS_VALIDATION.json +13 -0
  28. package/docs/API_INVENTORY_BINDING_VALIDATION.json +16 -0
  29. package/docs/API_INVENTORY_DESIGN.md +90 -0
  30. package/docs/API_INVENTORY_REVIEW.md +59 -0
  31. package/docs/API_INVENTORY_VALIDATION.json +29 -0
  32. package/docs/API_INVENTORY_WINDOWS_VALIDATION.json +29 -0
  33. package/docs/COMPATIBILITY.md +499 -0
  34. package/docs/CONFIRMATION_CONCURRENCY_VALIDATION.json +33 -0
  35. package/docs/DIAGNOSTIC_BOUNDARIES.md +33 -0
  36. package/docs/DIAGNOSTIC_BOUNDARIES_VALIDATION.json +12 -0
  37. package/docs/E2E.md +445 -0
  38. package/docs/EVALS.md +134 -0
  39. package/docs/MCP.md +20 -0
  40. package/docs/NATIVE_ADAPTER.md +141 -0
  41. package/docs/OPEN_SOURCE_CHECKLIST.md +61 -0
  42. package/docs/OPEN_SOURCE_CHECKLIST_zh.md +61 -0
  43. package/docs/PIN_WORKFLOW_VALIDATION.json +28 -0
  44. package/docs/PLACEMENT_TASKS.md +99 -0
  45. package/docs/PLACEMENT_TASKS_VALIDATION.json +36 -0
  46. package/docs/REFERENCE_ADOPTION.md +67 -0
  47. package/package.json +48 -0
  48. package/scripts/run.js +46 -0
  49. package/skills/xpedition-cli/SKILL.md +300 -0
  50. package/skills/xpedition-cli/reference/agent-hardening.md +58 -0
  51. package/skills/xpedition-cli/reference/api-inventory.md +58 -0
  52. package/skills/xpedition-cli/reference/confirmation-safety.md +55 -0
  53. package/skills/xpedition-cli/test-prompts.json +62 -0
  54. package/skills/xpedition-pcb/SKILL.md +244 -0
  55. package/skills/xpedition-pcb/reference/fabrication.md +26 -0
  56. package/skills/xpedition-pcb/reference/hand-routing.md +33 -0
  57. package/skills/xpedition-pcb/reference/pcb-conventions.md +162 -0
  58. package/skills/xpedition-pcb/reference/placement-tasks.md +28 -0
  59. package/skills/xpedition-pcb/test-prompts.json +62 -0
  60. package/skills/xpedition-schematic/SKILL.md +244 -0
  61. package/skills/xpedition-schematic/reference/pin-assignment.md +61 -0
  62. package/skills/xpedition-schematic/reference/schematic-conventions.md +306 -0
  63. package/skills/xpedition-schematic/reference/schematic-design-format.md +219 -0
  64. package/skills/xpedition-schematic/test-prompts.json +52 -0
@@ -0,0 +1,90 @@
1
+ # Read-only API inventory: source references and review record
2
+
3
+ *Historical record: written for pull request #9 before it was merged on 2026-09-18;
4
+ kept as the design and evidence record. The current contract is
5
+ `xpedition-cli reference`.*
6
+
7
+ Independent implementation based on main d42b226. Existing draft PRs remain
8
+ unchanged. This is the metadata-investigation part of the public-reference adoption
9
+ work, separate from offline pin assignment and native write hardening.
10
+
11
+ ## References and adoption
12
+
13
+ - [SiemensEDA Python Interface, pinned 54b3c3f](https://github.com/EdgarMerger/SiemensEDA_Python_Interface/tree/54b3c3f85d9fbcf10259705e5a3a11399794c12f):
14
+ motivates inspecting actual installed types rather than guessing API names or
15
+ adopting another version's heuristic annotations. No code or library is copied.
16
+ - [Microsoft LoadTypeLib](https://learn.microsoft.com/en-us/windows/win32/api/oleauto/nf-oleauto-loadtypelib):
17
+ supplying a path disables the legacy automatic-registration behavior. pywin32
18
+ exposes LoadTypeLib, not LoadTypeLibEx; the code explicitly requires the resolved
19
+ absolute path. No filename-only lookup, ProgID or activation fallback is used.
20
+ - pywin32 published metadata definitions:
21
+ [TYPEATTR](https://mhammond.github.io/pywin32/TYPEATTR.html),
22
+ [FUNCDESC](https://mhammond.github.io/pywin32/FUNCDESC.html),
23
+ [VARDESC](https://mhammond.github.io/pywin32/VARDESC.html),
24
+ [ELEMDESC](https://mhammond.github.io/pywin32/ELEMDESC.html).
25
+ Member metadata stays structural, not a guessed Python or JSON input schema.
26
+ Documentation was checked 2026-09-18; actual Windows binding smoke is separate.
27
+
28
+ No third-party source, manuals, binaries or proprietary metadata is distributed by
29
+ this change. Installation metadata is read only when explicitly requested. Reuse
30
+ of upstream implementation code or redistribution of product metadata needs its
31
+ own license review; linked public examples are not blanket permission.
32
+
33
+ ## Interpretation
34
+
35
+ This closes a discovery gap, not an execution gap. A function or property name in
36
+ a TLB does not prove callable behavior, units, state/permission preconditions, safe
37
+ rollback or compatibility with our adapter. All results explicitly deny application
38
+ activation, member invocation, registration request and capability grants.
39
+
40
+ Inventory is constrained and paged; it is not a complete COM browser. It does not
41
+ resolve aliases, inherited interfaces, referenced libraries or events into a full
42
+ object graph. Metadata errors are visible; missing entries are not removed silently.
43
+ It uses local file hashes rather than a mutable published API listing. Hashing
44
+ before/after is ordinary change detection, not a hostile-input sandbox.
45
+
46
+ ## Verification and native gate
47
+
48
+ Unit tests cover discovery without member reads, exact selection, ambiguous and
49
+ unreadable headers, getter/setter classification, omission of defaults/constants,
50
+ failed member reporting, bounded descriptor shapes/counts, file change detection,
51
+ COM lifecycle, non-Windows handling, unsupported inputs/flags and output controls.
52
+ CLI tests run against fake metadata providers on the normal matrix. The separate
53
+ Windows smoke loads stdole2.tlb without application activation and checks the real
54
+ binding, paging data and variable/function descriptors. No Xpedition is involved.
55
+
56
+ The bootstrap writes API_INVENTORY_VALIDATION.json only after the full suite and
57
+ existing quality gates pass. That record covers fake-provider testing; the actual
58
+ Windows smoke publishes its own run-bound JSON evidence. Keep the distinction.
59
+ Before using a discovered product API in a native command, verify it on the target
60
+ installation with an explicit disposable project and operation-specific safety,
61
+ state binding, partial-failure and readback tests. Do not promote inventory findings
62
+ automatically into supported/native-verified command metadata.
63
+
64
+
65
+ ## Real-binding correction
66
+
67
+ The first Windows smoke revealed that the system stdole2.tlb is a PE resource
68
+ container. The smoke harness now extracts its sole TYPELIB as a data/image resource
69
+ without executable initialization; CLI input restrictions remain unchanged.
70
+ The next run reached a binding error. Upstream PythonCOM.cpp confirms pywin32
71
+ exports LoadTypeLib, not the initially assumed LoadTypeLibEx. The implementation
72
+ and fake provider now use the actual one-argument binding with an absolute-path
73
+ guard. Microsoft explicitly documents non-registration for a supplied path.
74
+ No permissive fallback or ctypes COM-pointer wrapper was introduced.
75
+
76
+ The initial 256-test validation record is historical and did not establish real
77
+ binding compatibility. API_INVENTORY_BINDING_VALIDATION.json records the corrected
78
+ suite; the independent Windows smoke then passed (run 35298644634, recorded in
79
+ API_INVENTORY_WINDOWS_VALIDATION.json and API_INVENTORY_REVIEW.md), so the binding
80
+ is tested against standard OLE metadata. System OLE metadata remains distinct from
81
+ target Xpedition evidence.
82
+
83
+
84
+ The remaining metadata calls were checked against the published pywin32 binding.
85
+ GetNames accepts the member ID, not the native C++ output-buffer length argument.
86
+ Both production calls and the strict fake provider now use the one-argument API.
87
+ Reference: https://mhammond.github.io/pywin32/PyITypeInfo__GetNames_meth.html .
88
+ The Windows correction run validates the full suite and the actual standard OLE
89
+ fixture before recording API_INVENTORY_WINDOWS_VALIDATION.json. That is still not
90
+ an Xpedition installation or a call to any discovered application method.
@@ -0,0 +1,59 @@
1
+ # API inventory review handoff
2
+
3
+ *Historical record: written for pull request #9 before it was merged on 2026-09-18;
4
+ kept as the design and evidence record. The current contract is
5
+ `xpedition-cli reference`.*
6
+
7
+ Implementation verified on Windows: `323dcd4ca908edbf73af8302624ea5c6373409ba`.
8
+ This document changes no execution behavior. The PR remains draft/unmerged.
9
+
10
+ ## Executed evidence
11
+
12
+ [Windows validation run 35298644634](https://github.com/fatecannotbealtered/xpedition-cli/actions/runs/35298644634)
13
+ passed the complete **257-test suite**, Ruff lint/format, version consistency and
14
+ the local canonical-contract generation guard, then executed the public inventory
15
+ CLI against the real standard OLE metadata installed on the Windows runner.
16
+
17
+ The CLI observed 42 type headers, 22 members on `IFont`, and four variable
18
+ descriptors on `GUID`. The smoke asserted complete-in-scope results, no issues,
19
+ unchanged input hashes, and the command's explicit non-execution markers. The
20
+ real metadata loader was pywin32; no Xpedition installation or license was used.
21
+ Machine-readable results and normalized source hash are in
22
+ `API_INVENTORY_WINDOWS_VALIDATION.json`. Raw JUnit and JSON outputs are attached
23
+ to the run. Only JSON was uploaded, not the Windows library or extracted binary.
24
+
25
+ ## Corrections found before handoff
26
+
27
+ The initial Linux fake-provider tests did not catch an assumed `LoadTypeLibEx`
28
+ entry that pywin32 does not expose. The actual binding is `LoadTypeLib`; the
29
+ implementation enforces the absolute-path input that Microsoft documents as
30
+ non-registering. It does not fall back to a bare filename or application factory.
31
+ `GetNames` was also aligned to its one-argument Python binding in production and
32
+ in the strict fake provider. The real Windows smoke now passes with these calls.
33
+
34
+ The system `stdole2.tlb` on this runner was actually a PE resource container. The
35
+ smoke harness extracted its sole TYPELIB through resource-only, non-executable
36
+ mapping into a temporary standalone fixture. The public CLI still rejects PE
37
+ containers; its input restrictions were not relaxed to satisfy a test.
38
+
39
+ Historical validation records remain scoped to what they actually tested:
40
+ `API_INVENTORY_VALIDATION.json` is the first 256-test fake-provider run;
41
+ `API_INVENTORY_BINDING_VALIDATION.json` is the later 257-test loader correction;
42
+ `API_INVENTORY_WINDOWS_VALIDATION.json` verifies the corrected member calls and
43
+ real standard-OLE smoke. None is evidence of target Xpedition API semantics.
44
+
45
+ ## Review boundaries
46
+
47
+ Normal PR CI and the permanent metadata smoke independently validate the committed
48
+ tree after this handoff commit. Consult their actual results; the preceding
49
+ Windows run does not by itself establish the later workflow status.
50
+
51
+ No discovered member is callable through this command. Inventory does not prove
52
+ units, preconditions, native support, licensing, transaction/rollback semantics,
53
+ engineer-level task completion, or save/close/reopen durability. Using a product
54
+ API still needs its own implementation, authorization and target-version evidence.
55
+
56
+ This branch does not include the other draft PRs. In particular #8 provides the
57
+ separate saved-observation pin-plan/pin-check task workflow; #4--#7 harden different
58
+ boundaries. Main and those branches remain unchanged. Combined-tree tests and
59
+ preserving all Unreleased notes/Skill guidance are required before a release.
@@ -0,0 +1,29 @@
1
+ {
2
+ "baseline": "d42b226a5b1812b2937ded096bf618b8692c4f9a",
3
+ "run_id": "35297642883",
4
+ "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39",
5
+ "before": {
6
+ "tests": 1,
7
+ "failures": 1,
8
+ "errors": 0,
9
+ "skipped": 0
10
+ },
11
+ "full_suite": {
12
+ "tests": 256,
13
+ "failures": 0,
14
+ "errors": 0,
15
+ "skipped": 0
16
+ },
17
+ "ruff": "passed",
18
+ "version_sync": "passed",
19
+ "contract_local_only": "passed",
20
+ "native_xpedition_executed": false,
21
+ "real_type_library_loaded": false,
22
+ "scope": "fake type metadata; real Windows smoke separate",
23
+ "source_sha256": {
24
+ "xpedition_cli/api_inventory.py": "921db8ee335413b79908e27035455fb4904be86807cd5c6d7e8cc68325532864",
25
+ "xpedition_cli/api_inventory_contract.py": "2f2b1e3c2a6bf5f141035d0c9927780df5c51567b62e34e7231afda08b5f94fc",
26
+ "xpedition_cli/main.py": "4ee1d74b397723566d6982215e0381edc833cf122b0f7f0868d25c3c38168193",
27
+ "xpedition_cli/reference_data.py": "83dd6aa55df294cee7723b85336efb5550850ef1e37178a7d7b282bd6bb55433"
28
+ }
29
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "run_id": "35298644634",
3
+ "platform": "Windows-2025Server-10.0.26100-SP0",
4
+ "full_suite": {
5
+ "tests": 257,
6
+ "failures": 0,
7
+ "errors": 0,
8
+ "skipped": 0
9
+ },
10
+ "ruff": "passed",
11
+ "version_sync": "passed",
12
+ "contract_local_only": "passed",
13
+ "windows_metadata_smoke": {
14
+ "run_id": "35298644634",
15
+ "source_sha256": "58c3b3a2c798ec42eaef8155dd22e2c2f49f53d91b1f1f115a6fc5164b8078f9",
16
+ "system_file_sha256": "815d6c50ad934a42800e52faef5207dd9352ab8c386793422682084c8f604c5d",
17
+ "resource_only_fixture_extraction": true,
18
+ "type_count": 42,
19
+ "interface": "IFont",
20
+ "interface_members_observed": 22,
21
+ "variable_type": "GUID",
22
+ "variables_observed": 4,
23
+ "status": "passed",
24
+ "scope": "Windows standard OLE metadata only",
25
+ "xpedition_executed": false
26
+ },
27
+ "xpedition_executed": false,
28
+ "source_sha256_normalized_lf": "318b7ca470383e7f9928fec6f75bdb9580751bcf1543dc5366c25e3509bf4ab3"
29
+ }