@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.
- package/.agent/AGENT.md +59 -0
- package/.agent/AGENT_zh.md +59 -0
- package/.agent/CLI-SPEC.md +1073 -0
- package/.agent/CLI-SPEC_zh.md +891 -0
- package/.agent/SEC-SPEC.md +158 -0
- package/.agent/SEC-SPEC_zh.md +132 -0
- package/.agent/SKILL-SPEC.md +266 -0
- package/.agent/SKILL-SPEC_zh.md +221 -0
- package/.agent/SPEC_VERSION +1 -0
- package/AGENTS.md +34 -0
- package/AGENTS_zh.md +33 -0
- package/CHANGELOG.md +795 -0
- package/CODE_OF_CONDUCT.md +35 -0
- package/CODE_OF_CONDUCT_zh.md +35 -0
- package/CONTRIBUTING.md +50 -0
- package/CONTRIBUTING_zh.md +42 -0
- package/LICENSE +21 -0
- package/NOTICE.md +16 -0
- package/NOTICE_zh.md +13 -0
- package/README.md +200 -0
- package/README_zh.md +178 -0
- package/SECURITY.md +108 -0
- package/SECURITY_zh.md +83 -0
- package/docs/AGENT_HARDENING_EVIDENCE.md +102 -0
- package/docs/AGENT_READS.md +74 -0
- package/docs/AGENT_READS_METRICS.json +216 -0
- package/docs/AGENT_READS_VALIDATION.json +13 -0
- package/docs/API_INVENTORY_BINDING_VALIDATION.json +16 -0
- package/docs/API_INVENTORY_DESIGN.md +90 -0
- package/docs/API_INVENTORY_REVIEW.md +59 -0
- package/docs/API_INVENTORY_VALIDATION.json +29 -0
- package/docs/API_INVENTORY_WINDOWS_VALIDATION.json +29 -0
- package/docs/COMPATIBILITY.md +499 -0
- package/docs/CONFIRMATION_CONCURRENCY_VALIDATION.json +33 -0
- package/docs/DIAGNOSTIC_BOUNDARIES.md +33 -0
- package/docs/DIAGNOSTIC_BOUNDARIES_VALIDATION.json +12 -0
- package/docs/E2E.md +445 -0
- package/docs/EVALS.md +134 -0
- package/docs/MCP.md +20 -0
- package/docs/NATIVE_ADAPTER.md +141 -0
- package/docs/OPEN_SOURCE_CHECKLIST.md +61 -0
- package/docs/OPEN_SOURCE_CHECKLIST_zh.md +61 -0
- package/docs/PIN_WORKFLOW_VALIDATION.json +28 -0
- package/docs/PLACEMENT_TASKS.md +99 -0
- package/docs/PLACEMENT_TASKS_VALIDATION.json +36 -0
- package/docs/REFERENCE_ADOPTION.md +67 -0
- package/package.json +48 -0
- package/scripts/run.js +46 -0
- package/skills/xpedition-cli/SKILL.md +300 -0
- package/skills/xpedition-cli/reference/agent-hardening.md +58 -0
- package/skills/xpedition-cli/reference/api-inventory.md +58 -0
- package/skills/xpedition-cli/reference/confirmation-safety.md +55 -0
- package/skills/xpedition-cli/test-prompts.json +62 -0
- package/skills/xpedition-pcb/SKILL.md +244 -0
- package/skills/xpedition-pcb/reference/fabrication.md +26 -0
- package/skills/xpedition-pcb/reference/hand-routing.md +33 -0
- package/skills/xpedition-pcb/reference/pcb-conventions.md +162 -0
- package/skills/xpedition-pcb/reference/placement-tasks.md +28 -0
- package/skills/xpedition-pcb/test-prompts.json +62 -0
- package/skills/xpedition-schematic/SKILL.md +244 -0
- package/skills/xpedition-schematic/reference/pin-assignment.md +61 -0
- package/skills/xpedition-schematic/reference/schematic-conventions.md +306 -0
- package/skills/xpedition-schematic/reference/schematic-design-format.md +219 -0
- 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
|
+
}
|