@alessandroraffa/tangyr 5.0.1 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -57,22 +57,22 @@ tangyr <command>
57
57
 
58
58
  Options declared on individual commands in addition to the [global flags](#global-flags) below. `--offline`, `--refresh`, and `install`/`sync`'s narrow `--json` are documented in [Remote kit source](#remote-kit-source); `--scope` in [Scope](#scope).
59
59
 
60
- | Command | Option | Description |
61
- | -------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
62
- | `install`, `sync` | `--loss-report <path>` | Write this run's semantic loss report to `<path>` as JSON — one entry per target/component that could not be translated natively, with its severity. Written whether or not the run exits `3`. |
63
- | `install`, `sync` | `--ignore-errors` | Suppress exit code `3` when the loss report contains `error`-severity entries |
64
- | `install`, `sync` | `--kit <name>` | Kit to install/synchronize: `<name>` for a local source, `<name>@<version>` for a remote one |
65
- | `install`, `uninstall`, `assess` | `--tools <list>` | Comma-separated list of target tools |
66
- | `sync`, `status`, `verify`, `doctor`, `cleanup`, `probe` | `--target <tool>` | Limit the command to a single target |
67
- | `sync` | `--component <name>` | Limit sync to one component type: `instructions`, `agents`, `skills`, `commands`, `rules`, `hooks`, `mcp`, `settings`, `output-styles`, `lsp` |
68
- | `sync` | `--force` | Rewrite managed artifacts even when provenance matches |
69
- | `doctor` | `--fix` | Apply safe automated fixes |
70
- | `cleanup` | `--all` | Include all enabled targets |
71
- | `config` | `--edit` | Interactively edit mutable config fields |
72
- | `auth login` | `--skip-validation` | Store the credential without contacting the configured origin |
73
- | `kit update` | `--kit <name>@<version>` | Remote kit reference to re-fetch into the cache |
74
- | `cache clear` | `[target]` | Positional: kit name or `<name>@<version>`; omit to clear the whole cache |
75
- | `assess`, `detect`, `list`, `probe`, `validate` | `--json` | Replace the command's output with JSON |
60
+ | Command | Option | Description |
61
+ | -------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
62
+ | `install`, `sync` | `--loss-report <path>` | Write an **extra copy** of this run's semantic loss report to `<path>`. The report itself is scope state and is rewritten at `<scope>/loss.json` by every `install` and `sync` regardless, whether or not the run exits `3`. |
63
+ | `install`, `sync` | `--ignore-errors` | Suppress exit code `3` when the loss report contains `error`-severity entries |
64
+ | `install`, `sync` | `--kit <name>` | Kit to install/synchronize: `<name>` for a local source, `<name>@<version>` for a remote one |
65
+ | `install`, `uninstall`, `assess` | `--tools <list>` | Comma-separated list of target tools |
66
+ | `sync`, `status`, `verify`, `doctor`, `cleanup`, `probe` | `--target <tool>` | Limit the command to a single target |
67
+ | `sync` | `--component <name>` | Limit sync to one component type: `instructions`, `agents`, `skills`, `commands`, `rules`, `hooks`, `mcp`, `settings`, `output-styles`, `lsp` |
68
+ | `sync` | `--force` | Rewrite managed artifacts even when provenance matches |
69
+ | `doctor` | `--fix` | Apply safe automated fixes |
70
+ | `cleanup` | `--all` | Include all enabled targets |
71
+ | `config` | `--edit` | Interactively edit mutable config fields |
72
+ | `auth login` | `--skip-validation` | Store the credential without contacting the configured origin |
73
+ | `kit update` | `--kit <name>@<version>` | Remote kit reference to re-fetch into the cache |
74
+ | `cache clear` | `[target]` | Positional: kit name or `<name>@<version>`; omit to clear the whole cache |
75
+ | `assess`, `detect`, `list`, `probe`, `validate` | `--json` | Replace the command's output with JSON |
76
76
 
77
77
  ### Authentication
78
78
 
@@ -365,23 +365,33 @@ acceptedLoss:
365
365
 
366
366
  Not every error entry is structural. `rule-not-delivered` (below) reports a rule that did not reach a target on this run, which is usually fixable — by giving the target an instructions path of its own, or by not enabling it. Accept it when you have decided to live with it, not to quiet it.
367
367
 
368
- ## Rules that did not arrive
368
+ ## What did not arrive
369
369
 
370
- A rule reaches a target either as a file in that target's own rules slot or as a section in the instructions document it reads. Several targets resolve their instructions to one project-root `AGENTS.md` and write it in turn, so a rule folded into that file survives only for whoever wrote last.
370
+ A kit's artifacts reach a target through that target's own surfaces: a file in its agents directory, a prompt, a workflow, a skill folder, a section in the instructions document it reads. The surfaces differ per target, and some targets have none for a given category.
371
371
 
372
- After every target has written, the run measures what is actually on disk and says so — one line per target, the count first, and the rules that did **not** arrive named:
372
+ After every target has written, the run measures what is actually on disk and says so — one line per target, the counts first, and whatever did **not** arrive named beneath:
373
373
 
374
374
  ```text
375
- Rules reaching each target (3 declared, measured on disk):
376
- claude-code 3/3
377
- copilot 3/3
378
- codex 0/3 missing: style, testing, review
379
- its rules are folded into AGENTS.md, which cline wrote last
380
- opencode 3/3
381
- cline 3/3
375
+ What reached each target (measured on disk):
376
+ claude-code agents 1/1 commands 1/1 rules 1/1 skills 1/1 hooks 1/1
377
+ copilot agents 1/1 commands 1/1 rules 1/1 skills 1/1 hooks 1/1
378
+ codex agents 1/1 commands 1/1 rules 0/1 skills 1/1 hooks 1/1
379
+ rules missing: git-safety
380
+ folded into AGENTS.md, which cline wrote last
381
+ cline agents 0/1 commands 1/1 rules 1/1 skills 1/1 hooks 0/1
382
+ agents missing: reviewer
383
+ cline has no agents surface in this scope
382
384
  ```
383
385
 
384
- Nothing is printed when every rule arrived; `--verbose` shows the block either way. The same fact reaches `--loss-report <path>` as a `rule-not-delivered` entry per rule per target, at `error` severity, so a run that loses a rule exits `3` rather than reporting success.
386
+ Measured on the files, not on what the compilers intended: the two have disagreed, and the files are what the target reads. Nothing is printed when everything arrived; `--verbose` shows the block either way.
387
+
388
+ The same fact reaches the loss report — `<scope>/loss.json`, rewritten by every `install` and `sync`, plus any `--loss-report <path>` copy — as a `rule-not-delivered`, `agent-not-delivered`, `command-not-delivered`, `skill-not-delivered` or `hook-not-delivered` entry, one per artifact per target, at `error` severity — so a run that loses part of the kit exits `3` rather than reporting success. A category the target has no surface for at all is left to the structural entry that already says so (`persona-not-representable`, `hook-as-plugin`), rather than repeated once per artifact.
389
+
390
+ ## The loss report
391
+
392
+ `.tangyr/loss.json` (project scope) or `~/.tangyr/loss.json` (global) is written by every `install` and `sync`, and removed by `uninstall` with the manifest. It holds one entry per target and component that could not be translated natively, each with its closed-vocabulary type, its severity and a human-readable detail, under a `generatedAt` timestamp.
393
+
394
+ It used to be written only when `--loss-report <path>` was passed, which nobody passes twice: a project found theirs five days stale, naming a component renamed since, while the kit had grown from two components to thirty-four. A report that is only ever a photograph of one run does not belong in a directory that looks like state.
385
395
 
386
396
  ## Exit codes
387
397