Compare commits
3
Commits
512860703e
...
78e31ea450
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
78e31ea450 | ||
|
|
116bc1ef01 | ||
|
|
b39fb246ef |
@@ -7,7 +7,7 @@
|
|||||||
1. **Set up the environment:** `bash scripts/setup-hooks.sh` (installs git hooks — idempotent).
|
1. **Set up the environment:** `bash scripts/setup-hooks.sh` (installs git hooks — idempotent).
|
||||||
2. **Read this file** (`AGENTS.md`) — project policy and domain knowledge.
|
2. **Read this file** (`AGENTS.md`) — project policy and domain knowledge.
|
||||||
3. **Read [questions-v1.md](questions-v1.md)** — open questions awaiting human input.
|
3. **Read [questions-v1.md](questions-v1.md)** — open questions awaiting human input.
|
||||||
4. **Check Redmine** — `~/daytoday/redmine/bin/redmine list --assigned-to-me -p 55` for active work.
|
4. **Check Redmine** — `docker run --rm --env-file ~/.creds/redmine.env git.knownelement.com/reachableceo/redmine-cli:latest list --assigned-to-me -p 55` for active work.
|
||||||
5. **Check current state:** `git log --oneline -10`.
|
5. **Check current state:** `git log --oneline -10`.
|
||||||
6. **Run rule audit:** `bash scripts/check-rules.sh --fast`.
|
6. **Run rule audit:** `bash scripts/check-rules.sh --fast`.
|
||||||
|
|
||||||
@@ -138,23 +138,30 @@ checklists, or TODOs in repo files. Use Redmine tickets instead.
|
|||||||
|
|
||||||
### CLI access (read + write)
|
### CLI access (read + write)
|
||||||
|
|
||||||
Tickets are managed via the `redmine` CLI wrapper in the `~/daytoday/redmine`
|
Tickets are managed via the `redmine-cli` container, invoked directly
|
||||||
workspace (external to this repo). Full command reference, patterns, and
|
with `docker run` (no wrapper script). Full command reference, patterns, and
|
||||||
the subtask escape hatch live in `~/daytoday/redmine/AGENTS.md` — read it for
|
the subtask escape hatch live in the CLI's own `AGENTS.md`
|
||||||
anything beyond the basics.
|
(`~/projects/KNEL-AIMiddleware/tooling-cli/redmine/AGENTS.md`) — read it
|
||||||
|
for anything beyond the basics.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Connection sanity check (run first in any session):
|
# Connection sanity check (run first in any session):
|
||||||
~/daytoday/redmine/bin/redmine whoami
|
docker run --rm --env-file ~/.creds/redmine.env \
|
||||||
|
git.knownelement.com/reachableceo/redmine-cli:latest whoami
|
||||||
|
|
||||||
# Your queue (project 55):
|
# Your queue (project 55):
|
||||||
~/daytoday/redmine/bin/redmine list --assigned-to-me -p 55
|
docker run --rm --env-file ~/.creds/redmine.env \
|
||||||
|
git.knownelement.com/reachableceo/redmine-cli:latest list --assigned-to-me -p 55
|
||||||
|
|
||||||
# Show / create / update / close:
|
# Show / create / update / close:
|
||||||
~/daytoday/redmine/bin/redmine show 367
|
docker run --rm --env-file ~/.creds/redmine.env \
|
||||||
~/daytoday/redmine/bin/redmine create -p 55 -s "Subject" -d "desc"
|
git.knownelement.com/reachableceo/redmine-cli:latest show 367
|
||||||
~/daytoday/redmine/bin/redmine update 367 -n "Done: committed in abc123" --done-ratio 100
|
docker run --rm --env-file ~/.creds/redmine.env \
|
||||||
~/daytoday/redmine/bin/redmine close 367
|
git.knownelement.com/reachableceo/redmine-cli:latest create -p 55 -s "Subject" -d "desc"
|
||||||
|
docker run --rm --env-file ~/.creds/redmine.env \
|
||||||
|
git.knownelement.com/reachableceo/redmine-cli:latest update 367 -n "Done: committed in abc123" --done-ratio 100
|
||||||
|
docker run --rm --env-file ~/.creds/redmine.env \
|
||||||
|
git.knownelement.com/reachableceo/redmine-cli:latest close 367
|
||||||
```
|
```
|
||||||
|
|
||||||
Key IDs: project **55** (`technicaloperations`), user **5** (`reachableceo`).
|
Key IDs: project **55** (`technicaloperations`), user **5** (`reachableceo`).
|
||||||
@@ -162,10 +169,10 @@ Statuses: New(1), In Progress(2), Resolved(3,closed), Feedback(4), Closed(5),
|
|||||||
Rejected(6). New subtasks go to **Feedback (4)**. Tracker **3** = Support.
|
Rejected(6). New subtasks go to **Feedback (4)**. Tracker **3** = Support.
|
||||||
**Gotcha:** `create` has no `--parent` flag — to make a subtask, use the
|
**Gotcha:** `create` has no `--parent` flag — to make a subtask, use the
|
||||||
`python-redmine` escape hatch inside the container (see
|
`python-redmine` escape hatch inside the container (see
|
||||||
`~/daytoday/redmine/AGENTS.md`). Always `show` a ticket before updating it.
|
`tooling-cli/redmine/AGENTS.md`). Always `show` a ticket before updating it.
|
||||||
|
|
||||||
The `.env` holding `REDMINE_URL`/`REDMINE_API_KEY` lives (gitignored) at
|
Credentials (`REDMINE_URL`/`REDMINE_API_KEY`) live in the centralized store
|
||||||
`/home/reachableceo/projects/KNEL-AIMiddleware/redmine-cli/.env`.
|
at `~/.creds/redmine.env`.
|
||||||
|
|
||||||
## Documentation Workflow
|
## Documentation Workflow
|
||||||
|
|
||||||
@@ -188,33 +195,37 @@ session, an agent MUST:
|
|||||||
|
|
||||||
### CLI access (read + write)
|
### CLI access (read + write)
|
||||||
|
|
||||||
Wiki topics are managed via the `discourse` CLI wrapper in the
|
Wiki topics are managed via the `discourse-cli` container, invoked directly
|
||||||
`~/daytoday/discourse` workspace (external to this repo). Full command
|
with `docker run` (no wrapper script). Full command reference, patterns, and
|
||||||
reference, patterns, and the raw-API escape hatch live in
|
the raw-API escape hatch live in the CLI's own `AGENTS.md`
|
||||||
`~/daytoday/discourse/AGENTS.md` — read it for anything beyond the basics.
|
(`~/projects/KNEL-AIMiddleware/tooling-cli/discourse/AGENTS.md`) — read it
|
||||||
|
for anything beyond the basics.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Connection sanity check (run first in any session):
|
# Connection sanity check (run first in any session):
|
||||||
~/daytoday/discourse/bin/discourse whoami
|
docker run --rm --env-file ~/.creds/discourse.env \
|
||||||
|
git.knownelement.com/reachableceo/discourse-cli:latest whoami
|
||||||
|
|
||||||
# List VP TechOps topics:
|
# List VP TechOps topics:
|
||||||
~/daytoday/discourse/bin/discourse ls -c vp-techops
|
docker run --rm --env-file ~/.creds/discourse.env \
|
||||||
|
git.knownelement.com/reachableceo/discourse-cli:latest ls -c vp-techops
|
||||||
|
|
||||||
# Show a topic / edit a wiki post (find post id via `show`):
|
# Show a topic / edit a wiki post (find post id via `show`):
|
||||||
~/daytoday/discourse/bin/discourse show 297
|
docker run --rm --env-file ~/.creds/discourse.env \
|
||||||
~/daytoday/discourse/bin/discourse update <post_id> -b "new markdown body"
|
git.knownelement.com/reachableceo/discourse-cli:latest show 297
|
||||||
|
docker run --rm --env-file ~/.creds/discourse.env \
|
||||||
|
git.knownelement.com/reachableceo/discourse-cli:latest update <post_id> -b "new markdown body"
|
||||||
```
|
```
|
||||||
|
|
||||||
VP TechOps = category **74**. Key topics: #296 (project overview), #297
|
VP TechOps = category **74**. Key topics: #296 (project overview), #297
|
||||||
(ops status), #298 (audit log). The API user is trust-level 4 but **not
|
(ops status), #298 (audit log). The API user is trust-level 4 but **not
|
||||||
admin** — admin-only ops (category creation, setting the wiki flag) will
|
admin** — admin-only ops (category creation, setting the wiki flag) will
|
||||||
403; surface those to the user rather than retrying. **Gotcha:**
|
403; surface those to the user rather than retrying. **Gotcha:**
|
||||||
`update`/`delete` take a post **id**, not a post number (see
|
`update`/`delete` take a post **id**, not a post number. Never create a new
|
||||||
`~/daytoday/discourse/AGENTS.md`). Never create a new topic for an update to
|
topic for an update to existing knowledge — edit the wiki post in place.
|
||||||
existing knowledge — edit the wiki post in place.
|
|
||||||
|
|
||||||
The `.env` holding `DISCOURSE_URL`/`DISCOURSE_API_KEY`/`DISCOURSE_API_USERNAME`
|
Credentials (`DISCOURSE_URL`/`DISCOURSE_API_KEY`/`DISCOURSE_API_USERNAME`)
|
||||||
lives (gitignored) at `/home/reachableceo/projects/KNEL-AIMiddleware/discourse-cli/.env`.
|
live in the centralized store at `~/.creds/discourse.env`.
|
||||||
|
|
||||||
## Key Scripts
|
## Key Scripts
|
||||||
|
|
||||||
@@ -224,9 +235,9 @@ lives (gitignored) at `/home/reachableceo/projects/KNEL-AIMiddleware/discourse-c
|
|||||||
| [`scripts/setup-hooks.sh`](scripts/setup-hooks.sh) | Install git hooks (pre-commit, pre-push) |
|
| [`scripts/setup-hooks.sh`](scripts/setup-hooks.sh) | Install git hooks (pre-commit, pre-push) |
|
||||||
| [`tests/remote.sh`](tests/remote.sh) | **SSH chokepoint** — all Proxmox host + sandbox VM access routes here |
|
| [`tests/remote.sh`](tests/remote.sh) | **SSH chokepoint** — all Proxmox host + sandbox VM access routes here |
|
||||||
| [`netinfra/dns-cluster-setup/remote-dns.sh`](netinfra/dns-cluster-setup/remote-dns.sh) | SSH chokepoint for DNS infra hosts (netinfra-01/02, tsrouter, netboot) |
|
| [`netinfra/dns-cluster-setup/remote-dns.sh`](netinfra/dns-cluster-setup/remote-dns.sh) | SSH chokepoint for DNS infra hosts (netinfra-01/02, tsrouter, netboot) |
|
||||||
| `~/daytoday/redmine/bin/redmine` | Redmine CLI wrapper (ticket read/write via Docker container) |
|
| `redmine-cli` container | Redmine CLI (ticket read/write via `docker run`; see `tooling-cli/redmine/`) |
|
||||||
| `~/daytoday/discourse/bin/discourse` | Discourse CLI wrapper (wiki topic read/write via Docker container) |
|
| `discourse-cli` container | Discourse CLI (wiki topic read/write via `docker run`; see `tooling-cli/discourse/`) |
|
||||||
| `~/daytoday/dns/bin/dns` | Technitium DNS CLI (zones, list, add, delete, search, flush) |
|
| `dns-cli` container | Technitium DNS CLI (zones, list, add, delete, search, flush; see `tooling-cli/dns/`) |
|
||||||
| [`tests/vm-validation.sh`](tests/vm-validation.sh) | Deploy + validate on sandbox VM |
|
| [`tests/vm-validation.sh`](tests/vm-validation.sh) | Deploy + validate on sandbox VM |
|
||||||
| [`tests/run-tests.sh`](tests/run-tests.sh) | Test suite |
|
| [`tests/run-tests.sh`](tests/run-tests.sh) | Test suite |
|
||||||
| [`netinfra/dns-cluster-setup/setup.sh`](netinfra/dns-cluster-setup/setup.sh) | DNS cluster replication |
|
| [`netinfra/dns-cluster-setup/setup.sh`](netinfra/dns-cluster-setup/setup.sh) | DNS cluster replication |
|
||||||
@@ -294,7 +305,7 @@ Required for EVERY infrastructure change:
|
|||||||
`koalaman/shellcheck:stable`). ALL scripts must pass including info-level.
|
`koalaman/shellcheck:stable`). ALL scripts must pass including info-level.
|
||||||
- For raw API calls not covered by the Redmine/Discourse CLIs, use
|
- For raw API calls not covered by the Redmine/Discourse CLIs, use
|
||||||
`python3` inside the CLI Docker containers (escape hatch pattern in
|
`python3` inside the CLI Docker containers (escape hatch pattern in
|
||||||
`~/daytoday/redmine/AGENTS.md` and `~/daytoday/discourse/AGENTS.md`).
|
`tooling-cli/{discourse,redmine}/AGENTS.md`).
|
||||||
- `curl`/`wget`/`httpie` may be blocked by some harnesses. Use the CLIs or
|
- `curl`/`wget`/`httpie` may be blocked by some harnesses. Use the CLIs or
|
||||||
the python-in-Docker escape hatch for HTTP writes.
|
the python-in-Docker escape hatch for HTTP writes.
|
||||||
|
|
||||||
@@ -308,8 +319,10 @@ bash tests/shellcheck.sh # shellcheck whole repo
|
|||||||
bash tests/shellcheck.sh path/to/*.sh # shellcheck specific files
|
bash tests/shellcheck.sh path/to/*.sh # shellcheck specific files
|
||||||
|
|
||||||
# Redmine + Discourse sanity checks (run first in any session):
|
# Redmine + Discourse sanity checks (run first in any session):
|
||||||
~/daytoday/redmine/bin/redmine whoami
|
docker run --rm --env-file ~/.creds/redmine.env \
|
||||||
~/daytoday/discourse/bin/discourse whoami
|
git.knownelement.com/reachableceo/redmine-cli:latest whoami
|
||||||
|
docker run --rm --env-file ~/.creds/discourse.env \
|
||||||
|
git.knownelement.com/reachableceo/discourse-cli:latest whoami
|
||||||
|
|
||||||
# Proxmox host access:
|
# Proxmox host access:
|
||||||
PROX_HOST=pfv-tsys5 bash tests/remote.sh prox 'qm list'
|
PROX_HOST=pfv-tsys5 bash tests/remote.sh prox 'qm list'
|
||||||
|
|||||||
+6
-8
@@ -16,14 +16,12 @@
|
|||||||
|
|
||||||
Go with option a. The tea command is setup on this workstation (and on ultix-offstage). I guess, also capture that the tea command (and docker login) are setup on my workstations, so that in the future, projects know they can use tea to setup a repo. Also, i want this to be TSYS wide, so it should go under the TSYSGroupCorporate organization. Call the repo: TSYSGroupAIOS . Make it a template repository.
|
Go with option a. The tea command is setup on this workstation (and on ultix-offstage). I guess, also capture that the tea command (and docker login) are setup on my workstations, so that in the future, projects know they can use tea to setup a repo. Also, i want this to be TSYS wide, so it should go under the TSYSGroupCorporate organization. Call the repo: TSYSGroupAIOS . Make it a template repository.
|
||||||
|
|
||||||
### Q2. The bin/ wrapper gap (redmine-cli / discourse-cli)
|
### Q2. The bin/ wrapper gap (redmine-cli / discourse-cli) — RESOLVED (discourse)
|
||||||
- **Context:** PFVCluster's operational.md and AGENTS.md reference `~/daytoday/redmine/bin/redmine` and `~/daytoday/discourse/bin/discourse` as the entrypoints. But `ls ~/daytoday/{redmine,discourse}/` shows only `.gitignore` + `AGENTS.md` (+ MIGRATION-PLAN.md for discourse) — no `bin/`, no Dockerfile. The actual CLI source lives in `~/projects/KNEL-AIMiddleware/{redmine,discourse}-cli/`.
|
- **Context:** PFVCluster's operational.md and AGENTS.md referenced `~/daytoday/redmine/bin/redmine` and `~/daytoday/discourse/bin/discourse` as the entrypoints — thin shortcut wrappers around the real CLI containers. The actual CLI source lived in `~/projects/KNEL-AIMiddleware/{redmine,discourse}-cli/`.
|
||||||
- **Question:** Are the `bin/` wrappers something that should exist (and were lost / never committed), or is the documentation aspirational? Should the template reference these CLIs at all, or stay tool-agnostic?
|
- **Question:** Are the `bin/` wrappers something that should exist, or is the documentation aspirational? Should the template reference these CLIs at all, or stay tool-agnostic?
|
||||||
- **Answer:** _(human)_
|
- **Answer:** Reference the real container invocation (full path/container name/invoke notes); no duplicate code via shortcut wrappers.
|
||||||
- **Decision:** _(human/agent)_
|
- **Decision:** No `bin/` wrappers. Invoke the real container with `docker run`. Both CLI sources have been merged into `~/projects/KNEL-AIMiddleware/tooling-cli/{discourse,redmine}/` and PFVCluster's AGENTS.md now invokes them via `docker run --env-file ~/.creds/{discourse,redmine}.env`. The old `~/daytoday/{discourse,redmine}` workspaces and the `{discourse,redmine}-cli/` subdirs were removed.
|
||||||
- **Synthesized to:** —
|
- **Synthesized to:** PFVCluster `AGENTS.md` §CLI access; `tooling-cli/{discourse,redmine}/`
|
||||||
|
|
||||||
The clis should exist. Maybe the AGENTS.md reference the actual paths? I dont need duplicate code. I think i was using the directories as kind of "shortcuts" vs the ~/projects/... path every time. So, for this repo, reference the full path/container name/invoke notes. Does that make sense?
|
|
||||||
|
|
||||||
### Q3. Should the template ship the Discourse pointer-header pattern?
|
### Q3. Should the template ship the Discourse pointer-header pattern?
|
||||||
- **Context:** PFVCluster migrated 36 in-repo `.md` files to 10-line pointer stubs citing `https://community.turnsys.com/t/<N>`. The template currently has `scripts/garden.sh` that *warns* about oversized non-Discourse `.md`, but doesn't enforce the pointer-header format.
|
- **Context:** PFVCluster migrated 36 in-repo `.md` files to 10-line pointer stubs citing `https://community.turnsys.com/t/<N>`. The template currently has `scripts/garden.sh` that *warns* about oversized non-Discourse `.md`, but doesn't enforce the pointer-header format.
|
||||||
|
|||||||
Reference in New Issue
Block a user