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
73 changes: 73 additions & 0 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: benchmark

# CI guardrail for benchmark/ -- the one directory of runnable
# source in this otherwise source-free, closed-source repository. Runs on
# macOS because the harness is macOS-only by design: it depends on
# lsappinfo, footprint, vm_stat, notifyutil, and pmset, all Darwin-only
# tools.
#
# This workflow builds, lints, and tests the harness only. It deliberately
# never runs `resource-benchmark run` (or `doctor` against real installed
# subjects): a real sweep needs an exclusive, quiesced physical machine for
# hours, and its numbers would be meaningless -- and misleading -- if
# produced on a shared, noisy CI runner. Do not add that here.

on:
push:
paths:
- 'benchmark/**'
- '.github/workflows/benchmark.yml'
pull_request:
paths:
- 'benchmark/**'
- '.github/workflows/benchmark.yml'

concurrency:
group: benchmark-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

defaults:
run:
working-directory: benchmark

jobs:
check:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
components: clippy

# benchmark/rustfmt.toml sets nightly-only options (e.g.
# unstable_features), so the format check needs a nightly rustfmt --
# stable `cargo fmt` reads a different subset of the config and
# produces different output.
# Installing nightly second makes it rustup's default, so every step
# below names its toolchain explicitly rather than relying on that
# ordering -- `cargo clippy` under nightly fails outright, since the
# nightly toolchain installed here carries rustfmt and nothing else.
- name: Install Rust nightly (rustfmt only)
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt

- name: Rust cache
uses: Swatinem/rust-cache@v2
with:
workspaces: benchmark -> target

- name: Format check (nightly rustfmt)
run: cargo +nightly fmt -- --check

- name: Clippy
run: cargo +stable clippy --all-targets -- -D warnings

- name: Test
run: cargo +stable test
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
.DS_Store
.dn/

# benchmark/ is a standalone Rust crate; its own build output is scratch,
# but benchmark/Cargo.lock is committed deliberately (see benchmark/README.md)
# so a third party builds the exact dependency versions behind published numbers.
benchmark/target/
21 changes: 16 additions & 5 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Licence

**TermTree is proprietary software. This repository contains documentation and release metadata
only — it contains no TermTree source code.**
**TermTree is proprietary software. This repository contains documentation, release metadata, and
one standalone benchmark harness — it contains no TermTree source code.**

## This repository

Expand All @@ -10,9 +10,20 @@ accompanying images — are published by Document Node Pty Ltd so that people ca
follow its releases, and report problems. They are made available for that purpose. All rights are
reserved; no licence to the TermTree application is granted by anything in this repository.

This repository is deliberately **not** published under an open source licence. TermTree's source
code is not distributed, so there is nothing here for an open source licence to cover, and applying
one would misrepresent what is on offer.
Outside of the `benchmark/` directory described below, this repository is deliberately **not**
published under an open source licence. TermTree's source code is not distributed here, so there
is nothing else in this repository for an open source licence to cover, and applying one would
misrepresent what is on offer.

## The benchmark harness

`benchmark/` is a deliberate, narrowly scoped exception. It is a standalone measurement tool, not
part of the TermTree application, and TermTree's published memory, CPU, and cold-start figures
depend on it — a benchmark nobody can run is an assertion, not evidence. For that reason `benchmark/`
is published under the Apache License, Version 2.0, reproduced in
[`benchmark/LICENSE`](benchmark/LICENSE). That licence covers the contents of the `benchmark/`
directory only; it does not extend to any other part of this repository or to the TermTree
application itself.

## The TermTree application

Expand Down
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Full walkthrough: **[Getting Started](https://termtree.com/guide/getting-started

## Issues and support

This repository is TermTree's public issue tracker. The application itself is closed source, so there is no code here — but bug reports, feature requests, and questions are all welcome and are read.
This repository is TermTree's public issue tracker. The application itself is closed source — the only exception is the `benchmark/` harness described below — but bug reports, feature requests, and questions are all welcome and are read.

- **Found a bug?** [Open a bug report](https://github.com/documentnode/termtree/issues/new?template=bug_report.yml). Include your OS, TermTree version, and steps to reproduce.
- **Want a feature?** [Open a feature request](https://github.com/documentnode/termtree/issues/new?template=feature_request.yml).
Expand All @@ -72,6 +72,15 @@ You can also send feedback from inside the app using the feedback button in the

Response times vary, but every issue gets triaged.

## Resource benchmark

TermTree's memory, CPU, and cold-start claims rest on a harness published in this repository at
[`benchmark/`](benchmark/), the one deliberate exception to this repo's otherwise source-free,
closed-source posture: numbers are only credible if strangers can measure them independently.
It is released under the Apache License 2.0, scoped to that directory — see
[`benchmark/LICENSE`](benchmark/LICENSE). For what it measures and how to run it, see
[`benchmark/README.md`](benchmark/README.md).

## Links

- [Website](https://termtree.com)
Expand Down
5 changes: 5 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ security fixes. Update from within the app, or download the current version at
In scope: the TermTree desktop application, its update mechanism, its optional cloud sync, and the
install script served at <https://termtree.com/install.sh>.

Out of scope: the `benchmark/` harness published in this repository. It is a local developer tool
you build and run yourself — it launches other applications on your own machine under your own
account, and writes only to its own disposable scratch directory. Report bugs in it as an issue,
not as a security report.

Out of scope: the security of programs you choose to run inside TermTree's terminals. Those are
ordinary terminal sessions — Claude Code, Codex, shells, servers, and other CLIs run with your own
credentials under their own security models, exactly as they would in any other terminal emulator.
6 changes: 6 additions & 0 deletions benchmark/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Build output for this standalone crate.
target/
# Run results are attached to the published artifact deliberately, not
# committed as run debris (design §4.1).
results/*.json
results/*.md
Loading
Loading