mirror of
https://github.com/razzant/ouroboros.git
synced 2026-10-03 20:27:56 +00:00
release: 7.0.0-rc.2 (packaged pre-release; rc.1 never built)
Carriers to 7.0.0-rc.2 (PEP 440 7.0.0rc2 in pyproject/uv.lock); README history row names why rc.1 has no assets. This candidate carries the lanes merged so far after the owner's batch №13: the split compaction suite, the migration projection report and the Windows kernel lock tier (item 1 = B) — the tag's 3-OS matrix is that tier's first Windows execution.
This commit is contained in:
parent
d0295738fb
commit
6bd799fb9e
10 changed files with 43 additions and 31 deletions
18
README.md
18
README.md
|
|
@ -12,7 +12,7 @@
|
|||
[](https://ouroboros-agent.ai/install/#linux)
|
||||
[][download-windows-x64]
|
||||
[](https://github.com/razzant/OuroborosHub)
|
||||
[](VERSION)
|
||||
[](VERSION)
|
||||
|
||||
Ouroboros is an open-source, general-purpose AI agent whose identity, durable memory, and history continue across tasks and restarts. It works on external projects, coordinates a live swarm of specialist agents, and can rewrite the implementation it runs on, including its code, architecture, prompts, tools, and dependencies. Reflection can also change how it understands itself without severing that continuity.
|
||||
|
||||
|
|
@ -64,13 +64,13 @@ The desktop packages already contain an optional CLI installer. On macOS, after
|
|||
|
||||
</details>
|
||||
|
||||
[download-macos-arm64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1.dmg
|
||||
[download-windows-x64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1-windows-x64.zip
|
||||
[download-linux-deb-amd64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/ouroboros_7.0.0-rc.1_amd64.deb
|
||||
[download-linux-rpm-x86_64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/ouroboros-7.0.0-rc.1-1.x86_64.rpm
|
||||
[download-linux-rpm-red80-x86_64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/ouroboros-7.0.0-rc.1-1.red80.x86_64.rpm
|
||||
[download-linux-appimage-x86_64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1-linux-x86_64.AppImage
|
||||
[download-linux-x86_64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1-linux-x86_64.tar.gz
|
||||
[download-macos-arm64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2.dmg
|
||||
[download-windows-x64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2-windows-x64.zip
|
||||
[download-linux-deb-amd64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/ouroboros_7.0.0-rc.2_amd64.deb
|
||||
[download-linux-rpm-x86_64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/ouroboros-7.0.0-rc.2-1.x86_64.rpm
|
||||
[download-linux-rpm-red80-x86_64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/ouroboros-7.0.0-rc.2-1.red80.x86_64.rpm
|
||||
[download-linux-appimage-x86_64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2-linux-x86_64.AppImage
|
||||
[download-linux-x86_64]: https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2-linux-x86_64.tar.gz
|
||||
|
||||
Ouroboros bundles [Claudexor](https://github.com/razzant/claudexor) as its local execution layer for delegated coding and hosted-agent review. Ouroboros owns the task, memory, review, and final integration, while Claudexor runs the selected connected coding harness and returns durable execution evidence. [Explore Claudexor](https://claudexor.ai/).
|
||||
|
||||
|
|
@ -449,7 +449,7 @@ and the reason.
|
|||
|
||||
| Version | Date | Description |
|
||||
|---------|------|-------------|
|
||||
| 7.0.0-rc.1 | 2026-09-02 | **Release candidate of 7.0.0** — packaged pre-release for the owner's manual test (batch №13 item 14); runtime identical to the 7.0.0 candidate. The release bar now runs `system-e2e-mock`, the cancellation E-suite mock lane and the campaign `--release` gate on the tag path itself. |
|
||||
| 7.0.0-rc.2 | 2026-09-02 | **Release candidate of 7.0.0** — packaged pre-release for the owner's manual test (batch №13 item 14); rc.1 never built (the bundle step refused a tag off the `ouroboros` branch — CI now resolves the managed source branch per tag). Carries the Windows kernel lock tier (item 1 = B) and the split compaction suite. The release bar now runs `system-e2e-mock`, the cancellation E-suite mock lane and the campaign `--release` gate on the tag path itself. |
|
||||
| 7.0.0 | 2026-09-02 | **feat: ABI 7.0 — the v7 refactor lands on the live tip.** The v7next campaign transplants the frozen v7 deltas onto the current 6.114.x line with no regressions: PluginAPI 2.0 admission with a hash-bound grandfather, generation-bound extension publication and recovery (a running worker adopts a skill enabled after boot without a restart), a kernel-enforced lock and seq-preserving compaction for the monetary usage ledger, the ABI-2 task-result schema stamp with fail-closed quarantine, honest cost names, typed supervisor event taxonomy, retired flat wall-clock timeout knobs, a domain manifest with a shrink-only SCC ceiling, the release-compatibility auditor (`scripts/rc_audit.py`), 23 mock-lane system E2E scenarios, and a green 3-OS CI matrix. See docs/v7next/ for the adoption ledger and per-lane corrections. Upgrading an existing install: the first start moves task results written by earlier versions into `data/task_results/quarantine/` (nothing is deleted) and replaces retired comma-list review settings with the shipped reviewer panel — back up `data/` first, or preview the effect read-only with `python scripts/rc_audit.py <data dir>`. |
|
||||
| 6.114.0 | 2026-09-01 | **feat: capability preservation as a first-class invariant, shape-first OpenRouter failover, and a green 3-OS matrix.** Capability preservation joins the immune system as a first-class invariant (#447, stages 1-3: golden capability suite, seam pins that actually differentiate, executable item-21 triggers, binaries judged by magic bytes). Same-model OpenRouter provider failover is now derived from the shape of the replayed reasoning artifact instead of a hard-coded model-family roster (#468): readable text/summary artifacts stay failover-eligible for every family, a bare `response_id` no longer pins, sealed artifacts (encrypted/signed/redacted, not vouched by the anthropic/gemini roster — `openai/` excluded on 2026-07 field evidence) keep the continuity pin on both the dispatch and reroute paths, and the pin reason plus the refusing upstream provider reach durable telemetry. Delegation and chat truth converge: delegated-run questions ride the escalation hierarchy (#204), the routing picker dispatches real routes (#198), typed owner quiz cards and the escalation channel (Q-2a/Q-2b), live-first owner deliveries, honest chat-activity conclusions with budget-pause resume, review findings in the task-card Reviews checkpoint, persistent stable-target registrations, a hold on the live delegated leaf when a nanny round dies unknown, and healed cross-generation custody disclosures. Rich chat stack (markdown, media, galleries, links — Andrei Kaznacheev), Chat viewport stability, Dashboard/Updates one-verdict action surface, Settings effect honesty, skill Repair affordance after preflight failure, node/npm launches through an execution-probed runtime ladder, the `ultra` reasoning-effort tier (@ndrew1337), and an O(delta) in-lock ledger read with a guarded torn-tail append boundary (@deebosh). Claudexor runtime pinned to 3.9.5 with delayed-startup reconciliation, a foreground quota-refresh bridge, and preserved delegated text fragments; Updates restart state survives same-SHA reconnects. CI: the serial service-log suites no longer race the child, web source pins are CRLF-safe on Windows, and the size-ratchet manifest is exact. This tag also carries the untagged 6.113.5 (generation-safe browser cleanup after timed-out tools, #440 audit fix-forward). |
|
||||
| 6.113.5 | 2026-08-31 | **fix: browser cleanup after a timed-out tool is generation-safe (integrates community PR #429 by @mikemikimike, closes #409).** A stateful-tool timeout now retires the whole browser generation: the shared state slot is replaced with a fresh object, the abandoned worker keeps writing only into its retired one, and the close is queued on the retiring executor so it always runs on the owning worker thread — including the already-settled race — with the cognitive lease closing after that cleanup. A late infrastructure-error retry that observes a replaced generation closes only its own retired session, so it can no longer cross-thread-kill the next command's browser. Closes the follow-up findings of the #440 post-merge audit; the never-settling-worker session leak stays a disclosed residual of in-process Playwright. |
|
||||
|
|
|
|||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
|||
7.0.0-rc.1
|
||||
7.0.0-rc.2
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Ouroboros v7.0.0-rc.1 — Architecture & Reference
|
||||
# Ouroboros v7.0.0-rc.2 — Architecture & Reference
|
||||
|
||||
This file is NOT a changelog. Version history lives in README.md, git tags, and commit log.
|
||||
|
||||
|
|
|
|||
|
|
@ -46,24 +46,24 @@
|
|||
<article>
|
||||
<p class="download-platform">macOS 12+ · Apple silicon only</p>
|
||||
<h2>macOS</h2>
|
||||
<a data-release-download="macos-arm64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1.dmg">Download for macOS (.dmg)</a>
|
||||
<a data-release-download="macos-arm64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2.dmg">Download for macOS (.dmg)</a>
|
||||
<p>Open the DMG, drag <code>Ouroboros.app</code> to Applications, then launch it from Applications.</p>
|
||||
</article>
|
||||
<article>
|
||||
<p class="download-platform">Windows x64</p>
|
||||
<h2>Windows</h2>
|
||||
<a data-release-download="windows-x64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1-windows-x64.zip">Download for Windows (.zip)</a>
|
||||
<a data-release-download="windows-x64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2-windows-x64.zip">Download for Windows (.zip)</a>
|
||||
<p>Extract the ZIP, open the <code>Ouroboros</code> folder, and run <code>Ouroboros.exe</code>.</p>
|
||||
</article>
|
||||
<article id="linux">
|
||||
<p class="download-platform">Linux x86_64</p>
|
||||
<h2>Linux</h2>
|
||||
<div class="download-actions">
|
||||
<a data-release-download="linux-deb-amd64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/ouroboros_7.0.0-rc.1_amd64.deb">Debian / Ubuntu / Astra (.deb)</a>
|
||||
<a data-release-download="linux-rpm-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/ouroboros-7.0.0-rc.1-1.x86_64.rpm">Fedora / RHEL (.rpm)</a>
|
||||
<a data-release-download="linux-rpm-red80-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/ouroboros-7.0.0-rc.1-1.red80.x86_64.rpm">RED OS 8 (.rpm)</a>
|
||||
<a data-release-download="linux-appimage-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1-linux-x86_64.AppImage">Portable AppImage</a>
|
||||
<a data-release-download="linux-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1-linux-x86_64.tar.gz">tar.gz archive</a>
|
||||
<a data-release-download="linux-deb-amd64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/ouroboros_7.0.0-rc.2_amd64.deb">Debian / Ubuntu / Astra (.deb)</a>
|
||||
<a data-release-download="linux-rpm-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/ouroboros-7.0.0-rc.2-1.x86_64.rpm">Fedora / RHEL (.rpm)</a>
|
||||
<a data-release-download="linux-rpm-red80-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/ouroboros-7.0.0-rc.2-1.red80.x86_64.rpm">RED OS 8 (.rpm)</a>
|
||||
<a data-release-download="linux-appimage-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2-linux-x86_64.AppImage">Portable AppImage</a>
|
||||
<a data-release-download="linux-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2-linux-x86_64.tar.gz">tar.gz archive</a>
|
||||
</div>
|
||||
<p>Prefer the package for your distribution. Use the AppImage or archive on other distributions; Git must already be installed.</p>
|
||||
</article>
|
||||
|
|
@ -74,7 +74,7 @@
|
|||
<section class="install-primary" aria-labelledby="macos-quick-start">
|
||||
<h2 id="macos-quick-start">macOS quick start</h2>
|
||||
<ol class="install-steps">
|
||||
<li>Click <a data-release-download="macos-arm64" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1.dmg">Download for macOS (.dmg)</a>.</li>
|
||||
<li>Click <a data-release-download="macos-arm64" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2.dmg">Download for macOS (.dmg)</a>.</li>
|
||||
<li>Open the DMG and drag <code>Ouroboros.app</code> onto the <strong>Applications</strong> shortcut.</li>
|
||||
<li>Open Ouroboros from Applications. If Gatekeeper asks, right-click the app and choose <strong>Open</strong>.</li>
|
||||
</ol>
|
||||
|
|
|
|||
|
|
@ -9080,3 +9080,15 @@ into 7.0. Base `72bb4949`.
|
|||
fail). The Windows no-ops of the pass itself are unchanged: no directory fsync, and no
|
||||
old-inode witness across `os.replace`, so a charge landed in the swap's last syscall is
|
||||
still lost silently there rather than quarantined.
|
||||
5. **rc.1 never built; rc.2 replaces it.** The tag run 33678261200 (`v7.0.0-rc.1` @ 72bb4949) failed at
|
||||
the embedded-bundle step on macOS and Linux: `scripts/build_repo_bundle.py` refuses a HEAD the
|
||||
configured managed source branch does not contain, and `ci.yml` hardcoded that branch to
|
||||
`ouroboros` — a pre-release cut from `ouroboros_v7next` could never build. The build job now
|
||||
RESOLVES the branch per tag (`ouroboros` when HEAD is an ancestor of `origin/ouroboros`, else the
|
||||
one remote branch containing HEAD; none/ambiguous fails loudly); pin in
|
||||
`tests/test_build_scripts.py`. Consequence for the pre-release install: its update source is
|
||||
`ouroboros_v7next` until 7.0 lands on `ouroboros` (then a reinstall or a fast-forward of that
|
||||
branch is the operator's step; disclosed). The published `v7.0.0-rc.1` tag is left as is (no
|
||||
rewrite of a published ref); `v7.0.0-rc.2` carries the fix plus the lanes merged so far
|
||||
(compaction split, migration projection, Windows kernel tier — the tag's own 3-OS matrix is that
|
||||
tier's first Windows execution).
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||
|
||||
[project]
|
||||
name = "ouroboros"
|
||||
version = "7.0.0rc1"
|
||||
version = "7.0.0rc2"
|
||||
description = "Self-creating AI agent with constitution, background consciousness, and persistent identity"
|
||||
readme = "README.md"
|
||||
license = {text = "MIT"}
|
||||
|
|
|
|||
|
|
@ -46,24 +46,24 @@
|
|||
<article>
|
||||
<p class="download-platform">macOS 12+ · Apple silicon only</p>
|
||||
<h2>macOS</h2>
|
||||
<a data-release-download="macos-arm64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1.dmg">Download for macOS (.dmg)</a>
|
||||
<a data-release-download="macos-arm64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2.dmg">Download for macOS (.dmg)</a>
|
||||
<p>Open the DMG, drag <code>Ouroboros.app</code> to Applications, then launch it from Applications.</p>
|
||||
</article>
|
||||
<article>
|
||||
<p class="download-platform">Windows x64</p>
|
||||
<h2>Windows</h2>
|
||||
<a data-release-download="windows-x64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1-windows-x64.zip">Download for Windows (.zip)</a>
|
||||
<a data-release-download="windows-x64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2-windows-x64.zip">Download for Windows (.zip)</a>
|
||||
<p>Extract the ZIP, open the <code>Ouroboros</code> folder, and run <code>Ouroboros.exe</code>.</p>
|
||||
</article>
|
||||
<article id="linux">
|
||||
<p class="download-platform">Linux x86_64</p>
|
||||
<h2>Linux</h2>
|
||||
<div class="download-actions">
|
||||
<a data-release-download="linux-deb-amd64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/ouroboros_7.0.0-rc.1_amd64.deb">Debian / Ubuntu / Astra (.deb)</a>
|
||||
<a data-release-download="linux-rpm-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/ouroboros-7.0.0-rc.1-1.x86_64.rpm">Fedora / RHEL (.rpm)</a>
|
||||
<a data-release-download="linux-rpm-red80-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/ouroboros-7.0.0-rc.1-1.red80.x86_64.rpm">RED OS 8 (.rpm)</a>
|
||||
<a data-release-download="linux-appimage-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1-linux-x86_64.AppImage">Portable AppImage</a>
|
||||
<a data-release-download="linux-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1-linux-x86_64.tar.gz">tar.gz archive</a>
|
||||
<a data-release-download="linux-deb-amd64" class="btn btn-primary" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/ouroboros_7.0.0-rc.2_amd64.deb">Debian / Ubuntu / Astra (.deb)</a>
|
||||
<a data-release-download="linux-rpm-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/ouroboros-7.0.0-rc.2-1.x86_64.rpm">Fedora / RHEL (.rpm)</a>
|
||||
<a data-release-download="linux-rpm-red80-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/ouroboros-7.0.0-rc.2-1.red80.x86_64.rpm">RED OS 8 (.rpm)</a>
|
||||
<a data-release-download="linux-appimage-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2-linux-x86_64.AppImage">Portable AppImage</a>
|
||||
<a data-release-download="linux-x86_64" class="btn btn-quiet" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2-linux-x86_64.tar.gz">tar.gz archive</a>
|
||||
</div>
|
||||
<p>Prefer the package for your distribution. Use the AppImage or archive on other distributions; Git must already be installed.</p>
|
||||
</article>
|
||||
|
|
@ -74,7 +74,7 @@
|
|||
<section class="install-primary" aria-labelledby="macos-quick-start">
|
||||
<h2 id="macos-quick-start">macOS quick start</h2>
|
||||
<ol class="install-steps">
|
||||
<li>Click <a data-release-download="macos-arm64" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.1/Ouroboros-7.0.0-rc.1.dmg">Download for macOS (.dmg)</a>.</li>
|
||||
<li>Click <a data-release-download="macos-arm64" href="https://github.com/razzant/ouroboros/releases/download/v7.0.0-rc.2/Ouroboros-7.0.0-rc.2.dmg">Download for macOS (.dmg)</a>.</li>
|
||||
<li>Open the DMG and drag <code>Ouroboros.app</code> onto the <strong>Applications</strong> shortcut.</li>
|
||||
<li>Open Ouroboros from Applications. If Gatekeeper asks, right-click the app and choose <strong>Open</strong>.</li>
|
||||
</ol>
|
||||
|
|
|
|||
2
uv.lock
generated
2
uv.lock
generated
|
|
@ -1535,7 +1535,7 @@ wheels = [
|
|||
|
||||
[[package]]
|
||||
name = "ouroboros"
|
||||
version = "7.0.0rc1"
|
||||
version = "7.0.0rc2"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "croniter" },
|
||||
|
|
|
|||
|
|
@ -1190,4 +1190,4 @@ export const MAX_QUIZ_OPTIONS = 6;
|
|||
// REFUSES a longer comment (it is delivered verbatim, never truncated), so
|
||||
// the card must not offer to send one.
|
||||
export const MAX_DECISION_COMMENT = 2000;
|
||||
export const GATEWAY_CONTRACT_VERSION = '7.0.0-rc.1';
|
||||
export const GATEWAY_CONTRACT_VERSION = '7.0.0-rc.2';
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "ouroboros-web",
|
||||
"version": "7.0.0-rc.1",
|
||||
"version": "7.0.0-rc.2",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"description": "Ouroboros browser UI package boundary",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue