Record increment #3, verification, token estimate, and the token-ceiling
test-design correction.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add resource-bounds, verifying the configured wsh_limits ceilings actually
bound the portable core: oversized source, strings, and lists are rejected
with WSH_ERR_RESOURCE, variables and retained diagnostics are capped, and a
tight token or AST-node ceiling bounds lexing/parsing (rejected or reported
non-complete) while a generous ceiling completes. This exercises the
WSH-DFS-0001 availability control through the public API. Wired as the
M9;security;limits CTest.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a deterministic fuzzing smoke harness that drives untrusted byte
sequences through the public decode, lex, and parse surface and walks the
resulting AST. It asserts each input is rejected cleanly or produces a
bounded, freed result, and that pathological inputs (100k-deep nesting,
long runs, unbalanced quoting) reach a defined syntax status instead of
unbounded recursion or a crash, exercising the parser depth bound. The
fixed seed makes any failure reproducible. Wired as the M9;security;fuzz
CTest, passing 30k+ inputs without fault.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add the M9 work plan (objective/scope, baseline/assumptions, deliverables,
risks/controls, roles/verification, and the 205k phase forecast) grounded in
the M9 milestone scope and WSH-DFS-0001, and start the M9 work log. Native
Windows 2000, native ARM64, and hostile-host claims are recorded as
environment-gated gaps rather than inferred on the x64 review host.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add the M8 closeout (outcome, exit criteria with the recorded version-resource
limitation, verification summary, metrics, and the ARM64/version-resource
handoff). Mark M8 complete in the Milestone Status Record, record the post-M8
recalibration (within the 135k budget, roadmap unchanged), set the work-log
status to Complete, and list M8 as implemented in the README.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record increment #15, the m8-evidence verification, token estimate, and mark
the evidence phase done in the handoff.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Extend the run-m8-test harness to write a controlled execution-evidence
record per case (test case, specification and shared-library SHA-256,
requirement references parsed from the specification, source revision,
architecture, configuration, timestamps, captured output, and overall
status). Wire the m8-evidence gate that validates six passing evidence
records, matching the evidence discipline of the earlier milestones. The
records are structured TeX text validated by the WSP evidence tool and do
not require the TeX pipeline to compile.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record increment #14, the traceability verification, controlled test/triple
measurements, token estimate, and the refined handoff (Specify done;
evidence and closeout remain).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add the M8 requirements (docs/requirements/m8), controlled TeX test
specifications (docs/tests/m8), and PowerShell test implementations
(tests/m8) as bidirectionally traceable TC-0100..TC-0105 triples covering
ABI conformance and misuse, the exact export surface, the C host, the FFI
host, header self-containment, and installed-SDK consumption.
Wire the m8-traceability gate and the controlled m8-TC-* cases through a
shared run-m8-test harness that executes the built embedding artifacts,
consolidating the earlier direct embedding tests into the controlled pattern
used by every other milestone.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record the M8 review: checklist across ABI scope, composition, export
control, conformance, misuse, hygiene, host examples, installed SDK,
versioning, and compatibility; the defect patterns and resolutions
(D-0801, export-all leak, FFI bitness); and residual boundaries (PE
version resource, ARM64, WSP Specify/evidence).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record increment #12, install/consumption verification, token estimate, and
mark the installed-header handoff item complete.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Install the SDK to a staging prefix, compile the C host example against only
the installed public headers, link the installed import definition, and run
it against the installed DLL. This proves the shipped SDK layout (headers,
import library, DLL) is self-contained and consumable by an external host
with no in-tree path or internal type. Registered as embedding-installed-sdk.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record increments #10-#11, verification runs, token estimates, the PE
version-resource finding, and the refined handoff.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add abi-header-hygiene, a translation unit that includes only the four
public embedding headers, references one entry point from each, compiles
standalone under the strict flags, and links from the static library. This
extends self-containment and no-internal-type coverage to evaluator.h and
parser.h so a missing include or internal-only leak fails the build.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record the M8 embedding SDK design as implemented: library composition and
the ABI 1 scope (excluding the Windows runtime), the WSH_API export-control
mechanism and its bidirectional verification, handle/ownership/diagnostic
model with defined misuse, the dual static/shared conformance strategy, the
C and Python FFI host examples, and the version/compatibility approach.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record increment #9, the 101-symbol manifest, verification, and the refined
version-resource handoff.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add wsh_embedding_abi_version(), the runtime counterpart of the
WSH_EMBEDDING_ABI macro, so a host can negotiate ABI compatibility without
recompiling against the header. Export it as part of ABI 1 (manifest now
101 symbols), assert the runtime value agrees with the compile-time macro
in the C conformance test, and check it across the boundary in the Python
FFI host.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record increment #8, cross-architecture verification results, and the
updated handoff (x86 verified; arm64 pending native execution).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Cross-architecture verification showed the x86 embedding suite passes with a
clean 100-symbol export set, but the embedding-host-python test failed under
the x86 target because the 64-bit system interpreter cannot load a 32-bit
DLL (WinError 193). Query the interpreter bitness at configure time and only
register the FFI test when it matches the target architecture, skipping with
a clear status message otherwise. The C conformance, host, and export
manifest tests continue to cover every architecture.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record increment #7, the WSH_API export-control decision, the 286->100
export reduction, verification runs, and the updated handoff (export gate
now closed).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace export-all with an explicit, annotation-driven export set. Add
WSH_API (wsh/api.h), expanding to __declspec(dllexport) under
WSH_SHARED_BUILD and empty otherwise, and mark the 100 public declarations
in core, evaluator, parser, and version headers. With any dllexport marker
present TinyCC exports only the marked symbols, so the DLL export set drops
from 286 (runtime, CRT, and internal WSH symbols) to exactly the 100 ABI 1
functions. Static consumers and the executable see an empty marker and are
unchanged.
Strengthen verify-abi-exports to assert the exported set is exactly the
manifest: nothing missing and nothing extra, closing both halves of the M8
export exit gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record increment #6, the ABI-scope decision, measurements, and a detailed
handoff for the remaining M8 work (export restriction, version resource,
WSP phase artifacts, cross-architecture).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add the approved ABI 1 export manifest (the 100 public wsh_* functions from
core, evaluator, parser, and version headers; the separate windows-runtime
host library is intentionally excluded from the portable embedding DLL) and
a verify-abi-exports test that asserts every manifest symbol is exported by
the shared library. Registered as the M8;embedding;quality CTest case.
This is the positive half of the export exit gate. Restricting the DLL to
export only the manifest (it currently also exports runtime/CRT internals
via export-all) is tracked as the next M8 task.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record increment #5, defect D-0801 and its closure, the shared-library
compilation decision, verification runs, and running token estimates.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The shared library was built from wshlib.c linking the static core archive,
so the linker pulled only the version objects referenced by wshlib.c and the
DLL omitted the rest of the embedding ABI (wsh_context_create and the whole
context/value/diagnostic surface were absent). A ctypes host surfaced the
gap: version accessors resolved but wsh_context_create was not found.
Compile the shared WSH_CORE_SOURCES directly into wsh_shared and link the
runtime instead of the static core archive, so the whole ABI is present in
and exported from the DLL. Consumers of wsh_shared now resolve the surface
from the DLL import definition rather than a statically linked copy, which
also makes the shared conformance test genuinely exercise the DLL.
Add examples/embedding/host.py, a Python ctypes FFI host, wired as the
optional embedding-host-python CTest asserting "host.py: ok".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Build the same ABI conformance and misuse cases against the shared
embedding library and register them as abi-conformance-shared, proving the
static archive and the shared DLL expose behaviorally equivalent surfaces.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add examples/embedding/host.c, a minimal C host that includes only the
installed public headers and links the static embedding library. It creates
an isolated context, publishes and reads back a list-valued variable,
records a diagnostic, and releases everything without touching any internal
type or process-global state. Built and run as the M8;example;embedding
CTest case asserting the deterministic "host: ok" completion line.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add abi-conformance-tests, linked against the static embedding library
using only the installed public headers. It asserts the frozen
WSH_EMBEDDING_ABI value and version accessors, exercises the context,
variable, export, and diagnostic lifecycle as an external host would, and
proves documented misuse (null owners/outputs, absent variables,
out-of-range indices, empty status lists) returns a defined error instead
of crashing. Registered as the M8;unit;embedding CTest case.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add the M8 (Embedding SDK) work plan following the WSP milestone template:
objective/scope, baseline/assumptions, deliverables, risks/controls, roles
and verification, and the 135k-token phase forecast. Also record M7 as
complete in the Milestone Status Record.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>