Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions .github/workflows/REVIEW.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,13 @@ such step enforces its rule automatically, with no reviewer involved -
`skills/internal/preflight.md` sec."doc.yml - the gates", sec."extended_checks.yml".

**A diff that adds or changes a per-PR gate step - a workflow step that runs on
`pull_request` and fails the lane when it finds a defect - makes that step fail on every
defect in what it checks, and on nothing else.**
`pull_request` and fails the lane when it finds a defect - makes the step's failure the
lane's failure: no `continue-on-error`, no trailing `|| true`, no swallowed exit code.**

**A diff that adds or changes a per-PR gate step states a run of that step's command on the
lane's platform in its PR body or commit message; a green run of that lane on the PR's head
commit is that evidence.** A step that fails for a non-defect turns a green branch red for
everyone.

**A diff that adds or changes a step in `pages.yml` that names the deployed games writes
that list as a `for g in <ids>; do` loop.** `examples/games/REVIEW.das` (repo root) reads
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/extended_checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -523,6 +523,7 @@ jobs:
run: |
set -eux
python3 utils/watchdog/test_tray_state.py
python3 utils/watchdog/test_consent.py

- name: "Test pip wheel repack (python)"
if: matrix.target == 'linux'
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,8 @@ jobs:
cp site-dasllama/robots.txt _site_dasllama/
cp site-dasllama/sitemap.xml _site_dasllama/
cp site-dasllama/feed.xml _site_dasllama/
cp site-dasllama/files/* _site_dasllama/files/
# -R: files/ now carries subdirectories (files/fonts/); a bare * would fail on them
cp -R site-dasllama/files/. _site_dasllama/files/

# Shared visual language, staged from the daslang.io tree — single source
# in the repo, mirrored by site-dasllama/serve.py for local preview.
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
BSD 3-Clause License

Copyright (c) 2018-2026, Gaijin Entertainment
Copyright (c) 2018-2026, Gaijin Games Kft.
All rights reserved.

Redistribution and use in source and binary forms, with or without
Expand Down
12 changes: 11 additions & 1 deletion doc/source/_static/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
/* `@import` must precede all other rules (CSS 2.1 §6.3) — keeping this
* at the top of the file so browsers actually fetch the web fonts. A
* later `@import` after `:root` would be silently dropped. */
@import url('https://fonts.googleapis.com/css2?family=Inter+Tight:ital,wght@0,400;0,500;0,600;0,700;1,400;1,600&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
@import url('fonts/fonts.css');

:root {
--bg: #0d0c0a;
Expand Down Expand Up @@ -433,3 +433,13 @@ footer a { color: var(--fg-dim) !important; }
.highlight .n { color: var(--fg); }
.highlight .o, .highlight .p { color: var(--fg-dim); }
.highlight .err { color: var(--red); background: transparent; border: none; }

/* LEGAL footer links (layout.html footer block) */
.forge-legal-links {
margin-top: 8px;
font-size: 90%;
color: var(--fg-faint);
}
.forge-legal-links a {
color: inherit;
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
180 changes: 180 additions & 0 deletions doc/source/_static/fonts/fonts.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
/* cyrillic-ext */
@font-face {
font-family: 'Inter Tight';
font-style: italic;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-italic-cyrillic-ext.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Inter Tight';
font-style: italic;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-italic-cyrillic.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Inter Tight';
font-style: italic;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-italic-greek-ext.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Inter Tight';
font-style: italic;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-italic-greek.woff2) format('woff2');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Inter Tight';
font-style: italic;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-italic-vietnamese.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Inter Tight';
font-style: italic;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-italic-latin-ext.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Inter Tight';
font-style: italic;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-italic-latin.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'Inter Tight';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-normal-cyrillic-ext.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Inter Tight';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-normal-cyrillic.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Inter Tight';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-normal-greek-ext.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Inter Tight';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-normal-greek.woff2) format('woff2');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Inter Tight';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-normal-vietnamese.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Inter Tight';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-normal-latin-ext.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Inter Tight';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(InterTight-normal-latin.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(JetBrainsMono-normal-cyrillic-ext.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(JetBrainsMono-normal-cyrillic.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(JetBrainsMono-normal-greek.woff2) format('woff2');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(JetBrainsMono-normal-vietnamese.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(JetBrainsMono-normal-latin-ext.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(JetBrainsMono-normal-latin.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
11 changes: 11 additions & 0 deletions doc/source/_templates/layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,14 @@
<div id="docsearch"></div>

{%- endblock %}

{# LEGAL links block — GDPR/EU distributor requirement: Terms, Privacy, license
reachable from every docs page. Rendered under the theme footer. #}
{%- block footer %}
{{ super() }}
<div class="forge-legal-links">
<a href="https://legal.gaijin.net/termsofservice" rel="nofollow">Terms of Service</a> ·
<a href="https://legal.gaijin.net/privacypolicy" rel="nofollow">Privacy Policy</a> ·
<a href="https://github.com/GaijinEntertainment/daScript/blob/master/LICENSE">BSD 3-Clause License</a>
</div>
{%- endblock %}
3 changes: 3 additions & 0 deletions doc/source/reference/utils/dasllama_server.rst
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ Endpoints
* - ``POST``
- ``/exchange/retune``
- Arm a local re-tune and restart — the next boot races this box
* - ``POST``
- ``/exchange/consent``
- ``{"accept": true|false}`` — record the first-contact choice about contacting the exchange; accept on an untuned box drains and restarts to run the lookup
* - ``POST``
- ``/gc``
- Schedule a validated collection at the next lifecycle safe point; concurrent requests coalesce
Expand Down
2 changes: 1 addition & 1 deletion install/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,5 +160,5 @@ Binaries produced by `cmake --install` are ad-hoc code signed automatically, whi

## License

BSD 3-Clause License - Copyright (c) 2019-2026, Gaijin Entertainment.
BSD 3-Clause License - Copyright (c) 2018-2026, Gaijin Games Kft.
See `LICENSE` for the full text.
8 changes: 6 additions & 2 deletions modules/dasLLAMA/ARCHITECTURE_ENGINE.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,12 @@ file builds an `ArchDesc` (name * `configure` * the `ArchBlocks` fn-ptr quad * `
(record stores + tune sidecars); the dasllama.io ladder service builds on it.
- **`dasllama/dasllama_exchange.das`** - the sidecar-exchange client (a sanctioned public entry point): the boot-time
lookup/apply (llvm_tune's scope resolver - a verified per-box match downloads instead of a
~20-minute tune), the privacy-stripped submit rails, and the control-page surface
dasllama-server serves at `/exchange`.
~12-minute tune), the privacy-stripped submit rails, and the control-page surface
dasllama-server serves at `/exchange`. The first-contact consent gate (GDPR) sits ahead of
every lookup: an explicit `exchange_*` config counts as the expressed choice, otherwise the
`<stem>.consent` sidecar-sibling file governs - unset asks on a real terminal, or emits
`@sidecar consent state=needed` for the watchdog dialog / control page, and no request
leaves until a surface records "accepted".
- **`benchmarks/asr/mem_census.sh`** - the peak-memory census (`/usr/bin/time -l` around one
asr_bench process per cell; macOS only) - the interim footprint instrument until a footprint
leg lands in `gen_bench_records`; its numbers live in `PERF_LEDGER.md`, never the stores.
Expand Down
6 changes: 6 additions & 0 deletions modules/dasLLAMA/ARCHITECTURE_MEASUREMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,9 @@ stages, tokenizer build) - the rails do not apply. A clock whose value feeds log
flow, not instrumentation; it is marked `// clock: control` so the sweep and any future lint
leave it alone.

The override-announce rule (REVIEW.md) draws its boundary here: a knob or setter whose purpose
is timing still counts as an override when it moves computed numerics - two GEMM forms of the
same math differ in float terms - while one that changes only WHEN work happens does not, and
a CLI flag is never an override (it is the run's own command line, visible where the run is
launched).

4 changes: 2 additions & 2 deletions modules/dasLLAMA/ENVIRONMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,8 +241,8 @@ Overrides for the dasllama.io exchange client.

| Variable | Type | Default | Effect |
|---|---|---|---|
| `DASLLAMA_EXCHANGE_URL` | text | unset | Sidecar exchange base URL override (tests, mirrors); unset = the baked-in dasllama.io. |
| `DASLLAMA_EXCHANGE_ACCEPT` | text | unset | One-shot exchange accept-policy override: verified | any | off; unset = the app config's exchange_accept. The watchdog arms 'any' on a relaunch when the user adopts an unverified sidecar over finishing a tune. |
| `DASLLAMA_EXCHANGE_URL` | text | unset | Sidecar exchange base URL override (tests, mirrors); unset = the baked-in dasllama.io. Setting it is an expressed choice to use the exchange - the first-contact consent question is skipped (announced at boot). |
| `DASLLAMA_EXCHANGE_ACCEPT` | text | unset | One-shot exchange accept-policy override: verified | any | off; unset = the app config's exchange_accept. The watchdog arms 'any' on a relaunch when the user adopts an unverified sidecar over finishing a tune. Setting it is an expressed choice to use the exchange - the first-contact consent question is skipped (announced at boot). |

## daslang core knobs dasLLAMA honours

Expand Down
34 changes: 19 additions & 15 deletions modules/dasLLAMA/REVIEW.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# dasLLAMA Code Review Checklist

**Read `REVIEW_COMMON.md` (repo root) first - its contract binds this checklist.** Architecture doc:
`ARCHITECTURE.md`. Planned work: `followup_general.md`, `followup_vulkan.md`; the perf
backlog is `PERF_LEDGER.md` - a performance followup goes there, everything else in the
two followup ledgers.
**Read `REVIEW_COMMON.md` (repo root) first - its contract binds this checklist.** Architecture
docs: `ARCHITECTURE.md` and the `ARCHITECTURE_*.md` companions it indexes. Planned work:
`followup_general.md`, `followup_vulkan.md`, `PERF_LEDGER.md` (performance goes to the perf
ledger, everything else to the followup ledgers).

**A dasLLAMA `[test]` file, wherever the diff puts it, answers to this module's
`tests/REVIEW.md`.**
Expand Down Expand Up @@ -87,8 +87,12 @@ file's sec.1 charter line in `ARCHITECTURE_ENGINE.md`, `ARCHITECTURE_GPU.md`, or
**Platform-specific code in an engine file (`dasllama/`) lands only in that platform's backend
file.**

**A new engine concern that is not `Model`/`Session`/`Config` state gets its own file, not
more of `dasllama/dasllama_common.das`.**
**A diff that adds a new engine concern that is not `Model`/`Session`/`Config` state to
`dasllama/dasllama_common.das` is a defect - give the concern its own file.**

**A boot-path prompt (code that runs at startup, before the first request) that reads stdin
without first proving both stdin and stdout are terminals is a defect - emit the question as
a `@sidecar` event instead.** A supervised or piped boot must never block on input.

**A NEW clock read paired with a print or log of the elapsed interval is a defect in an engine
file (`dasllama/`) outside a cold one-shot load, bake, map, or tokenizer-build progress log** -
Expand Down Expand Up @@ -124,14 +128,13 @@ template strings any of them look up, records a `tests/test_tokenizer.das` run w
EXECUTED, not skipped.**

**A diff that adds an override, or gives one a new effect, without the announce is a defect.**
An override is an environment knob or an exported runtime setter that moves a gate, policy, or
threshold off its default and thereby changes what the run writes, reads, mints, or computes -
including a knob or setter whose purpose is timing when it moves computed numerics, since two
GEMM forms of the same math differ in float terms. A knob or setter that changes only WHEN work
happens is not an override, and a CLI flag is never one. The announce is a line the run prints
where the override changes the outcome, naming it by the spelling a user would set - the
environment variable name, the sidecar key, or the setter's function name. Per-site repeats are
fine. A set-but-inert override stays silent.
An override is an environment knob, an exported runtime setter, or an on-disk state file that
moves a gate, policy, or threshold off its default and thereby changes what the run writes,
reads, mints, or computes - a timing knob included when it moves computed numerics. A knob
that changes only WHEN work happens is not one, and a CLI flag is never one. The announce is
a line the run prints where the override changes the outcome, naming it by the spelling a
user would set - the environment variable name, the sidecar or file key, or the setter's
function name. Per-site repeats are fine; a set-but-inert override stays silent.

**A change to user-facing API updates every place it is shown: a tutorial source, `.rst` page,
docstring, help string, `README.md`, or checked-in document still showing the old call, flag, or
Expand Down Expand Up @@ -238,7 +241,8 @@ file** - a single-caller helper sanctioned as tower-worthy is ledgered on
**A harness that prints output for another tool to compare exits non-zero when its run ends
without those comparison lines - wrong flags, failed load.**

**Tool wire text - building or parsing - is produced only in `dasllama/dasllama_tools.das`.**
**Tool wire text (the text of a model's tool/function call, built or parsed) is produced only
in `dasllama/dasllama_tools.das`.**

**No engine file (`dasllama/`) other than `dasllama/dasllama_audio_io.das` requires `audio` (the
miniaudio decode module).**
Expand Down
4 changes: 2 additions & 2 deletions modules/dasLLAMA/dasllama/dasllama_env.das
Original file line number Diff line number Diff line change
Expand Up @@ -653,10 +653,10 @@ struct public ExampleEnv {

[EnvConfig(env_prefix = "DASLLAMA")]
struct public ExchangeEnv {
@clarg_doc = "Sidecar exchange base URL override (tests, mirrors); unset = the baked-in dasllama.io."
@clarg_doc = "Sidecar exchange base URL override (tests, mirrors); unset = the baked-in dasllama.io. Setting it is an expressed choice to use the exchange - the first-contact consent question is skipped (announced at boot)."
exchange_url : string = ""

@clarg_doc = "One-shot exchange accept-policy override: verified | any | off; unset = the app config's exchange_accept. The watchdog arms 'any' on a relaunch when the user adopts an unverified sidecar over finishing a tune."
@clarg_doc = "One-shot exchange accept-policy override: verified | any | off; unset = the app config's exchange_accept. The watchdog arms 'any' on a relaunch when the user adopts an unverified sidecar over finishing a tune. Setting it is an expressed choice to use the exchange - the first-contact consent question is skipped (announced at boot)."
exchange_accept : string = ""
}

Expand Down
Loading
Loading