Skip to content

[pull] master from GaijinEntertainment:master#999

Merged
pull[bot] merged 11 commits into
forksnd:masterfrom
GaijinEntertainment:master
May 16, 2026
Merged

[pull] master from GaijinEntertainment:master#999
pull[bot] merged 11 commits into
forksnd:masterfrom
GaijinEntertainment:master

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented May 16, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

borisbat and others added 11 commits May 15, 2026 20:39
Adds Boris's "Internal tools" blog post under site/blog/_posts/ and
four new mouse-data/docs/ cards surfaced while landing the dasImgui
harness + headless initiative (separate PR on borisbat/dasImgui).

Mouse cards:

- daslang-private-require-structural-symbol-gate — the wrapper-module
  pattern where private requires keep GLFW/GL symbols out of user
  scope, used by imgui_harness to make lint guarantees structural
  instead of comment-only.
- dasimgui-new-widget-module-needs-das-module-entry — `.das_module`
  registration is mandatory for new sibling modules under
  modules/dasImgui/widgets/; new file alone won't resolve via
  `require imgui/<name>`.
- daslang-script-flags-need-dash-dash-separator — script-side flags
  via `daslang FILE.das -- --flag` (the `--` is required in
  interpreter mode); daslang-live doesn't pass argv to scripts.
- why-does-my-dastest-integration-test-hang-at-readiness-gate-failed
  ... — captures the require-order land-mine surfaced during
  imgui_harness PR 2 verification: `live/live_api` required before
  `imgui_app + glfw_live` makes `wait_until_ready` time out from a
  popen parent even though external curl gets 200. Workaround:
  reorder requires. Filed as daslang #2677.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ds batch

Extract a single transport-agnostic JSON-RPC 2.0 implementation under
`daslib/jsonrpc` and migrate both in-tree callers onto it. Picks up
JSON-RPC §6 batch (multiple messages in one wire payload) for both
transports. Adds a parallel batch path on the live HTTP transport for
the dasimgui state-control workflow.

Library (daslib/jsonrpc.das):
- Server: parse_request / parse_batch / dispatch_line + envelope helpers
  (response, error, error_with_data, serialize_id).
- Client: make_request (int + string id) / make_notification / make_batch /
  parse_response / parse_response_batch.
- Standard error code constants (PARSE_ERROR ... INTERNAL_ERROR).
- Permissive jsonrpc-field handling by default, opt-in strict=true for
  full §4 compliance.
- compact_json_whitespace transport-framing helper.
- 120 [test] cases under tests/jsonrpc/ across 10 spec-section-aligned
  files. Includes a gc_node reachability test for the borrowed-view
  ParsedRequest.params field (no `root` field needed; daslib JsonValue
  is a plain raw pointer tracked by gc_node, not smart_ptr).

Migrations:
- modules/dasLiveHost/live/live_api_stdio.das: drops 5 duplicate
  publics (-148 lines); handle_jsonrpc_line is now a thin
  jsonrpc::dispatch_line bridge to live_host's dispatch_command.
  tests/live_host/test_live_api_stdio.das deleted (coverage subsumed
  by tests/jsonrpc/).
- utils/mcp/protocol.das: 25 call sites swept onto jsonrpc::*;
  dispatch_jsonrpc rewritten on parse_batch + a new dispatch_one
  helper. The MCP server now accepts JSON-RPC §6 batched tools/call
  requests as a side effect.

HTTP `/commands` + live_commands MCP tool:
- modules/dasLiveHost/live/live_api.das: new POST /commands endpoint —
  body is a JSON array of {name,args} objects, response is a JSON array
  of per-entry results in input order. Continue-on-error: malformed
  entries surface {"error":...} in their slot. Concrete consumer is
  dasimgui state-control bursts.
- utils/mcp/tools/live.das + utils/mcp/protocol.das: new live_commands
  MCP tool wrapping the /commands endpoint.

Examples + tutorials + docs:
- examples/mcp/echo/: minimal client (clargs-driven, Demo + Emit
  modes) + server + README. Pipes end-to-end.
- tutorials/jsonrpc/: three tutorials (request-response, dispatch_line,
  batch). CMake install hook registered.
- doc/reflections/das2rst.das: document_module_jsonrpc registration.
- doc/source/stdlib/handmade/module-jsonrpc.rst (handmade prose) +
  doc/source/stdlib/sec_data_formats.rst toctree entry.
- doc/source/reference/tutorials/jsonrpc_*.rst (3 tutorial RSTs) +
  toctree section in tutorials.rst.
- doc/source/reference/utils/daslang_live.rst: rewritten stdio API
  section to point at daslib/jsonrpc; documented new POST /commands
  endpoint.
- mouse-data/docs/...json-rpc...md: rewritten as canonical pointer to
  daslib/jsonrpc (was "two parallel implementations" history note).

Sphinx -W builds clean. All 120 jsonrpc tests pass; live_host
test_commands (17/17) and test_lifecycle (14/14) regression-clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- tests/aot/CMakeLists.txt: register test_aot_jsonrpc target — the
  tests/jsonrpc/*.das files were running via the AOT-driven test_aot
  driver but had no AOT stubs generated, so every test failed
  error[50101] AOT link failed on the Mac Release builds. Adds the
  standard FILE(GLOB) + DAS_AOT + source-list + dependency wiring.
- utils/mcp/protocol.das: restore request-body logging. The refactor
  hard-coded log_request(method, "") losing the JSON body for every
  incoming MCP call; thread body through dispatch_one so REQ log
  output keeps parity with pre-refactor behaviour.
- tests/jsonrpc/test_parse_single.das: comment said "smart_ptr" but
  JsonValue? is a plain raw pointer tracked by gc_node — reword.
- mouse-data card: last_verified bumped to 2026-05-16 (was earlier
  than created date).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-blog-may15

docs + mouse: blog "Internal tools" + 4 new mouse cards
daslib/jsonrpc: unified JSON-RPC 2.0 library + §6 batch + live_commands batch
…uments

Mirrors daslang.exe behavior. daslang-live ignored everything after `--`
itself but never called setCommandLineArguments, so the script's
get_user_args() (post-`--` slice) returned empty.

Unblocks dasImgui harness `--headless` under live-reload — harness_is_headless()
reads `--headless` via get_user_args() and was unreachable from a
daslang-live session before this. Spawned playwright tests can now run
headless without xvfb on Linux CI (follow-up PR in dasImgui repo).

Smoke:
  daslang-live foo.das -- --headless --headless-frames=60 hello
  -> script's get_user_args() returns ["--headless", "--headless-frames=60", "hello"]

Help-text update reflects the new forwarding behavior.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…e-forward-argv

daslang-live: forward post-`--` argv to scripts
Adds new CLI flag and CodeOfPolicies::log_module_compile_time field
that emits a per-module compile-time breakdown (parse / infer + pass
count / optimize / macro / macro-mods) for every required module,
plus a simulate-time line with the owning module name. Useful for
diagnosing which submodule dominates compile time on large module
graphs (motivating case: profiling a daspkg-installed dasImgui).

- include/daScript/ast/ast.h: new policy field + Program::inferPassesUsed
- src/ast/ast_infer_type.cpp: record outer macro pass count after inferTypes loop
- src/ast/ast_parse.cpp: per-phase local accumulators in parseDaScript;
  new per-module breakdown log; extend top-level summary gate
- src/ast/ast_simulate.cpp: simulate hook now logs module name and
  fires on either log_total_compile_time or log_module_compile_time
- src/builtin/module_builtin_rtti.cpp: register log_module_compile_time
  for RTTI so daslib/rst.das + das2rst see the field
- utils/daScript/main.cpp: -log-compile-time argv + policies wiring
  (both getPolicies() and compile_and_run paths) + help text
- doc/source/stdlib/handmade/structure_annotation-rtti-CodeOfPolicies.rst:
  add description for the new field; also fix a pre-existing missing
  description for max_call_depth that was silently shifting ~30 later
  field descriptions up by one in generated/rtti.rst
- doc/source/reference/language/options.rst: row in options table
- mouse-data/docs/: 3 new cards for the discoveries during this work
  (CodeOfPolicies-field full checklist, das2rst handmade positional
  mapping + silent-shift trap, daslang CLI flag wiring), plus a
  carryover JSON-cast card from a prior session

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-time-cli

daslang: -log-compile-time CLI flag for per-module compile diagnostics
build_blog.py already emits site/blog/feed.xml with every post, but
nothing pointed at it — no <link rel="alternate"> for reader auto-
discovery, no visible link on the index. Adds both:

- <link rel="alternate" type="application/atom+xml"> in template.html
  <head>, so it lands on every generated page (blog index, post pages,
  changelist, news pages). {{root}} resolves to the right relative path
  for each.
- An inline "RSS" text link at the end of the blog index intro
  paragraph. Reuses Forge link styling, no new CSS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@pull pull Bot locked and limited conversation to collaborators May 16, 2026
@pull pull Bot added the ⤵️ pull label May 16, 2026
@pull pull Bot merged commit ee8411e into forksnd:master May 16, 2026
@pull pull Bot had a problem deploying to github-pages May 16, 2026 08:58 Error
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant