Skip to content

Commit 62db5b1

Browse files
committed
chore: scrubbing the repo for alignment
1 parent deeb54e commit 62db5b1

39 files changed

Lines changed: 6763 additions & 153 deletions

.github/workflows/ci.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,18 @@ jobs:
1919
- name: Set up Node
2020
uses: actions/setup-node@v4
2121
with:
22-
node-version: 22
22+
node-version: '22.14.0'
23+
cache: npm
2324

2425
- name: Install commit tooling
25-
run: npm install
26+
run: npm ci
2627

2728
- name: Lint commits
2829
shell: bash
2930
run: |
3031
git fetch --no-tags --prune --unshallow || true
3132
base=$(git merge-base origin/main HEAD || echo HEAD~20)
32-
npx commitlint --from="$base" --to=HEAD
33+
npx --no-install commitlint --from="$base" --to=HEAD
3334
3435
test:
3536
name: test (${{ matrix.name }})

.github/workflows/release.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,13 @@ jobs:
3333
- name: Set up Node
3434
uses: actions/setup-node@v4
3535
with:
36-
node-version: 22
36+
node-version: '22.14.0'
37+
cache: npm
3738

3839
- name: Install release tooling
39-
run: npm install
40+
run: npm ci
4041

4142
- name: Release
4243
env:
4344
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
44-
run: npx semantic-release
45+
run: npx --no-install semantic-release

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
The result is intentionally simple: every node can serve the UI, every node shares fresh load metrics with its peers, and the browser can be hot-potatoed around the cluster without a central coordinator.
88

9+
Deeper docs live in `docs/`; this README stays focused on quick start and common
10+
deployment paths.
11+
912
## Features
1013

1114
- **Cluster htop view**: CPU, memory, load, freshness, and offline status for every known node.
@@ -99,6 +102,7 @@ Templates live in `deploy/` for common ways to keep Pulse running:
99102
| macOS launchd | `deploy/launchd/com.offpeakengineer.pulsed.plist` |
100103
| Windows service | `deploy/windows/install-service.ps1` using NSSM |
101104
| Kubernetes | `deploy/kubernetes/pulsed.yaml` |
105+
| Helm | `helm/pulsed` |
102106
| Ansible local binary | `deploy/ansible/install-pulsed.yml` |
103107
| Ansible release binary | `deploy/ansible/install-release-pulsed.yml` |
104108
| Traefik to bare metal | `deploy/traefik/bare-metal-node.yaml` |
File renamed without changes.

docs/01_concepts/terminology.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Terminology
2+
3+
This file keeps the concept vocabulary grounded enough to implement without
4+
turning it into a named product taxonomy too early.
5+
6+
## Node
7+
8+
A node is an addressable observer. Today that is usually a running `pulsed`
9+
process on a host. In the broader model, a node can also represent a pod,
10+
container, service, device, bus, orchestrator, availability zone, region, or
11+
other scoped body.
12+
13+
Nodes may have child nodes, but the relationship is hierarchical. A node path is
14+
a rooted parent/child address, not an arbitrary graph.
15+
16+
## Body Node
17+
18+
A body node is an external-facing boundary for a scope. Examples include a pod,
19+
host, orchestrator, zone, or region. Body nodes decide which internal details
20+
are exposed, summarized, hidden, or forwarded.
21+
22+
## Internal Node
23+
24+
An internal node is a child inside a local scope. Internal nodes may share more
25+
detail through a local loopback mesh because they are inside the same boundary.
26+
27+
## Observation
28+
29+
An observation is something a node knows, senses, sees, hears, or chooses to
30+
share. Observations should carry source identity, time, category, path, and
31+
freshness metadata.
32+
33+
## Enumeration
34+
35+
Enumeration answers "what exists?" before a caller asks for a payload. The core
36+
index dimensions are:
37+
38+
- when: timeslice or freshness window
39+
- who: source node identity
40+
- where: node path or scoped body
41+
- what: structure, parameter, metric, tag, or resource kind
42+
- how: current, historical, stale, direct, heard, re-shared, signed, unsigned
43+
44+
## Queryable Resource
45+
46+
A queryable resource is a tagged thing a node can advertise and another node can
47+
request. Themes are the smallest useful example: a node can enumerate available
48+
themes and share one when policy allows it.
49+
50+
## Trust
51+
52+
Trust is local receiver interpretation, not global truth. Signature status,
53+
source distance, scope, freshness, and operator policy should remain separate in
54+
data even when the UI summarizes them.

0 commit comments

Comments
 (0)