owfadev 0.3.2 → 0.4.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/.agents/skills/owfa-check/SKILL.md +49 -0
- package/.agents/skills/{docs → owfa-docs}/SKILL.md +5 -5
- package/.agents/skills/{wiki_plugin_kernel → owfa-kernel}/SKILL.md +13 -12
- package/{.meta/command/plugin → .agents/skills/owfa-plugin}/SKILL.md +10 -10
- package/.agents/skills/{query → owfa-query}/SKILL.md +5 -6
- package/.owfa/VERSION +1 -0
- package/.owfa/command/owfa-check/SKILL.md +49 -0
- package/{.meta/command/docs → .owfa/command/owfa-docs}/SKILL.md +5 -5
- package/{.meta/command/wiki_plugin_kernel → .owfa/command/owfa-kernel}/SKILL.md +13 -12
- package/{.agents/skills/plugin → .owfa/command/owfa-plugin}/SKILL.md +10 -10
- package/{.meta/command/query → .owfa/command/owfa-query}/SKILL.md +5 -6
- package/{.meta → .owfa}/docs/agent-behavior.md +3 -2
- package/{.meta → .owfa}/docs/agents-example.md +1 -1
- package/{.meta → .owfa}/docs/conversion.md +2 -2
- package/{.meta → .owfa}/docs/deployment.md +51 -46
- package/{.meta → .owfa}/docs/developer.md +4 -4
- package/{.meta → .owfa}/docs/distribution.md +21 -19
- package/.owfa/docs/home.md +61 -0
- package/{.meta → .owfa}/docs/intro.md +5 -5
- package/{.meta → .owfa}/docs/log-example.md +1 -1
- package/{.meta → .owfa}/docs/map.md +4 -3
- package/{.meta → .owfa}/docs/mechanics.md +11 -11
- package/{.meta → .owfa}/docs/naming.md +7 -7
- package/{.meta → .owfa}/docs/packages.md +80 -15
- package/.owfa/docs/plugin-lifecycle.md +70 -0
- package/{.meta → .owfa}/docs/quickstart.md +12 -12
- package/{.meta → .owfa}/docs/research-user-profile.md +1 -1
- package/{.meta → .owfa}/docs/sandbox.md +3 -3
- package/{.meta → .owfa}/docs/usage.md +1 -1
- package/{.meta → .owfa}/protocol/actions.md +6 -6
- package/.owfa/protocol/registry.yaml +34 -0
- package/.owfa/scripts/owfa_home.py +273 -0
- package/{.meta/scripts/wiki_plugin_kernel.py → .owfa/scripts/owfa_kernel.py} +521 -77
- package/{.meta → .owfa}/scripts/pipeline.py +9 -9
- package/.owfa/scripts/wiki_plugin_kernel.py +15 -0
- package/{.meta → .owfa}/scripts/wikilib.py +2 -2
- package/.owfa/tests/test_capabilities.py +311 -0
- package/{.meta → .owfa}/tests/test_install_preflight.py +11 -7
- package/.owfa/tests/test_owfa_home.py +127 -0
- package/.owfa/tests/test_version_scheme.py +68 -0
- package/README.md +32 -24
- package/README.zh-CN.md +32 -24
- package/bin/owfa.js +483 -65
- package/package.json +3 -2
- package/payloads/personal/PKG.yaml +15 -0
- package/payloads/personal/README.md +7 -0
- package/{.meta/plugins/core → payloads/personal}/calendar/PLUGIN.md +1 -0
- package/{.meta/plugins/core → payloads/personal}/calendar/PLUGIN.yaml +3 -3
- package/{.agents/skills/map → payloads/personal/command/owfa-map}/SKILL.md +9 -9
- package/{.meta/command/profile → payloads/personal/command/owfa-profile}/SKILL.md +11 -11
- package/{.agents/skills/save → payloads/personal/command/owfa-save}/SKILL.md +10 -10
- package/{.meta/plugins/core → payloads/personal}/cron/PLUGIN.md +2 -0
- package/{.meta/plugins/core → payloads/personal}/cron/PLUGIN.yaml +3 -3
- package/{.meta/plugins/core → payloads/personal}/device/PLUGIN.md +1 -0
- package/{.meta/plugins/core → payloads/personal}/device/PLUGIN.yaml +3 -3
- package/{.meta/plugins/core → payloads/personal}/domain/PLUGIN.md +2 -0
- package/payloads/personal/domain/PLUGIN.yaml +8 -0
- package/{.meta/plugins/core → payloads/personal}/hot/PLUGIN.yaml +1 -1
- package/{.meta/plugins/core → payloads/personal}/index/PLUGIN.md +1 -0
- package/{.meta/plugins/core → payloads/personal}/index/PLUGIN.yaml +4 -4
- package/{.meta/plugins/core → payloads/personal}/instance-git/PLUGIN.md +5 -0
- package/{.meta/plugins/core → payloads/personal}/instance-git/PLUGIN.yaml +3 -3
- package/{.meta/plugins/core → payloads/personal}/language/PLUGIN.md +1 -0
- package/{.meta/plugins/core → payloads/personal}/language/PLUGIN.yaml +4 -4
- package/{.meta/plugins/core → payloads/personal}/link/PLUGIN.md +1 -0
- package/{.meta/plugins/core → payloads/personal}/link/PLUGIN.yaml +3 -3
- package/{.meta/plugins/core → payloads/personal}/link/scripts/check.py +1 -1
- package/{.meta/plugins/core → payloads/personal}/log/PLUGIN.md +1 -0
- package/{.meta/plugins/core → payloads/personal}/log/PLUGIN.yaml +4 -4
- package/{.meta/plugins/core → payloads/personal}/mapping/PLUGIN.yaml +1 -1
- package/{.meta/plugins/core → payloads/personal}/notes/PLUGIN.md +1 -0
- package/{.meta/plugins/core → payloads/personal}/notes/PLUGIN.yaml +4 -4
- package/{.meta/plugins/core → payloads/personal}/sessions/PLUGIN.md +2 -1
- package/{.meta/plugins/core → payloads/personal}/sessions/PLUGIN.yaml +5 -5
- package/{.meta/plugins/core → payloads/personal}/structure/PLUGIN.md +2 -0
- package/{.meta/plugins/core → payloads/personal}/structure/PLUGIN.yaml +3 -3
- package/{.meta/plugins/core → payloads/personal}/structure/scripts/check.py +1 -1
- package/{.meta/plugins/core → payloads/personal}/tag/PLUGIN.md +2 -0
- package/{.meta/plugins/core → payloads/personal}/tag/PLUGIN.yaml +3 -3
- package/{.meta/plugins/core → payloads/personal}/tag/scripts/check.py +3 -1
- package/{.meta/plugins/core → payloads/personal}/tmp/PLUGIN.md +1 -0
- package/{.meta/plugins/core → payloads/personal}/tmp/PLUGIN.yaml +3 -3
- package/{.meta/plugins/core → payloads/personal}/todo/PLUGIN.md +2 -0
- package/{.meta/plugins/core → payloads/personal}/todo/PLUGIN.yaml +6 -5
- package/payloads/personal/todo/scripts/check.py +51 -0
- package/{.meta/plugins/core → payloads/personal}/trust/PLUGIN.md +1 -0
- package/{.meta/plugins/core → payloads/personal}/trust/PLUGIN.yaml +3 -3
- package/{.meta/plugins/core → payloads/personal}/user-profile/PLUGIN.md +2 -0
- package/{.meta/plugins/core → payloads/personal}/user-profile/PLUGIN.yaml +7 -6
- package/payloads/personal/user-profile/scripts/check.py +20 -0
- package/{.meta/plugins/core → payloads/personal}/vault/PLUGIN.md +1 -0
- package/payloads/personal/vault/PLUGIN.yaml +13 -0
- package/{.meta/plugins/core → payloads/personal}/wiki/PLUGIN.md +1 -0
- package/payloads/personal/wiki/PLUGIN.yaml +8 -0
- package/templates/AGENTS.template.md +2 -2
- package/.agents/skills/check/SKILL.md +0 -130
- package/.agents/skills/profile/SKILL.md +0 -75
- package/.meta/VERSION +0 -1
- package/.meta/command/check/SKILL.md +0 -130
- package/.meta/command/map/SKILL.md +0 -72
- package/.meta/command/save/SKILL.md +0 -94
- package/.meta/plugins/core/domain/PLUGIN.yaml +0 -8
- package/.meta/plugins/core/vault/PLUGIN.yaml +0 -13
- package/.meta/plugins/core/wiki/PLUGIN.yaml +0 -8
- package/.meta/protocol/registry.yaml +0 -75
- /package/{.meta → .owfa}/command/asset-read/SKILL.md +0 -0
- /package/{.meta → .owfa}/docs/research-landscape.md +0 -0
- /package/{.meta → .owfa}/protocol/experiments.md +0 -0
- /package/{.meta/plugins/core → payloads/personal}/device/scripts/check.py +0 -0
- /package/{.meta/plugins/core → payloads/personal}/hot/PLUGIN.md +0 -0
- /package/{.meta/plugins/core → payloads/personal}/instance-git/scripts/check.py +0 -0
- /package/{.meta/plugins/core → payloads/personal}/language/scripts/check.py +0 -0
- /package/{.meta/plugins/core → payloads/personal}/log/scripts/check.py +0 -0
- /package/{.meta/plugins/core → payloads/personal}/mapping/PLUGIN.md +0 -0
- /package/{.meta/plugins/core → payloads/personal}/mapping/scripts/check.py +0 -0
- /package/{.meta/plugins/core → payloads/personal}/sessions/scripts/check.py +0 -0
- /package/{.meta/plugins/core → payloads/personal}/trust/scripts/check.py +0 -0
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: profile
|
|
3
|
-
owner: user-profile
|
|
4
|
-
consumes: [user-profile, trust, index, hot, log]
|
|
5
|
-
description: "Maintain the user profile wiki/profile.md: recognize self-description and behavioral signals, update assertions convergently (new values replace old, changes leave traces in the body, evidence wikilinks); construction and consolidation go through a whole-page rewrite preview. Triggers on: profile, 更新画像, 画像更新, update profile."
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# profile: profile update
|
|
9
|
-
|
|
10
|
-
Write the continuing cognition about the user into a checkable page: assertions carry evidence, preferences expire, updates leave traces. The direction is "inner → user cognition" — orthogonal to map (outer → inner translation) and save (sessions landing on disk); convergent across sessions, not a transactional one-shot. Write-side contracts (signal criteria, layered placement, assertion format, convergence traces) are in the injection region.
|
|
11
|
-
|
|
12
|
-
## Scope
|
|
13
|
-
|
|
14
|
-
Write: user-profile (wiki/profile.md), log, hot, index
|
|
15
|
-
Read: registry (`.meta/protocol/registry.yaml`, field and value-set anchor), trust (generated / stale_after), the current profile page (may be absent)
|
|
16
|
-
|
|
17
|
-
## Steps
|
|
18
|
-
|
|
19
|
-
1. **Anchor (one-time read)**: read `.meta/protocol/registry.yaml` and `wiki/profile.md` — a missing page = first creation (construction), no reliance on an initialization mechanism
|
|
20
|
-
2. **Judge signals** (criteria in the injection region): if this session's and recent observations do not qualify, report and exit — never force a write
|
|
21
|
-
3. Assemble the update: incremental assertions (new value replaces old + body trace) or construction / consolidation (whole-page rewrite) — construction and consolidation **present a profile preview** (assertions / evidence / layers) and wait for user confirmation
|
|
22
|
-
4. Write the page (layered placement and stale_after renewal in the injection region)
|
|
23
|
-
5. **Post-write pipeline** (deterministic, mechanical and automatic, no prompting): execute each plugin's write calls in injection-region order, then finish with `python .meta/scripts/pipeline.py verify` (post-write self-verification; on failure, go back and fix); then commit per the commit discipline (`画像: <one line>`, see the vocabulary in `.meta/protocol/actions.md`)
|
|
24
|
-
6. Report: what was updated / the evidence chain / which layer it landed in
|
|
25
|
-
|
|
26
|
-
## Prohibitions
|
|
27
|
-
|
|
28
|
-
- Privacy red line: profile content is instance data, never entering the framework repository or test-repo
|
|
29
|
-
- Diary-type assets contribute only meta-signals (presence, cadence); their content never enters the profile
|
|
30
|
-
- Evidence pages (session pages / vault proxy pages / lark archive pages) are referenced read-only, never rewritten
|
|
31
|
-
|
|
32
|
-
## Language
|
|
33
|
-
|
|
34
|
-
Output language takes the default key of the language declaration page `wiki/language.md` (a missing page or missing key falls back to the session language); proper nouns and paths keep their original form.
|
|
35
|
-
|
|
36
|
-
## Parameters
|
|
37
|
-
|
|
38
|
-
- No argument: judge recent signals and update; `<topic>`: process only that topic's assertions
|
|
39
|
-
|
|
40
|
-
## Injected Section (plugin usage blocks)
|
|
41
|
-
|
|
42
|
-
> This region is a wiki_plugin_kernel projection: consumes pulls merged with usage_routes source-side routing; disclosure order = owner first, routed blocks in the middle, pulled blocks last (rebuilt by inject / all); handwritten content does not belong here — to change the write-side contract, edit PLUGIN.yaml.
|
|
43
|
-
|
|
44
|
-
<!-- cmd-inject:start -->
|
|
45
|
-
<!-- usage:user-profile -->
|
|
46
|
-
- Dual-track triggering: the user explicitly invokes profile; the agent calls it spontaneously in any session upon recognizing significant signals — signal distillation uniformly goes through this command, not parasitic on other command flows
|
|
47
|
-
- Signal criteria: self-reported signals (preference expressions, corrections, background) and behavioral signals (subjects, fields, material habits); record only recurring subjects/fields, explicit preference expressions, corrections to output, and stable background facts (identity/tools/environment); one-off and instrumental content and uncertain observations are not recorded
|
|
48
|
-
- Evidence domain: any page inside wiki works (session pages, vault proxy pages, lark archive pages, notes) — a citation is a wikilink, no cross-domain dependencies established
|
|
49
|
-
- Layered placement: immutable identity facts go to the static layer; drifting interests and habits go to the dynamic layer with stale_after (renewed as observed)
|
|
50
|
-
- An assertion = one line of concrete, verifiable claim + inline evidence wikilink ('prefers concise Chinese replies' beats 'likes brevity'); a single incremental assertion is not directly promoted to a preference — preferences are patterns aggregated within the page
|
|
51
|
-
- Convergence-style updates: when a new value replaces an old one, a trace is left in the body (single line: who changed what, when); full-page rewrites are limited to profile construction/consolidation (preview shown, awaiting confirmation)
|
|
52
|
-
- First creation: the first trigger self-creates the page (frontmatter: type: profile + generated, dynamic layer carries stale_after), independent of any initialization mechanism
|
|
53
|
-
- Diary-type assets record only meta-signals (presence, cadence); content never enters the profile (the exemption followed mapping)
|
|
54
|
-
- Privacy red line: profile content is instance data, never entering the framework repo or test-repo
|
|
55
|
-
- Cognition bridge registration (a domain-plugin-side action, disclosed on this side): when a domain cognition plugin creates its archive and the profile is present, maintain one line in the profile's `## Domain Cognition` section (domain name + path-form wikilink); if the profile is absent, skip without proxy-creating it (on-demand bridge absence tolerance); multiple courses and archives register via the path-form wildcard (bb: <term>/<course> form)
|
|
56
|
-
<!-- /usage:user-profile -->
|
|
57
|
-
|
|
58
|
-
<!-- usage:trust -->
|
|
59
|
-
- When writing a page, write `generated` along the way (block style: `by: agent/<current-model>` / `at: <today>`)
|
|
60
|
-
- When a review action happens, append a `verified` event (single line `by: <actor>, at: <date>`), never fabricated to inflate the level
|
|
61
|
-
- Reviews are initiated by the user (triggered by human instruction); agents never append verified events on their own
|
|
62
|
-
<!-- /usage:trust -->
|
|
63
|
-
|
|
64
|
-
<!-- usage:index -->
|
|
65
|
-
- Post-write rebuild (mechanical, automatic): `python .meta/scripts/pipeline.py index` (index — overflow-offloading scheme, including deletion of obsolete old indexes after merge-back) and the same script's `tags` (tag reverse index); LLMs never hand-write indexes
|
|
66
|
-
<!-- /usage:index -->
|
|
67
|
-
|
|
68
|
-
<!-- usage:hot -->
|
|
69
|
-
- Writing entries (mechanical, automatic): `python .meta/scripts/pipeline.py hot <type> "<wikilink + one-sentence essence>"` (type value set same as log, see the log block of the AGENTS injection region); window eviction and truncation are performed by the script
|
|
70
|
-
<!-- /usage:hot -->
|
|
71
|
-
|
|
72
|
-
<!-- usage:log -->
|
|
73
|
-
- Writing lines (mechanical, automatic): `python .meta/scripts/pipeline.py log <type> "<one sentence>" [--domain <domain>]` (type value set in the log block of the AGENTS injection region; domain tag = domain-plugin name such as bb/lark/vault, mandatory for in-domain transactions, omitted for framework and native transactions); rolling window and archiving are performed by the script
|
|
74
|
-
<!-- /usage:log -->
|
|
75
|
-
<!-- cmd-inject:end -->
|
package/.meta/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.3
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: check
|
|
3
|
-
owner: framework
|
|
4
|
-
description: "Audit the repository's health: hard-structure checks on the foundation and plugins + semantic checks on plugins and pages. Triggers on: check, 健康检查, 检查插件, lint."
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# check: repository health audit
|
|
8
|
-
|
|
9
|
-
This is an audit, not a guardrail. It outputs a graded report: error = structural breakage requiring action; warning = a suggested to-do. Check rules come from two places: the foundation part of this file (protocol level) + the injection region below (a mechanical projection by wiki_plugin_kernel from each plugin manifest's checks list; presence means registration).
|
|
10
|
-
|
|
11
|
-
## Purpose
|
|
12
|
-
|
|
13
|
-
Run one health audit over the entire instance (foundation + plugins + wiki pages).
|
|
14
|
-
|
|
15
|
-
## Scope
|
|
16
|
-
|
|
17
|
-
Read: everything (.meta/, the AGENTS.md injection region, .agents/skills/, the wiki/, vault/ directory trees)
|
|
18
|
-
Write: one line in wiki/log.md (type "check"); regenerable zones are rebuilt directly per the action discipline (scripts: injection region / registry / command copies; semantics: index / tags / hot eviction / log archiving / hash recomputation)
|
|
19
|
-
|
|
20
|
-
## Steps
|
|
21
|
-
|
|
22
|
-
1. **Foundation hard checks** (protocol level):
|
|
23
|
-
- **Static self-check script**: `python .meta/scripts/wiki_plugin_kernel.py validate` (directory completeness, manifest seven fields + optional commands, id consistency, dependency existence, acyclicity, command binding owner×commands bidirectional consistency) — any error means FAIL
|
|
24
|
-
- **Idempotent rebuild**: `python .meta/scripts/wiki_plugin_kernel.py all` (injection region / registry plugin section / command copies — mechanical and automatic; drift is fixed here, the script source is the rule list)
|
|
25
|
-
- `.meta/protocol/registry.yaml` is in place with the protocol / reserved sections intact (the script never touches these two sections; a missing section is an error)
|
|
26
|
-
- **Value-set violation**: scan the frontmatter of all wiki/ pages; a type / status value outside the registry value set → error
|
|
27
|
-
- Every `.meta/command/` SKILL.md has frontmatter (name / description / owner; optional consumes — an ordered list of plugins whose write-side contracts are consumed; referenced plugins must be present with a usage list; mandatory for owner-driven commands)
|
|
28
|
-
2. **Plugin checks**: first run the attached audit `python .meta/scripts/wiki_plugin_kernel.py audit` (mechanical items: each plugin's scripts/check.py executed on audit discovery, read-only reporting; errors count toward FAIL); then execute the items marked "semantic" in the injection-region blocks below
|
|
29
|
-
3. **Semantic checks**: read plugin and command files, looking for dangling references (a command referring to nonexistent structure), ghost fields (page fields with no owning plugin and not registry-reserved), and injection-region blocks inconsistent with the PLUGIN.md Checks section
|
|
30
|
-
4. Summary output: PASS / WARN / FAIL counts + graded details + vault backlog count (informational)
|
|
31
|
-
5. **Fixes are executed by grade per the action discipline** (`.meta/protocol/actions.md`): mechanical-automatic items are done directly — `pipeline.py index` / `tags` (index rebuild), `wiki_plugin_kernel.py all` (registry / injection region / copies), hash recomputation (raw_sha256 of changed frontmatter); hot / log overflows are converged by their own write-pipeline commands; mechanical-confirmation items present a list and ask once; semantic items are reported only; historical entries are never automatically changed
|
|
32
|
-
6. Prepend one line to wiki/log.md (type "check", via `pipeline.py log check "<one line>"`); if anything changed (fixes / a log line), commit per the commit discipline (`检查: <conclusion>`, see `.meta/protocol/actions.md`)
|
|
33
|
-
|
|
34
|
-
## Tools
|
|
35
|
-
|
|
36
|
-
grep / file reading suffice; no second scan when one read is enough (call frugality).
|
|
37
|
-
|
|
38
|
-
## Parameters
|
|
39
|
-
|
|
40
|
-
- None: full-repository audit
|
|
41
|
-
- Plugin id: check that plugin only
|
|
42
|
-
|
|
43
|
-
## Injected Section (plugin check blocks)
|
|
44
|
-
|
|
45
|
-
> This region is a wiki_plugin_kernel projection from each plugin manifest's checks list (rebuilt by `inject` / `all`; presence means registration); handwritten content does not belong here — to change check rules, edit PLUGIN.yaml.
|
|
46
|
-
|
|
47
|
-
<!-- check-inject:start -->
|
|
48
|
-
<!-- check:device -->
|
|
49
|
-
- Mechanical (attached-audit script `scripts/check.py`, executed discovery-style by audit): device block mapping's warranty_until within ≤30 days of today → warning nearing expiry; already expired → warning expired; invalid date → warning
|
|
50
|
-
<!-- /check:device -->
|
|
51
|
-
|
|
52
|
-
<!-- check:hot -->
|
|
53
|
-
- Window out of bounds (>25 entries / >5 days / >200 chars per entry) → run `pipeline.py hot <type> "<backfill>"` once, or wait for the next write to converge naturally then re-check
|
|
54
|
-
- Contradiction with log (log has records while hot shows no trace) → warning
|
|
55
|
-
<!-- /check:hot -->
|
|
56
|
-
|
|
57
|
-
<!-- check:language -->
|
|
58
|
-
- Mechanical (attached-audit script `scripts/check.py`, executed discovery-style by audit): type: language landing outside `wiki/language.md` → error; terms empty values → warning; declaration page absent → info (session-language fallback tolerated)
|
|
59
|
-
<!-- /check:language -->
|
|
60
|
-
|
|
61
|
-
<!-- check:link -->
|
|
62
|
-
- Mechanical items (attached-audit script `scripts/check.py`, executed on audit discovery): broken link (target is neither a page full name nor any page's aliases) → warning; hand-written broken link in hot → warning (not counted as an inbound-link source); garbled link (target contains the U+FFFD replacement character, including related items) → error; alias ambiguity (two pages declaring the same aliases, resolution indeterminate) → error; orphan page (no inbound links and no related references, inbound sources counting concept pages only) → warning for notes knowledge pages, info for territory-value registration pages (registry territory values except session, having no inbound links yet being the registration norm); one-way related (A lists B while B does not list back) → info
|
|
63
|
-
- Semantic items (check command): inbound-link density top list → info item (evidence for hub emergence, no alert)
|
|
64
|
-
<!-- /check:link -->
|
|
65
|
-
|
|
66
|
-
<!-- check:log -->
|
|
67
|
-
- Mechanical items (attached-audit script `scripts/check.py`, executed on audit discovery): undated entries (starting with `- ` yet not matching the date format, main file and archive checked alike) → error
|
|
68
|
-
- Semantic items (check command): historical entries modified (verifiable via git) → error; capacity over the limit → re-check after mechanical archiving
|
|
69
|
-
<!-- /check:log -->
|
|
70
|
-
|
|
71
|
-
<!-- check:notes -->
|
|
72
|
-
- Traces of a note overwritten by a command → error
|
|
73
|
-
- Near-duplicate notes (Jaccard > 0.7) → warning
|
|
74
|
-
<!-- /check:notes -->
|
|
75
|
-
|
|
76
|
-
<!-- check:sessions -->
|
|
77
|
-
- Mechanical (covered by audit): session-type pages outside `wiki/sessions/` (or the reverse) → warning; participants missing or entries violating the actor convention → warning
|
|
78
|
-
- Semantic: backbone page bloated past due promotion (should have been promoted but was not) → warning
|
|
79
|
-
<!-- /check:sessions -->
|
|
80
|
-
|
|
81
|
-
<!-- check:tag -->
|
|
82
|
-
- Mechanical items (attached-audit script `scripts/check.py`, executed on audit discovery): >5 tags on one page → warning; tags restating type → warning; hierarchy over the limit (parent/child ≤2) or empty segment → warning
|
|
83
|
-
- Semantic items (check command): near-duplicate tags → warning suggesting a merge; merging is a mechanically-confirmed item (list presented, executed after user confirmation)
|
|
84
|
-
<!-- /check:tag -->
|
|
85
|
-
|
|
86
|
-
<!-- check:tmp -->
|
|
87
|
-
- Semantic (v0.1 manual, attached audit deferred): type: tmp landing outside wiki/tmp/ → error; stale_after already past → warning (cleanup prompt); tmp page count > 20 → info (backlog triage)
|
|
88
|
-
<!-- /check:tmp -->
|
|
89
|
-
|
|
90
|
-
<!-- check:trust -->
|
|
91
|
-
- Mechanical items (attached-audit script `scripts/check.py`, executed on audit discovery): generated missing by/at or wrong actor format, verified event missing by/at or wrong format, stale_after not YYYY-MM-DD, sources not a list → warning
|
|
92
|
-
- Mechanical items (info level): stale page list (past stale_after); trust-level counts (human-reviewed / machine-confirmed counts)
|
|
93
|
-
- Semantic (check command): stale-page disposition triage (refresh the moment / re-verify / deprecate) — human decides
|
|
94
|
-
<!-- /check:trust -->
|
|
95
|
-
|
|
96
|
-
<!-- check:calendar -->
|
|
97
|
-
- Semantic (v0.1 manual, attached audit deferred): month page file name not YYYY-MM or landing outside wiki/calendar/ → error; traces of rewriting a past month's page → error (git audit); declaration page missing the `calendar` block → info (the manual-only norm)
|
|
98
|
-
<!-- /check:calendar -->
|
|
99
|
-
|
|
100
|
-
<!-- check:cron -->
|
|
101
|
-
- Mechanical: a type: cron page landing outside wiki/cron/ → error; task page missing the cron block or the minimal key set (trigger/action/form/status) → warning; malformed condition trigger (kind outside the open vocabulary or missing target) → warning; time form: last_run beyond the schedule period with active → warning (projection-lost signal)
|
|
102
|
-
- Semantic (attached audit deferred): per-form drift between readable execution-side lists (scheduler / system tasks / conditional-executor watches, best-effort) and the declaration page set → warning; unreadable executor → info
|
|
103
|
-
<!-- /check:cron -->
|
|
104
|
-
|
|
105
|
-
<!-- check:index -->
|
|
106
|
-
- Deviation between indexes and the actual page set (including merged-back indexes pending deletion) → fixed by running `pipeline.py index` to rebuild (idempotent; no diff means consistent); same for tags (`pipeline.py tags`)
|
|
107
|
-
- Traces of hand editing → warning
|
|
108
|
-
<!-- /check:index -->
|
|
109
|
-
|
|
110
|
-
<!-- check:todo -->
|
|
111
|
-
- Mechanical (info-level): the list of date-triggered, overdue and unsettled entries (the mechanical basis for new-session reminders); page absent (the no-delegation norm)
|
|
112
|
-
- Mechanical: entry missing trigger condition or by/at → warning; type: todo landing outside `wiki/todo.md` → error
|
|
113
|
-
- Semantic (check command): open entries > 50 → warning (bloat triage: do what should be done, distill what should be distilled via save, confirm with the user what should be dropped)
|
|
114
|
-
<!-- /check:todo -->
|
|
115
|
-
|
|
116
|
-
<!-- check:user-profile -->
|
|
117
|
-
- Semantic (check command): profile assertion missing an evidence wikilink → warning
|
|
118
|
-
- Mechanical: a type: profile page landing in `wiki/notes/` or `wiki/vault/` (wrong territory) → error
|
|
119
|
-
- Mechanical (info-level): profile page absent (the untriggered norm; profile self-creates on first trigger)
|
|
120
|
-
<!-- /check:user-profile -->
|
|
121
|
-
|
|
122
|
-
<!-- check:mapping -->
|
|
123
|
-
- Mechanical items (attached-audit script `scripts/check.py`, executed on audit discovery): mirror diff (file in vault without proxy → info backlog; proxy without counterpart → error, message carries the reference count — see the impact surface before deleting); missing registration fields (raw_file / raw_sha256) → error; dangling raw_file → error; raw_sha256 mismatch → warning; suspected full-text duplication (md asset body ≥80% of the original) → warning; description-less stub with updated older than 90 days → warning
|
|
124
|
-
- Semantic items (check command): mismatch-disposition triage (description still applies → mechanical recalculation auto-repairs, writing a log line on completion (type map, one sentence with the asset name and 'original changed, description still applies'); suspected invalid → human decides remap or delete); diary-type full-text duplication exemption judgment; before disposing an orphan proxy, handle its references first (update references in sync or leave aliases to redirect)
|
|
125
|
-
<!-- /check:mapping -->
|
|
126
|
-
|
|
127
|
-
<!-- check:structure -->
|
|
128
|
-
- Mechanical items (attached-audit script `scripts/check.py`, executed on audit discovery): declaration diff — vault top-level directory undeclared → warning, declaration key pointing to a nonexistent directory → warning; type: structure landing outside `wiki/structure.md` → error; declaration page absent → info (flat tolerance)
|
|
129
|
-
<!-- /check:structure -->
|
|
130
|
-
<!-- check-inject:end -->
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: map
|
|
3
|
-
owner: mapping
|
|
4
|
-
consumes: [mapping, trust, tag, index, hot, log]
|
|
5
|
-
description: "Map assets in vault/ into wiki proxy pages: SHA-256, mirror path, frontmatter, index/hot-cache/log linkage. Triggers on: map, 映射, process this source, add this to the wiki."
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# map: mapping
|
|
9
|
-
|
|
10
|
-
Map assets in `vault/` into `wiki/vault/` proxy pages — mapping and understanding are decoupled: a pure registration action (registration fields, body scale, and other write-side contracts are in the injection region). It targets only assets already in vault and does no vault-side processing (organizing and polishing belong to vault governance, discussed separately).
|
|
11
|
-
|
|
12
|
-
## Scope
|
|
13
|
-
|
|
14
|
-
Write: mapping (proxy pages), log, hot, index
|
|
15
|
-
Read: registry (`.meta/protocol/registry.yaml`, field and value-set anchor), tag (vocabulary `wiki/tags.md`), trust (generated), vault (originals)
|
|
16
|
-
|
|
17
|
-
## Steps
|
|
18
|
-
|
|
19
|
-
1. **Anchor (one-time read)**: read `.meta/protocol/registry.yaml` and `wiki/tags.md` — value sets and the existing vocabulary are visible before writing
|
|
20
|
-
2. Read the target asset in vault/
|
|
21
|
-
3. Assemble the proxy-page draft per the write-side contracts in the injection region (mapping mirror and registration fields, trust generated, tag labeling); **present the mapping preview** (path / hash / description / tags) and wait for user confirmation
|
|
22
|
-
4. After confirmation, write the proxy page
|
|
23
|
-
5. **Post-write pipeline** (deterministic, mechanical and automatic, no prompting): execute each plugin's write calls in injection-region order, then finish with `python .meta/scripts/pipeline.py verify` (post-write self-verification; on failure, go back and fix); then commit per the commit discipline (`映射: <asset name>`, see the vocabulary in `.meta/protocol/actions.md`)
|
|
24
|
-
6. Report: path / hash / description / tags
|
|
25
|
-
|
|
26
|
-
## Prohibitions
|
|
27
|
-
|
|
28
|
-
- Never modify any vault/ file (the command side is append-only toward vault); other hard rules (hash always computed, body never a full copy, etc.) defer to the mapping block of the injection region
|
|
29
|
-
|
|
30
|
-
## Language
|
|
31
|
-
|
|
32
|
-
Output language takes the default key of the language declaration page `wiki/language.md` (a missing page or missing key falls back to the session language); proper nouns and paths keep their original form.
|
|
33
|
-
|
|
34
|
-
## Parameters
|
|
35
|
-
|
|
36
|
-
- Asset path (relative inside vault/); batching allowed
|
|
37
|
-
|
|
38
|
-
## Injected Section (plugin usage blocks)
|
|
39
|
-
|
|
40
|
-
> This region is a wiki_plugin_kernel projection: consumes pulls merged with usage_routes source-side routing; disclosure order = owner first, routed blocks in the middle, pulled blocks last (rebuilt by inject / all); handwritten content does not belong here — to change the write-side contract, edit PLUGIN.yaml.
|
|
41
|
-
|
|
42
|
-
<!-- cmd-inject:start -->
|
|
43
|
-
<!-- usage:mapping -->
|
|
44
|
-
- Mirror locating: proxy path = `wiki/vault/<original-path>.md` (original name + .md, prevents name collisions); md assets also get proxies, no exceptions
|
|
45
|
-
- Registration fields: `type: source` + `raw_file` (root-relative path) / `raw_sha256` (hexadecimal SHA-256, never skip the computation)
|
|
46
|
-
- Body starts with a one-line description, never copying the full original text; summary / structure extraction are optional enhancements; diary-type assets are registration-first, summaries not enforced
|
|
47
|
-
- URL-type assets: the proxy page carries `url` (vault field — source link, source preservation; required when placed via agent channels, optional for manual placement)
|
|
48
|
-
<!-- /usage:mapping -->
|
|
49
|
-
|
|
50
|
-
<!-- usage:trust -->
|
|
51
|
-
- When writing a page, write `generated` along the way (block style: `by: agent/<current-model>` / `at: <today>`)
|
|
52
|
-
- When a review action happens, append a `verified` event (single line `by: <actor>, at: <date>`), never fabricated to inflate the level
|
|
53
|
-
- Reviews are initiated by the user (triggered by human instruction); agents never append verified events on their own
|
|
54
|
-
<!-- /usage:trust -->
|
|
55
|
-
|
|
56
|
-
<!-- usage:tag -->
|
|
57
|
-
- Before writing, read `wiki/tags.md` and prefer reusing existing terms
|
|
58
|
-
- New-term conventions: primary language follows the language page's default key (absent → session language, preventing mixed Chinese-English fragmentation of the vocabulary); English lowercase kebab-case; hierarchy ≤2; ≤5 per page; restating type forbidden
|
|
59
|
-
<!-- /usage:tag -->
|
|
60
|
-
|
|
61
|
-
<!-- usage:index -->
|
|
62
|
-
- Post-write rebuild (mechanical, automatic): `python .meta/scripts/pipeline.py index` (index — overflow-offloading scheme, including deletion of obsolete old indexes after merge-back) and the same script's `tags` (tag reverse index); LLMs never hand-write indexes
|
|
63
|
-
<!-- /usage:index -->
|
|
64
|
-
|
|
65
|
-
<!-- usage:hot -->
|
|
66
|
-
- Writing entries (mechanical, automatic): `python .meta/scripts/pipeline.py hot <type> "<wikilink + one-sentence essence>"` (type value set same as log, see the log block of the AGENTS injection region); window eviction and truncation are performed by the script
|
|
67
|
-
<!-- /usage:hot -->
|
|
68
|
-
|
|
69
|
-
<!-- usage:log -->
|
|
70
|
-
- Writing lines (mechanical, automatic): `python .meta/scripts/pipeline.py log <type> "<one sentence>" [--domain <domain>]` (type value set in the log block of the AGENTS injection region; domain tag = domain-plugin name such as bb/lark/vault, mandatory for in-domain transactions, omitted for framework and native transactions); rolling window and archiving are performed by the script
|
|
71
|
-
<!-- /usage:log -->
|
|
72
|
-
<!-- cmd-inject:end -->
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: save
|
|
3
|
-
owner: [notes, sessions]
|
|
4
|
-
consumes: [notes, sessions, trust, index, hot, log]
|
|
5
|
-
description: "Save the current conversation, answers, or insights as wiki native notes. Deduplicate before filing, infer type and title, chunk-extract long sessions, update index/log/hot cache. Triggers on: save this, /save, file this, save to wiki, 保存."
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# save: capture
|
|
9
|
-
|
|
10
|
-
Good answers should not vanish in chat history. Save what was just discussed as permanent wiki pages. The wiki compounds through it — save often.
|
|
11
|
-
|
|
12
|
-
## Scope
|
|
13
|
-
|
|
14
|
-
Write: sessions (session backbone pages), notes (native notes), log, hot, index
|
|
15
|
-
Read: registry (`.meta/protocol/registry.yaml`, field and value-set anchor), tag (vocabulary `wiki/tags.md`), trust (generated), index / hot (dedup prerequisites)
|
|
16
|
-
|
|
17
|
-
## Dedup Before Filing (required)
|
|
18
|
-
|
|
19
|
-
1. Read wiki/hot.md and wiki/index.md for recent context
|
|
20
|
-
2. Search existing pages by title and key concepts
|
|
21
|
-
3. A related page exists: never rewrite directly — show the differences and let the user adjudicate (append-style merging requires a user instruction and leaves traces, or the human edits by hand, or a new page is created); partial overlap: likewise, show the differences and let the user choose
|
|
22
|
-
4. Create a new page only after confirming none covers it
|
|
23
|
-
|
|
24
|
-
## Type and Destination
|
|
25
|
-
|
|
26
|
-
type / status value sets defer to the registry (a one-time read anchor; do not re-copy the table); ask only on genuine ambiguity. Destination splits by type: session goes to the long-sessions section below, other native types land in `wiki/notes/` (per-type destinations and contracts in the injection region); the source type is out of scope here — anything with a vault counterpart goes through map.
|
|
27
|
-
|
|
28
|
-
## Workflow
|
|
29
|
-
|
|
30
|
-
1. **Anchor (one-time read)**: read `.meta/protocol/registry.yaml` and `wiki/tags.md` — type / status value sets and the existing vocabulary are visible before writing
|
|
31
|
-
2. Scan the conversation for high-value content (non-obvious insights, decisions with reasons, hard-won analyses, comparisons that will be cited again); skip mechanical Q&A / debugging processes / content already in the repository
|
|
32
|
-
3. Set the type (ask only on genuine ambiguity) and title (ask only on ambiguity or conflict)
|
|
33
|
-
4. Rewrite in declarative present tense: write knowledge, not dialogue
|
|
34
|
-
5. Create the page per the write-side contracts in the injection region (notes / sessions destinations and shapes, trust generated, tag labeling); the session type goes to the long-sessions section
|
|
35
|
-
6. Write wiki pages mentioned in the conversation into related with wikilinks
|
|
36
|
-
7. **Post-write pipeline** (deterministic, mechanical, automatic): execute each plugin's write calls in injection-region order, then finish with `python .meta/scripts/pipeline.py verify` (post-write self-verification; on failure, go back and fix); then commit per the commit discipline (`保存: <page title>`, see `.meta/protocol/actions.md`)
|
|
37
|
-
8. Report: `Saved as [[title]] in wiki/notes/` (session type: `... in wiki/sessions/`)
|
|
38
|
-
|
|
39
|
-
## Long Sessions (session backbone)
|
|
40
|
-
|
|
41
|
-
1. Split into 3-8 sections by topic (not by message count); merge and drop mechanical details
|
|
42
|
-
2. Create the session backbone page: destination, default naming, participants, backbone-page shape, and promotion rules in the sessions block of the injection region
|
|
43
|
-
3. Ask about the title only on genuine ambiguity
|
|
44
|
-
|
|
45
|
-
## Writing Rules
|
|
46
|
-
|
|
47
|
-
Declarative present tense; output language takes the default key of the language declaration page `wiki/language.md` (a missing page or missing key falls back to the session language); every concept / page mentioned gets a wikilink; a future session must be able to cold-read this page.
|
|
48
|
-
|
|
49
|
-
## Parameters
|
|
50
|
-
|
|
51
|
-
- `/save` saves the whole session; `/save <topic>` saves only that topic; `--force` skips confirmation (only when conflict-free)
|
|
52
|
-
|
|
53
|
-
## Injected Section (plugin usage blocks)
|
|
54
|
-
|
|
55
|
-
> This region is a wiki_plugin_kernel projection: consumes pulls merged with usage_routes source-side routing; disclosure order = owner first, routed blocks in the middle, pulled blocks last (rebuilt by inject / all); handwritten content does not belong here — to change the write-side contract, edit PLUGIN.yaml.
|
|
56
|
-
|
|
57
|
-
<!-- cmd-inject:start -->
|
|
58
|
-
<!-- usage:notes -->
|
|
59
|
-
- Landing spot `wiki/notes/<title>.md`, file name free (named by humans); type form vocabulary in registry (open, self-extended by instances), territory values do not land in this zone
|
|
60
|
-
- Append-only: commands never rewrite an existing note wholesale; updating = append-style merge under user instruction (trace left in the body) or manual human edits
|
|
61
|
-
<!-- /usage:notes -->
|
|
62
|
-
|
|
63
|
-
<!-- usage:sessions -->
|
|
64
|
-
- Landing spot `wiki/sessions/YYYY-MM-DD-<topic>.md` (default naming), type: session, participants required (actor list)
|
|
65
|
-
- Backbone page five-section shape: Core Conclusions / Decisions & Rationale / Non-obvious Insights / Open Questions / Related Pages (full-shape sample in the Example section of `.meta/plugins/sessions/PLUGIN.md`)
|
|
66
|
-
- Standalone high-value topics promoted to `wiki/notes/` pages, the backbone page keeping a wikilink; dedupe before promotion
|
|
67
|
-
<!-- /usage:sessions -->
|
|
68
|
-
|
|
69
|
-
<!-- usage:language -->
|
|
70
|
-
- Register discipline: follow the language.register audience reading level when writing saved artifacts; absent register uses the program baseline (first/second-year undergraduates), while explicit user audience requirements and domain source-alignment rules take precedence
|
|
71
|
-
- When to read: read the declaration page before writing any artifact (wiki pages, documents, lecture distillates); page or key absent = follow the session language (conversation language is the output language); proper nouns, code, paths, commands, and file names always keep their original form (language neutrality, invariant under configuration) — the framework presets no specific language; Chinese is merely an instance fact of this project's development period (AGENTS principle 7)
|
|
72
|
-
- Term discipline: when writing hits a term, consult the `terms` mapping first — if tabled, follow the table; otherwise annotate the original in parentheses on first occurrence (e.g. '检索增强生成 (RAG)'), registering only after recurring hits (emergence-based); a registered entry = a single line original→translation, long notes (translation rationale, usage examples) go to the body distillation section
|
|
73
|
-
- Layering: a default baseline, not a mandate — the domain plugins' source-alignment discipline (exam language follows samples/course materials) takes precedence over this page; tag word forms belong to tag, forms of address and personal dynamic preferences belong to user-profile, in-domain term tables (the bb courseware glossary) are self-managed within the domain — none of these are restated on this page
|
|
74
|
-
- Maintenance: the `language` mapping is human-defined first, the agent may propose; the `terms` mapping may be registered by the agent but never overwrites human-defined entries (objections reported); the body distillation section is append-only
|
|
75
|
-
<!-- /usage:language -->
|
|
76
|
-
|
|
77
|
-
<!-- usage:trust -->
|
|
78
|
-
- When writing a page, write `generated` along the way (block style: `by: agent/<current-model>` / `at: <today>`)
|
|
79
|
-
- When a review action happens, append a `verified` event (single line `by: <actor>, at: <date>`), never fabricated to inflate the level
|
|
80
|
-
- Reviews are initiated by the user (triggered by human instruction); agents never append verified events on their own
|
|
81
|
-
<!-- /usage:trust -->
|
|
82
|
-
|
|
83
|
-
<!-- usage:index -->
|
|
84
|
-
- Post-write rebuild (mechanical, automatic): `python .meta/scripts/pipeline.py index` (index — overflow-offloading scheme, including deletion of obsolete old indexes after merge-back) and the same script's `tags` (tag reverse index); LLMs never hand-write indexes
|
|
85
|
-
<!-- /usage:index -->
|
|
86
|
-
|
|
87
|
-
<!-- usage:hot -->
|
|
88
|
-
- Writing entries (mechanical, automatic): `python .meta/scripts/pipeline.py hot <type> "<wikilink + one-sentence essence>"` (type value set same as log, see the log block of the AGENTS injection region); window eviction and truncation are performed by the script
|
|
89
|
-
<!-- /usage:hot -->
|
|
90
|
-
|
|
91
|
-
<!-- usage:log -->
|
|
92
|
-
- Writing lines (mechanical, automatic): `python .meta/scripts/pipeline.py log <type> "<one sentence>" [--domain <domain>]` (type value set in the log block of the AGENTS injection region; domain tag = domain-plugin name such as bb/lark/vault, mandatory for in-domain transactions, omitted for framework and native transactions); rolling window and archiving are performed by the script
|
|
93
|
-
<!-- /usage:log -->
|
|
94
|
-
<!-- cmd-inject:end -->
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
id: domain
|
|
2
|
-
schema_version: 1
|
|
3
|
-
version: 0.1
|
|
4
|
-
depends: []
|
|
5
|
-
updated: 2026-10-06
|
|
6
|
-
attachment: []
|
|
7
|
-
fields: {}
|
|
8
|
-
inject: "Domain abstraction (outer): wiki recognizes only the inner/outer distinction; an outer domain = an adapter contract (external territory / landing strategy / identity proof / wiki-side territory / write model / trust model), declared by each domain plugin itself, with in-domain plugins belonging to the domain transitively; landing is essentially a write-model choice (final-state assets → append-only repository, process container → full read/write, truth elsewhere → pointer), and projection density follows translation cost (mirror / pointer / disclosure-only); borrowing vault or pointers is the default posture, self-standing containers are the exception (criteria: write-model or structural-rigidity divergence); a domain must be discoverable within wiki (declaration page or injection line)"
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
id: vault
|
|
2
|
-
schema_version: 1
|
|
3
|
-
version: 0.6
|
|
4
|
-
depends:
|
|
5
|
-
- domain
|
|
6
|
-
- wiki
|
|
7
|
-
- trust
|
|
8
|
-
- log
|
|
9
|
-
updated: 2026-10-06
|
|
10
|
-
attachment: []
|
|
11
|
-
fields:
|
|
12
|
-
url: "Source URL; provenance registration for URL-type assets (source preservation), optional for manual placement, required for agent channels (delegate etc.); also the interface for other domains to land via vault"
|
|
13
|
-
inject: "Default domain — real-asset repository `vault/`, wiki-side territory `wiki/vault/`: holds assets of any format, doubling as the landing repository for other domains (the url field is the passthrough interface); append-only on the command side, freedom to delete and modify belongs to the human; layout rules belong to the structure plugin"
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
id: wiki
|
|
2
|
-
schema_version: 1
|
|
3
|
-
version: 0.7
|
|
4
|
-
depends: []
|
|
5
|
-
updated: 2026-10-06
|
|
6
|
-
attachment: []
|
|
7
|
-
fields: {}
|
|
8
|
-
inject: "wiki container `wiki/` (the inner side of the inner/outer distinction): origin dichotomy — territory pages in two forms: proxy pages (default, projections of reconcilable external sources, territory paths self-disclosed by each domain's injection line) and in-domain native pages (domain-side archives declared by the domain — the true body lives here, no external source to reconcile, shape owned by the domain plugin; first case bb-track cognition profile user.md); everything outside territories is native pages (writings whose true body lives here; session pages are minutes not mirrors — once the conversation vanishes the page is the true body, writing is birth); index / tags / hot / log are derived pages (mechanical projections); page frontmatter takes a minimal YAML subset (top-level scalars / block lists / one-level block mappings), more complex structures are not parsed"
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# owfa Field Registry (protocol artifact, aggregated projection)
|
|
2
|
-
#
|
|
3
|
-
# Rules:
|
|
4
|
-
# - The protocol section is the authoritative source; revisions must pass check
|
|
5
|
-
# - The plugins section is aggregated from the fields declarations of each PLUGIN.yaml; check validates consistency, and on deviation this table is rewritten with PLUGIN.yaml as the authority
|
|
6
|
-
# - The reserved section is a backfill channel: legitimate staging fields, exempt from the ghost check, awaiting a future plugin's claim
|
|
7
|
-
# - map / save read this table as step 0 (one-read anchor: fields and value sets are visible before writing, no full-repo scan)
|
|
8
|
-
# - Fields stack by composition: one page = protocol fields + each plugin's fields (e.g. a source page = protocol + vault + tag)
|
|
9
|
-
# - Actor convention (the unified value format for all attribution fields): human:name (e.g. human:Joss) / process:workflow name (e.g. process:hash-recalc) / agent/model identifier (e.g. agent/GLM-5.3)
|
|
10
|
-
# - Legacy value migration mapping: seed→draft, developing→draft, done→stable
|
|
11
|
-
|
|
12
|
-
protocol:
|
|
13
|
-
type:
|
|
14
|
-
values: [source, session, profile, todo, structure, language, lark, calendar, project, email, bb, tmp]
|
|
15
|
-
note: "Territory values are closed (extending values requires revising this table)—determines page ownership and mechanical checks: source=proxy page, session=sessions territory, profile=profile page, todo=temporary memory page, structure=structure declaration page, language=language declaration page (wiki/language.md, `language`/`terms` block mappings, owned by the language plugin), lark=external pointer page (wiki/lark/ territory, the token is the identity proof, owned by the lark plugin family), calendar=time territory page (month page, two-section system), project=project declaration page (wiki/projects.md, `projects` block mapping; the project proper lives in the root container projects/), email=personal mailbox domain page (wiki/email/ territory—digest page / people / threads / sources archives, token = email address or Message-ID, owned by the email plugin), bb=BB course domain page (wiki/bb/ territory—domain-root digest page and course identity pages, term_id/course_id is the identity proof, owned by the bb plugin), tmp=temporary page (path is the territory, invisible to the derived layer); import/interop consumer sides tolerate unknown types"
|
|
16
|
-
defaults: [concept, qa, decision, entity, comparison]
|
|
17
|
-
defaults_note: "Form defaults vocabulary—knowledge forms within the notes territory, no mechanical semantics; instances extend it freely (no revision of this table required), prefer reuse to prevent vocabulary fragmentation"
|
|
18
|
-
status:
|
|
19
|
-
values: [draft, stable, deprecated]
|
|
20
|
-
note: "Three lifecycle values; deprecated = kept for links and history but no longer current"
|
|
21
|
-
title:
|
|
22
|
-
note: "Page title, a string; recommended as a required field"
|
|
23
|
-
description:
|
|
24
|
-
note: "One-sentence description (≤80 characters); data source for index entries and viewer hints; when absent, the index takes the first sentence of the body"
|
|
25
|
-
created:
|
|
26
|
-
note: YYYY-MM-DD
|
|
27
|
-
updated:
|
|
28
|
-
note: "YYYY-MM-DD, refreshed by any write operation"
|
|
29
|
-
|
|
30
|
-
plugins:
|
|
31
|
-
calendar:
|
|
32
|
-
calendar:
|
|
33
|
-
note: block mapping (declaration page) — source key → source declaration (value syntax belongs to the adapter: lark-calendar uses `lark/<profile> <calendar_id|primary>`); the source key is the end-of-line tag on schedule lines
|
|
34
|
-
cron:
|
|
35
|
-
cron:
|
|
36
|
-
note: block mapping (task page) — trigger (deferred-trigger declaration; v0.4 generalizes the v0.3 schedule key, schedule reads as the time form): time form = crontab 5-field or human-readable cadence, local timezone by default; condition form = condition <kind> <target> [pattern] [interval] [max_fires] [cooldown], kind first batch file|command|http|process|port|webhook (open vocabulary — extend words, not machinery), pattern semantics fixed as no-match→match edge (default any change after baseline) / action (the action in one sentence) / form (execution shape: session edition | script edition — criterion: any agent-judgment step means session, purely mechanical means script; orthogonal to trigger, all four combinations legal) / domain (owning domain, tagged when a domain plugin registers via the bridge, omittable for cross-domain tasks) / status (active in-service | paused suspended | deprecated retired) / last_run (most recent run or fire time, machine-maintained) / machine (optional: executing-machine anchor for multi-device location; no linkage built)
|
|
37
|
-
device:
|
|
38
|
-
device:
|
|
39
|
-
note: block mapping (device profile page in notes) — serial (serial number) / purchased (purchase date YYYY-MM-DD) / warranty_until (warranty or coverage end date YYYY-MM-DD, the attached-audit scan item), a three-key minimal set; remaining keys open (model, vendor, etc.; the architecture does not enumerate)
|
|
40
|
-
language:
|
|
41
|
-
language:
|
|
42
|
-
note: block mapping (declaration page) — canonical key → one-sentence rule (open vocabulary, e.g. default/teaching/annotation/register); output language and writing baseline — register = the writing register (audience reading level, default first/second-year undergraduates), consumed by bb-teach and bb-quiz
|
|
43
|
-
terms:
|
|
44
|
-
note: block mapping (declaration page) — term original → unified translation (single-line value); the cross-session translation-consistency lookup piece
|
|
45
|
-
link:
|
|
46
|
-
aliases:
|
|
47
|
-
note: YAML list, aliases/short names, for link resolution
|
|
48
|
-
related:
|
|
49
|
-
note: YAML list, full-name wikilinks of related pages
|
|
50
|
-
mapping:
|
|
51
|
-
raw_file:
|
|
52
|
-
note: root-relative path, always present on proxy pages
|
|
53
|
-
raw_sha256:
|
|
54
|
-
note: hexadecimal SHA-256, mechanically recomputable from vault
|
|
55
|
-
sessions:
|
|
56
|
-
participants:
|
|
57
|
-
note: YAML list, actor convention (human:name / process:flow name / agent/model id), the multi-agent collaboration extension point
|
|
58
|
-
tag:
|
|
59
|
-
tags:
|
|
60
|
-
note: YAML list ≤5; primary language follows the language page's default key (absent → session language); English tags lowercase kebab-case; hierarchy ≤2, `/` separated; restating type forbidden
|
|
61
|
-
trust:
|
|
62
|
-
generated:
|
|
63
|
-
note: block-style mapping by/at (actor convention + YYYY-MM-DD), who generated the page
|
|
64
|
-
sources:
|
|
65
|
-
note: source list, items contain id / resource / credibility signals (author, usage_count, last_modified)
|
|
66
|
-
stale_after:
|
|
67
|
-
note: YYYY-MM-DD absolute moment; expiry check = the pure comparison now ≥ stale_after
|
|
68
|
-
verified:
|
|
69
|
-
note: event list, items single-line `by: <actor>, at: <date>`, appendable multiple times; the trust level is derived from this
|
|
70
|
-
vault:
|
|
71
|
-
url:
|
|
72
|
-
note: Source URL; provenance registration for URL-type assets (source preservation), optional for manual placement, required for agent channels (delegate etc.); also the interface for other domains to land via vault
|
|
73
|
-
|
|
74
|
-
reserved: {}
|
|
75
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|