Exocomp epistemic report
Type: agentic-system-analyses/types/agentic-system-epistemic-report.md
Source-and-claim boundary
The question is what licenses reliance on Exocomp's project claims and what those claims can change. Scope and exclusions are those of boundary; evidence identities are in its Source register. All new evidence below is SRC-1 at the frozen commit, implementation unless labelled doctrine/design. No target execution, provider call or experiment was performed. Historical stored sessions are not used to establish current-revision operation.
The runtime is a useful baseline, not an inspection ceiling. Direct inspection adds report closure, requirement regeneration, website imports and human answers. The supplied RT-RTE-requirement-signoff now distinguishes reconstructed implemented status from durable signoff: the writer omits implemented entries; later reads reconstruct them from source, with empty behavior. EPI-RTE-requirement-refresh retains the corresponding lineage analysis.
| Entry point or operation | Source path | Coverage and records | Limit and conclusion prevented |
|---|---|---|---|
| Main CLI variants and debug restore | SRC-1 source/cmds/exocomp/main.go, source/cmds/exocomp-agent/main.go, source/cmds/exocomp-web/main.go, source/cmds/agimus/main.go |
Direct dispatch search checked against supplied RT-RTE-planner-chat, RT-RTE-client-tools | No executed invocation |
| Tool registration and completion hook | SRC-1 source/tools/Toolset.go, source/ui/jsonl/Client.go |
Direct reads; registered agents, bugs, changelog, files, humans, programs, requirements, skills, websites; QuitHook exits from supplied success, not an independent evaluator; RT-RTE-contractor-work | No claim of reliable task completion from process termination |
| Model requests, adapter, ordinary tools, backup, restore | SRC-1 source/engine/Session.go, source/engine/Recovery.go, source/adapters/DeepSeek.go |
Supplied runtime findings: RT-RTE-planner-chat, RT-RTE-file-admission, RT-RTE-program-execution | Provider internals, weights, actual compliance and test outcomes uninspected |
| Requirements definition, check, cleanup and reconstruction | SRC-1 source/tools/Requirements.go, source/tools/readRequirements.go, source/tools/readImplementedRequirements.go, source/tools/writeRequirements.go, source/utils/ast/HasSymbol.go, source/utils/ast/hasFunc.go, source/utils/ast/GetPackageSymbols.go |
Direct reads of DefineFunc, Signoff, List and helpers; EPI-RTE-symbol-check, EPI-RTE-signoff-disposition, EPI-RTE-requirement-refresh | Other Define variants and AST extraction helpers not fully inspected; no complete declaration-fidelity claim |
| Bug reporting, closure and selection | SRC-1 source/tools/Bugs.go, source/tools/readBugs.go, source/tools/writeBugs.go |
Direct Add/Fix/List and persistence reads; EPI-RTE-bug-records, EPI-RTE-bug-closure | Search branches not fully read; List exclusion does not imply universal erasure |
| Changelog and Remove | SRC-1 source/tools/Changelog.go, source/tools/writeChangelog.go |
Direct wrappers/createEntry/writer; EPI-RTE-changelog-records | Detailed UI rendering and Search uninspected |
| Human clarification and confirmation | SRC-1 source/tools/Humans.go, source/engine/Session.go, source/ui/web/routes/session/CallTool.go, app/engine/Session.go, app/controllers/Chat.go, source/agents/planner.yaml |
Direct Ask/Choose/Answer/Await/HasMethod, qualified and bare-name Session consumers, ToolCall/Command name parsing, web CallTool, browser AnswerQuestion/Waiting gate and prompt reads; EPI-RTE-human-answers | Qualified dispatch admits Answer and released Ask/Choose results as generic tool messages; only bare-name Answer reaches the bounds defect. Browser submission is conditional on its Waiting gate. No authenticated respondent or acceptance instance |
| External imports | SRC-1 source/tools/Websites.go, source/tools/getWebsiteText.go, source/tools/getWebsiteMarkdown.go, source/tools/Files.go |
Direct Fetch/helper/Files.Read reads; EPI-RTE-website-fetch | HTML parser internals, Websites.Stat, file Search/ReadSymbol not fully inspected; no complete extraction-fidelity verdict |
| Summarization | SRC-1 source/utils/chat/SummarizeMessages.go, source/utils/fmt/FormatSingleLine.go, source/utils/fmt/isPrintableASCII.go, source/agents/summarizer.yaml |
Direct projection/formatter/prompt reads; supplied Inquire consumer; EPI-RTE-inquire-projection | Model summary semantic relation remains indeterminate |
| Skills and build/install | SRC-1 source/tools/Skills.go, source/engine/Session.go, source/schemas/ToolCall.go, source/types/Command.go, toolchain/actions/BuildExocomps.go, installer/actions/InstallExocomp.go |
Direct qualified/bare-name dispatch and Load/Unload/helper reads; supplied RT-RTE-skill-loading, RT-ABS-skill-grants, RT-RTE-build-install | No activated skill or compiled/installed executable evidence |
| Tests, browser and retained examples | SRC-1 docs/TESTING.md, source/agents/tester.yaml, app/controllers/, sessions/ |
Direct testing doctrine; browser/state consumption supplied by boundary/runtime; historical artifacts deliberately unused | Tests not run; no efficacy estimate, causal attribution or system-complete negative about acceptance in all possible project workflows |
No separate evaluation hook was identified by the scoped CLI/engine/UI hook search. The identified Quit hook is a termination consumer. This scoped finding is not a whole-repository absence claim. Consequential design claims are EPI-CLM-correct-results, EPI-CLM-summary-fidelity and the supplied RT-CLM-role-separation.
Epistemic-object inventory
| Object ID | Candidate truth-apt content or none | Claimed role | Evidence source ID and local anchor | Gap/limit |
|---|---|---|---|---|
| EPI-OBJ-specification | See record | See record | SRC-1 source/tools/Requirements.go |
Intended behavior is normative; existence and implementation assertions are truth-apt |
| EPI-OBJ-implemented-status | See record | See record | SRC-1 source/tools/readImplementedRequirements.go |
Not a behavioral satisfaction certificate |
| EPI-OBJ-bug-description | See record | See record | SRC-1 source/tools/Bugs.go |
Report truth not checked by storage |
| EPI-OBJ-fixed-status | See record | See record | SRC-1 source/tools/Bugs.go |
Closure and report content have distinct consumers |
| EPI-OBJ-changelog-entry | See record | See record | SRC-1 source/tools/Changelog.go |
A record named Fix/Remove is not a checked repair/deletion |
| EPI-OBJ-website-content | See record | See record | SRC-1 source/tools/Websites.go |
Remote source warrant unknown |
| RT-RTE-planner-chat | Assistant assertions can be truth-apt; exact propositions not determinable without an instance | See record | SRC-1 source/engine/Session.go |
Tool choice is policy, not necessarily a proposition |
| RT-RTE-contractor-work | Quit reports may assert completed work | See record | SRC-1 source/tools/getAgentWorkReport.go |
Report presence and truth differ |
| EPI-RTE-human-answers | Answers may supply facts, preferences or approval; instance-dependent | See record | SRC-1 source/tools/Humans.go |
Not all answers are truth-apt |
| RT-RTE-agent-inquire | Projected prose and model summary | See record; projection part below | SRC-1 source/utils/chat/SummarizeMessages.go |
Summary instance and semantic preservation unknown |
| RT-OBJ-role-grants, RT-BAP-role-prompt | Grants and imperatives are policy, not truth-apt updates | See records | SRC-1 source/agents/NewAgent.go |
Factual claims inside prompts assessed separately |
| RT-CMP-planner-model, RT-CMP-coder-model, RT-CMP-summarizer-model | Individuated parameter-encoded propositions not determinable | See records | SRC-1 source/types/Config.go |
Weights, training provenance and provider-side updates inaccessible |
Authority-route ledger
Each row is one function. See delegates record-owned fields rather than redeclaring them. No row establishes observed operation. The locally assessed content relation and architectural status are independent of a record's conclusion-status vocabulary.
| Route ID | Route function | Architectural status | Object/candidate ID | Content/update relation | Transition or check target | Evaluator/condition and domain | Activation and timing | Possible or observed result | Implemented force | Epistemic authority and scope | Operational authority: behavior permitted, blocked, or changed | Behavioral-authority path: consumer, channel, force, horizon | Evidence source ID and local anchor | Claim IDs or none | Mismatch marker or none | Gap/limit |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RT-RTE-planner-chat | content transformation | implemented | See record | truth-apt transformation: indeterminate | See record | See record | See record | See record | See record | Candidate assertions, not accepted ampliative claims | See record | See record | SRC-1 source/engine/Session.go |
EPI-CLM-correct-results | none | No proposition/inputs to establish non-entailment |
| RT-RTE-contractor-work | operational admission/selection/consumption | implemented | See record | no content change | See record | See record | See record | See record | See record | Quit report presence licenses workflow continuation, not report truth | See record | See record | SRC-1 source/tools/Agents.go |
EPI-CLM-correct-results | completion versus correctness | Report not independently checked |
| RT-RTE-program-execution | check/evidence production | implemented | Caller-selected code/test | no content change | Proposed program behavior on selected test cases | External executed program and caller-written tests; see record | See record | See record | See record | At most test-specific outcome if obtained; no general correctness license | See record | See record | SRC-1 source/tools/Programs.go |
EPI-CLM-correct-results | none | No actual tests or reference answers supplied |
| EPI-RTE-symbol-check | check/evidence production | implemented | EPI-OBJ-implemented-status | truth-apt transformation: entailed derivation | See record | See record | See record | See record | See record | AST predicate result over parseable bytes only | See record | See record | SRC-1 source/utils/ast/HasSymbol.go |
EPI-CLM-correct-results | narrow structural license | Parsing is not type checking or behavioral testing |
| EPI-RTE-signoff-disposition | disposition/acceptance | implemented | EPI-OBJ-implemented-status | non-truth-apt policy/content update: status assignment | See record | See record | See record | See record | See record | Structural disposition only; criterion is not spec behavior | See record | See record | SRC-1 source/tools/Requirements.go |
EPI-CLM-correct-results | implemented label exceeds behavioral check | Not acceptance of an explanatory claim |
| EPI-RTE-requirement-refresh | lineage/freshness/recovery | implemented | EPI-OBJ-specification, EPI-OBJ-implemented-status | truth-apt transformation: non-ampliative reshaping | See record | See record | See record | See record | See record | Source-derived symbol availability, not preserved intent/warrant | See record | See record | SRC-1 source/tools/readRequirements.go |
none | source-first reconstruction | Behavior/rationale can disappear from reconstituted requirements |
| EPI-RTE-bug-records | content transformation | implemented | EPI-OBJ-bug-description | truth-apt transformation: acquisition/import | See record | See record | See record | See record | See record | Imported caller claim; source warrant unknown | See record | See record | SRC-1 source/tools/Bugs.go |
none | none | Software does not diagnose the bug from evidence |
| EPI-RTE-bug-records | retention | implemented | EPI-OBJ-bug-description | no content change | See record | See record | See record | See record | See record | Retention is not acceptance | See record | See record | SRC-1 source/tools/writeBugs.go |
none | none | Direct file overwrite, not a provenance ledger |
| EPI-RTE-bug-closure | disposition/acceptance | implemented | EPI-OBJ-fixed-status | non-truth-apt policy/content update: report closure | See record | See record | See record | See record | See record | No evidential repair license | See record | See record | SRC-1 source/tools/Bugs.go |
EPI-CLM-correct-results | closure without repair check | Caller may have evidence; method does not require it |
| EPI-RTE-bug-closure | operational admission/selection/consumption | implemented | EPI-OBJ-fixed-status | no content change | See record | See record | See record | See record | See record | No new truth warrant | See record | See record | SRC-1 source/tools/Bugs.go |
none | none | List exclusion is enforcing selection, not proof model changes priorities |
| EPI-RTE-changelog-records | content transformation | implemented | EPI-OBJ-changelog-entry | truth-apt transformation: acquisition/import | See record | See record | See record | See record | See record | Caller claim with unknown source warrant | See record | See record | SRC-1 source/tools/Changelog.go |
none | Remove is an entry, not deletion | No validation of described event |
| EPI-RTE-changelog-records | retention | implemented | EPI-OBJ-changelog-entry | no content change | See record | See record | See record | See record | See record | No acceptance from persistence | See record | See record | SRC-1 source/tools/writeChangelog.go |
none | none | De-duplication is not corroboration |
| EPI-RTE-website-fetch | content transformation | implemented | EPI-OBJ-website-content | truth-apt transformation: acquisition/import | See record | See record | See record | See record | See record | Source warrant unknown; URL/status retained, meaning may be degraded | See record | See record | SRC-1 source/tools/Websites.go |
none | none | 16 MiB bound and parser conversion; no factual validation |
| EPI-RTE-human-answers | content transformation | implemented | See record | truth-apt transformation: acquisition/import | See record | See record | See record | See record | See record | Conditional on an answer being truth-apt; provenance/warrant unknown | See record | See record | SRC-1 source/tools/Humans.go |
EPI-CLM-correct-results | human label is not authentication | Qualified Answer imports into Humans.contents and generic Session messages; browser submission may be blocked by Waiting |
| EPI-RTE-human-answers | operational admission/selection/consumption | implemented | See record | no content change | See record | See record | See record | See record | See record | No additional warrant from answer arrival | See record | See record | SRC-1 source/engine/Session.go |
EPI-CLM-correct-results | bare-name bounds defect only | Qualified results have implemented advisory force; concurrent append order and successful browser delivery are not established |
| EPI-RTE-inquire-projection | content transformation | implemented | See record | truth-apt transformation: non-ampliative reshaping | See record | See record | See record | See record | See record | Reduced source prose only; degraded evidence visibility | See record | See record | SRC-1 source/utils/chat/SummarizeMessages.go |
EPI-CLM-summary-fidelity | omitted evidence | Reshaping does not guarantee semantic equivalence |
| RT-RTE-agent-inquire | content transformation | implemented | See record | truth-apt transformation: indeterminate | See record | See record | See record | See record | See record | Model condensation is a candidate, not checked preservation | See record | See record | SRC-1 source/tools/Agents.go |
EPI-CLM-summary-fidelity | factuality instruction versus unchecked output | No default Inquire grant or observed summary |
| RT-RTE-skill-loading | operational admission/selection/consumption | implemented | See record | non-truth-apt policy/content update: qualified Load changes loaded state | See record | See record | See record | Generic tool notice; see record | Tool-state admission, not system-body supply | Capability compatibility is not instruction-quality warrant | Loaded object permits subsequent script selection; see record | Model receives generic notice at tool priority; loaded object feeds Execute; see record | SRC-1 source/tools/Skills.go |
none | qualified dispatch bypasses helper | No default grants or observed activation |
| RT-RTE-skill-loading | behavior/policy adaptation | implemented | See record | non-truth-apt policy/content update: qualified Unload removes loaded state | See record | See record | Explicit qualified Unload | Generic tool notice; see record | Removes script-selection state, not injected bodies | No retrospective invalidation of earlier claims | Later Execute cannot select removed object; see record | Skills.Execute enforcing loaded-state selection; model receives tool notice; see record | SRC-1 source/tools/Skills.go |
none | qualified dispatch bypasses helper | Prior system bodies and script/file effects are not rolled back |
| RT-RTE-skill-loading | operational admission/selection/consumption | implemented | See record | non-truth-apt policy/content update: helper/bare-name system instruction supply | See record | See record | Session.LoadSkill helper or bare-name skills/Load after tool success | Body inserted as system message; see record | Model-interpreted instruction priority | Compatibility is not instruction-quality warrant | Supplies additional guidance without expanding grant arrays | Invoking model, system-message channel, advisory instruction priority, conversation and possible recovery; see record | SRC-1 source/engine/Session.go |
none | distinct entry point | No shipped qualified parser reaches this branch; direct helper has weaker program checking |
| RT-RTE-skill-loading | behavior/policy adaptation | implemented | See record | non-truth-apt policy/content update: helper/bare-name instruction withdrawal | See record | See record | Session.UnloadSkill helper or bare-name skills/Unload after tool success | Matching system bodies removed; see record | Enforcing context removal, not rollback | No retrospective invalidation of earlier claims | Removes matching instruction text from subsequent requests | Session message filtering, enforcing removal, subsequent conversation requests; see record | SRC-1 source/engine/Session.go |
none | distinct entry point | Older differing bodies and prior effects remain; no observed use |
System-claim versus route comparison
| Claim ID | Claimed operation or warrant | Claim source ID/anchor and evidence layer | Doctrine/design support | Implemented route IDs | Observed-run support | Causal support and design limits | Supported conclusion | Mismatch/unknown |
|---|---|---|---|---|---|---|---|---|
| EPI-CLM-correct-results | See record | SRC-1 source/agents/planner.yaml; doctrine/design |
See record | RT-RTE-program-execution, EPI-RTE-symbol-check, EPI-RTE-bug-closure, RT-RTE-file-admission | None used | No comparison; test design/model compliance unknown | Testing and clarification are requested and executable; correctness is not a global admission invariant | Symbol existence, report closure and immediate writes are weaker than verified behavior |
| EPI-CLM-summary-fidelity | See record | SRC-1 source/agents/summarizer.yaml; doctrine/design |
See record | EPI-RTE-inquire-projection, RT-RTE-agent-inquire | None used | No reference-summary comparison | Factual compression is requested; incomplete evidence reaches summarizer | Omission can remove the very facts the prompt asks it to preserve |
| RT-CLM-role-separation | See record | SRC-1 source/agents/planner.yaml; doctrine/design |
See record | RT-RTE-program-execution, RT-RTE-client-tools | None used | No isolation experiment | Method filtering and role guidance are distinct controls | See supplied forcing case; no new universal sandbox claim |
Bounded conclusion
Exocomp can acquire project files, remote pages and caller-authored reports, and return them to model invocations. Qualified Answer calls import answers into Humans and generic Session tool messages; released qualified Ask/Choose calls also return the answer or error into that transcript. This implements model-facing supply, not observed successful delivery or epistemic acceptance. Files.Read preserves the read bytes under a header (SRC-1 source/tools/Files.go); website extraction can reduce or truncate content. Neither transport authenticates a proposition's truth. Source warrant remains unknown except for the narrow implementation-derived predicates described below. Model generation and condensation are implemented invocations; without concrete outputs and inputs, their semantic relation is indeterminate, not proven ampliative production.
The clearest checked derivation is structural: parseable source containing the requested symbol satisfies HasSymbol. The immediate consumer can mark a requirement implemented. Its criterion, intended use and scope are symbol-presence admission for project status, not matching the requested behavior, compiling, passing tests or producing accepted explanatory knowledge. Read-back is more consequential than a status bit: implemented entries are filtered out of the requirements file, source scanning regenerates implemented declarations with empty behavior, and those source-derived entries take precedence over saved specifications. This can remove intent from the requirements tool's next view. See EPI-RTE-symbol-check, EPI-RTE-signoff-disposition, EPI-RTE-requirement-refresh.
Bug closure is a different disposition: an existing report and successful I/O suffice. The fixed flag enforces omission from Bugs.List, while planner doctrine says unfixed bugs should be prioritized. Thus an unchecked closure can change the information used for work selection before any further test. The description survives in the store; closure is not a checked refutation and does not erase every read path. Changelog Remove likewise records a removal claim rather than deleting a claim or checking that source was removed. See EPI-RTE-bug-closure, EPI-RTE-changelog-records.
Testing is an important counterweight to an overly negative reading: the tester is explicitly instructed to run go test, and Programs can execute it. A valid test result could warrant behavior on its tested domain. No supplied test result, expected-answer provenance, sufficient behavioral criterion, enforced test-success write gate or evidence-consuming acceptance instance establishes that broader route here. Human plan confirmation is also requested. Humans.Answer stores an answer and releases its waiter. Shipped model, terminal and web parsers supply qualified names, so Session admits both Answer and the released Ask/Choose result through generic tool-message handling. Ask/Choose completion permits the response loop to continue inference; direct Answer does not independently start another inference. Transcript retention and later backup/restore are afforded, not guaranteed persistence success. Browser AnswerQuestion returns local validation success before asynchronous submission, and its Session.CallTool can refuse while Waiting; neither return proves delivery. Concurrent Answer and Ask/Choose appends have no unconditional ordering, and web GetLastMessage need not select the requesting call's own result. Only an embedding passing bare name humans with method Answer reaches the reverse scan at len(Messages), panicking before append/unlock and leaving the mutex locked. These entry-point distinctions preserve real qualified model-facing authority without treating answer arrival as authentication or evidence-consuming acceptance. See EPI-RTE-human-answers. These are bounded findings, not a claim that no task can be successfully tested or accepted.
No lifecycle-integration witness after epistemic acceptance was established by the assessed routes. Retention, source regeneration, delivery and operational use before acceptance must not be renamed integration. The remaining uninspected branches prevent a system-complete negative. Role instructions and symbolic grants have real behavior-shaping paths independently of truth-apt production. Skills need separate entry-point treatment: ordinary qualified Load/Unload changes loaded objects and delivers generic tool notices, while Session.LoadSkill/UnloadSkill and bare-name skills calls afford system-body insertion/removal. Qualified Unload does not withdraw an already injected body; helper removal does not roll back prior effects. No default skill grants or observed skill use were established. See RT-RTE-skill-loading. Exact weights, parameter updates inside providers, improved future capacity, exercised reflection, autonomous criticism and evidence-responsive self-improvement are not established by this inspection. External parameter opacity is not evidence that these properties are absent, and persistence or delegated work does not establish them.
Shared records
Operative objects
EPI-OBJ-specification
Label: Requirement specification
Source-native identity: Requirement.Declaration and Requirement.Behavior, keyed by File/Symbol. Representational form: symbolic Go declaration plus natural-language intended behavior, with distinct checks: DefineFunc parses/extracts the declaration but copies Behavior. Storage substrate: in-memory Requirements.contents and pending entries in .exocomp/requirements.json. The behavior is a requested policy, not necessarily a factual assertion; claims of implementation are separate. No object counterpart is declared in the supplied runtime; RT-RTE-requirement-signoff acts on this object. SRC-1 source/tools/Requirements.go, source/tools/writeRequirements.go.
Type: "func", Declaration: prettified.Body, Symbol: prettified.Name, Behavior: behavior, ---
source/tools/Requirements.go
EPI-OBJ-implemented-status
Label: IsImplemented status
Source-native identity: Requirement.IsImplemented, a symbolic boolean consumed by persistence and status rendering. Storage substrate: in-memory Requirement; true entries are omitted from the persisted pending-requirements file and regenerated from source on read. This is distinct from the specification's intended behavior and from the route RT-RTE-requirement-signoff. SRC-1 source/tools/writeRequirements.go, source/tools/readImplementedRequirements.go.
Behavior: "", IsImplemented: true, ---
source/tools/readImplementedRequirements.go
EPI-OBJ-bug-description
Label: Bug description
Source-native identity: Bug.Description keyed by file/symbol. Representational form: natural language, potentially claiming that a named symbol behaves incorrectly. Storage substrate: Bugs.contents and .exocomp/bugs.json. Distinct from fixed-status selection; no supplied runtime object counterpart. SRC-1 source/tools/Bugs.go, source/tools/writeBugs.go.
bug_report.Description = description bug_report.IsFixed = false ---
source/tools/Bugs.go
EPI-OBJ-fixed-status
Label: IsFixed status
Source-native identity: Bug.IsFixed. Representational form: symbolic boolean with fixed List filtering; the label may be read as a truth-apt repair assertion by a human, but software uses it as closure authority. Storage substrate: same bug map/JSON as the separate description. No supplied runtime counterpart. SRC-1 source/tools/Bugs.go.
if bug_report.IsFixed == false { ---
source/tools/Bugs.go:277-324
EPI-OBJ-changelog-entry
Label: Changelog entry
Source-native identity: ChangelogEntry.Description and symbolic Date/Type/File/Symbol metadata. Natural-language event assertion and symbolic exact-duplicate key have distinct consumers: models/humans interpret the description; createEntry compares the full event tuple. Storage substrate: map of entry arrays and .exocomp/changelog.json. No supplied runtime object counterpart. SRC-1 source/tools/Changelog.go, source/tools/writeChangelog.go.
if entry.Type == method && entry.File == internal_path && entry.Symbol == symbol && entry.Description == description { ---
source/tools/Changelog.go
EPI-OBJ-website-content
Label: Website content
Source-native identity: Websites.Fetch returned page body with URL/status header. Representational form: natural-language webpage text or symbolic HTML/Markdown serialization, depending on format; source claims remain imported. Storage substrate: tool return string, and session messages when invoked through Session. No supplied runtime counterpart; RT-RTE-planner-chat is a downstream generic consumer rather than this object. SRC-1 source/tools/Websites.go.
bytes, err4 := io.ReadAll(io.LimitReader(response.Body, 1610241024)) ---
source/tools/Websites.go
Routes
EPI-RTE-symbol-check
Label: Signoff symbol check
Part of: RT-RTE-requirement-signoff
Check component: caller-selected source/specification → HasSymbol → boolean. Requirements owns invocation; Go parser and AST name/type dispatch own the evaluator. Domain: parseable single-file Go AST and requested symbol/kind, not declaration equivalence or runtime behavior. The caller selects the target; program rejects missing/unparseable symbols. No human veto or expected behavioral answer is required. Operating mode: open signoff request, not a comparison experiment.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Boolean consumed by Signoff, not an independent public work report.
- Later read-back: inapplicable — this check itself retains no result; downstream disposition and refresh are separate.
- Delegated visibility: Caller-selected project source may be contractor-authored; parent can request signoff.
- Selection predicate: Existing specification and readable source; expected_type dispatch to hasFunc/hasType.
- Invalidation or expiry: Source changes can invalidate the result immediately; no ongoing check is installed.
- Activation or effect: True permits status assignment; false yields Signoff error. License is structural only.
- Evidence limits: No observed execution or warranted premise about behavioral correctness.
SRC-1 source/utils/ast/HasSymbol.go, source/utils/ast/hasFunc.go. A concrete deduction from inspected code: package p; func F() {} with symbol F, expected type func, reaches the top-level name comparison and returns true, regardless of a behavior requirement such as “F writes a file.” This is an implementation-layer deduction, not target execution. The structural result follows from the bytes and inspected algorithm; the behavioral requirement does not.
} else if func_decl.Name.Name == symbol { return true } ---
source/utils/ast/hasFunc.go
EPI-RTE-signoff-disposition
Label: Signoff status disposition
Part of: RT-RTE-requirement-signoff
Disposition component: true check → IsImplemented assignment → pending-record writer → notice/error. Requirements owns progression. Criterion: presence of the selected AST symbol; intended use: mark project specification implemented; scope: selected file/symbol, not behavioral satisfaction. Caller proposes, code decides, no content-specific human veto. The supplied runtime distinguishes this assignment from durable true-status persistence; refresh below explains the affected later read-back. Existing files are not rolled back.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Implemented notice or write/path/check error; see supplied parent for exact strings.
- Later read-back: True entries are excluded from JSON; subsequent source scan reconstructs status, not an archived acceptance decision.
- Delegated visibility: Planner can observe project symbol status through requirement tools, not necessarily a child test trace.
- Selection predicate: Caller-selected matching specification plus true HasSymbol and successful writer for success notice.
- Invalidation or expiry: Later source edits or requirement definitions; no versioned rollback of specification intent.
- Activation or effect: In-memory true status and omission from pending JSON; status tools can present implemented declarations.
- Evidence limits: No test or evidence-consuming semantic acceptance; criterion is weaker than full implementation.
SRC-1 source/tools/Requirements.go, source/tools/writeRequirements.go. Assignment evidence is supplied by the parent record; the load-bearing cleanup condition is:
if specification.IsImplemented == false { ---
source/tools/writeRequirements.go
EPI-RTE-requirement-refresh
Label: Requirement refresh
Distinct identity: the writer/read reconstruction chain spans and extends RT-RTE-requirement-signoff; it is not merely Signoff or its check. Requirements construction and reads clear contents, scan source, then import pending JSON only where the scanned entry is absent. Source-derived entries have empty Behavior. Writer persists only unimplemented entries. Software, not a human, determines precedence and cleanup. Go syntax/symbol extraction is the admission domain; there is no behavioral oracle. A caller's intended specification guides definition but does not survive in each implemented record. DefineFunc can replace a current entry; later refresh can again prefer source. No versioned recovery of lost behavior is provided by these helpers.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Helper success/error; List renders merged declarations/status, DefineFunc or Signoff returns its own notice.
- Later read-back: Constructors/List/Signoff reread source and pending JSON; implemented entries are reconstructed, not loaded as persisted true decisions.
- Delegated visibility: Shared source plus pending records can be read by planner and contractors within their path view.
- Selection predicate: Scan sandbox Go files, extract public symbols via GetPackageSymbols(false), then admit saved specs only for absent file/symbol keys.
- Invalidation or expiry: Source edits change generated status; pending-file replacement and later writes can remove saved intent. No historical acceptance chain.
- Activation or effect: Source-derived declaration/status can displace saved behavior before later models see requirements; omission from writer can make the loss durable.
- Evidence limits: AST extraction details not exhaustively audited; this warrants precedence/cleanup findings, not complete symbol coverage or correct software.
SRC-1 source/tools/readRequirements.go, source/tools/readImplementedRequirements.go, source/tools/writeRequirements.go, source/utils/ast/GetPackageSymbols.go.
tool.contents = make(map[string]map[string]types.Requirement)
if tool.Playground != "" { readImplementedRequirements(tool) } ---
source/tools/readRequirements.go_, exists := tool.contents[file][symbol]
if exists == false { tool.contents[file][symbol] = specification } ---
source/tools/readRequirements.go
The supplied parent's corrected Later read-back distinguishes status reconstruction from persistence of the original specification. Its narrow AST-check finding remains separate from this reconstruction route.
EPI-RTE-bug-records
Label: Bug report recording
Distinct from supplied generic file admission: Bugs.Add takes a description, keys it by file/symbol, sets IsFixed false, and overwrites an existing description when the key exists. Code admits paths and serialization, not the report's evidence. Caller proposes content and may be a tester model or direct client; no intrinsic human approval, truth oracle or repair criterion. Open reporting mode. Update resets closure, and later Add can revise a report; JSON overwrite is not historical rollback.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Written/updated notice or error.
- Later read-back: readBugs reloads
.exocomp/bugs.json; List returns unfixed visible reports. - Delegated visibility: Shared project reports are available to planner/coder tools within path checks.
- Selection predicate: Existing or new path/symbol key; supplied description; path and write success, not diagnosis validation.
- Invalidation or expiry: Later Add replaces description and reopens report; Fix changes closure flag.
- Activation or effect: Imported claim is retained and delivered as work-selection input; no demonstrated prioritization change.
- Evidence limits: No witnessed report or test evidence proving the alleged defect.
SRC-1 source/tools/Bugs.go, source/tools/readBugs.go, source/tools/writeBugs.go. Object record above supplies overwrite/reset evidence.
resolved, err0 := resolveSandboxPath(tool.Playground, filepath.Join(".exocomp", "bugs.json")) ---
source/tools/writeBugs.go
EPI-RTE-bug-closure
Label: Bug closure selection
No supplied counterpart; distinct from requirement signoff because it checks no source symbol or test. Bugs.Fix accepts a caller-selected existing report, assigns IsFixed and writes it. Bugs.List independently consumes that flag and filters fixed reports out. Caller proposes closure; code decides key/path/I/O admissibility; human participation is unresolved for direct calls. No answer oracle, regression criterion or evidence attachment is required. Operating mode: explicit report closure. Add can reopen; closure does not roll back product effects or delete stored description.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Fixed notice/error; later List gives only unfixed reports in the sandbox view.
- Later read-back: Flag persists with the report and is reloaded before List; closed description remains stored.
- Delegated visibility: Coder can close a report that planner later requests through Bugs.List.
- Selection predicate: Existing file/symbol plus path checks for Fix; IsFixed false plus path visibility for List.
- Invalidation or expiry: Add resets IsFixed false; actual source regressions do not automatically reopen reports here.
- Activation or effect: List suppression is enforcing software selection; planner model receives a reduced list over subsequent requests. Planner prompt gives unfixed reports advisory priority for project work.
- Evidence limits: No observed repair, regression test, behavioral activation or proof of complete erasure across all read paths.
SRC-1 source/tools/Bugs.go, source/agents/planner.yaml.
bug_report.IsFixed = true tool.contents[internal_path][symbol] = bug_report ---
source/tools/Bugs.goIf there are unfixed bug reports listed in the "bugs" tool, those should be prioritized over the implementation of additional features. ---
source/agents/planner.yaml
EPI-RTE-changelog-records
Label: Changelog recording
No supplied counterpart. Caller event label/path/symbol/description → createEntry → exact tuple duplicate check → dated append → JSON write. Code owns progression. Candidate is an imported account of a change; deduplication compares metadata and description, not evidence of the event. Caller may be model or direct client; no human veto or expected-answer oracle. Open project logging. Guidance requests logging file changes; what persists is the event description, not proof or rationale. Remove is another creation wrapper, not withdrawal or deletion of a prior record.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Created/already-exists notice or error.
- Later read-back: Changelog tool exposes retained entries via List/Search; detailed selectors are uninspected in this report.
- Delegated visibility: Planner prompt requests changelog.List; shared JSON is not confined to the writer's conversation.
- Selection predicate: Path checks and exact Type/File/Symbol/Description equality for duplicate detection.
- Invalidation or expiry: No expiration or semantic contradiction handling in createEntry; subsequent Remove creates another event.
- Activation or effect: Retains caller event assertion for advisory interpretation in later work reports; no demonstrated behavior change.
- Evidence limits: No check that a reported fix/removal/change occurred; read-helper/UI details not independently established here.
SRC-1 source/tools/Changelog.go, source/tools/writeChangelog.go.
func (tool *Changelog) Remove(path string, symbol string, description string) (string, error) { return tool.createEntry("Remove", path, symbol, description) } ---
source/tools/Changelog.go
EPI-RTE-website-fetch
Label: Website import
No supplied counterpart. Caller URL/format → HTTP response → bounded body → requested HTML/text/Markdown → tool string → generic Session context. Websites owns request and conversion; source website supplies content. No evaluator assesses page truth. Format/URL/HTTP handling checks request suitability, not propositions. Caller chooses source; no content-specific human veto or answer oracle. Open retrieval mode. Returned URL/status provide some transport lineage; no independent source endorsement is carried.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: URL/status header plus converted body, or request/format/read error.
- Later read-back: Generic Session tool messages can be backed up and restored; no separate page repository is written by Fetch.
- Delegated visibility: Result goes to invoking agent; parent sees it only through shared reporting/transcript routes, not automatic page delivery.
- Selection predicate: Caller URL, user agent and accepted format; defaults to Markdown; 16 MiB body cap.
- Invalidation or expiry: Later fetch can see another page; existing returned snapshot is not revalidated or withdrawn.
- Activation or effect: Imported content is advisory model context; transport status does not gate factual reliance.
- Evidence limits: HTTP errors can still yield response bodies; parser internals uninspected, no extraction-completeness or page-truth guarantee.
SRC-1 source/tools/Websites.go, source/tools/getWebsiteText.go, source/tools/getWebsiteMarkdown.go.
fmt.Sprintf("websites.Fetch: URL \"%s\" (%s) contents", url.String(), response.Status), strings.TrimSpace(content), ---
source/tools/Websites.go
EPI-RTE-human-answers
Label: Human answer delivery
Distinct from the supplied generic RT-RTE-client-tools: this record covers question/answer content and its downstream admission. Ask/Choose records a question and waits; Humans.Answer matches question text, stores a supplied string and releases the waiter; Humans.Await returns the nonempty answer or an error. Model ToolCall.GetName returns a qualified name, terminal Command.Name preserves one, and the web handler forwards GetName. Session.GetTool resolves these names, but the special branch requires name == "humans". Normal qualified humans.Answer therefore reaches generic tool-message handling, as do released humans.Ask/humans.Choose returns. These messages preserve the supplied call ID/name, not the defective branch's attempted retroactive matching.
Only a bare-name embedding call with name humans and method Answer reaches that branch. After tool execution it locks the Session mutex and indexes Messages at len(Messages), unconditionally out of bounds. It panics before append/unlock, leaving the mutex locked; a released Ask/Choose may then be blocked at its generic append. This is a conditional implementation deduction, not an executed failure or a classification of shipped qualified callers.
Symbolic question/options/Multiple organize interaction; natural-language question/answer can supply facts or approval. Storage substrate: Humans.contents, waiting state and qualified Session tool messages. Browser AnswerQuestion launches qualified humans.Answer asynchronously after local nonempty validation. Its Session.CallTool refuses when Waiting, otherwise sends the qualified name to the web handler; AnswerQuestion's true return does not await that result. Human authorship is intended, not authenticated. HasMethod admits Answer without explicit Answer membership when Humans is installed.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Qualified Session calls append generic formatted Answer or Ask/Choose answer/error messages and return success/error according to generic content handling. Web returns GetLastMessage on success, not a call-specific message lookup. Browser AnswerQuestion returns local validation success; its asynchronous CallTool separately returns false on Waiting or request failure, or response.OK.
- Later read-back: Humans.contents retains answers in-process. Qualified Session messages can reach later inference and planner backup/restore under the supplied recovery route; direct Answer does not itself trigger backup or inference. Successful persistence and cross-session live-question recovery are not established.
- Delegated visibility: Delivered answers are advisory context for the invoking model; a parent may use them in later contractor task prompts, but automatic propagation to other agents is not implemented here.
- Selection predicate: Exact question match; Await accepts nonempty stored text without truth or option-membership validation. Installed Humans admits Answer specially. Qualified names select generic admission; only bare-name humans selects the defective custom branch.
- Invalidation or expiry: Pending wait times out; matching answers can be replaced. Existing transcript snapshots are not automatically withdrawn. Bare-name Answer panic leaves the Session mutex locked, without deferred unlock in that branch.
- Activation or effect: Matching Answer stores text and releases a waiter; qualified Ask/Choose completion appends a result and permits ReceiveChatResponse to continue inference. Qualified Answer independently appends its generic result but does not itself start inference. Model interpretation has advisory force, not epistemic certification. Concurrent append order is not guaranteed.
- Evidence limits: No observed successful submission, continuation, acceptance or benefit. Browser Waiting may block submission; concurrent web GetLastMessage may return another call's last message. Bare-name failure is source-supported but not reached by inspected shipped qualified parsers. No authenticated respondent, reference answer or evidence-based approval is established.
Open clarification/plan-confirmation mode; caller proposes question and respondent supplies content. Code checks question existence, not epistemic fitness. Planner doctrine requests human confirmation, but file writes remain ungated by a confirmation state. SRC-1 source/tools/Humans.go, source/engine/Session.go, source/ui/web/routes/session/CallTool.go, app/engine/Session.go, app/controllers/Chat.go, source/agents/planner.yaml; compare RT-RTE-file-admission, not a duplicate of it.
result, err0 := tool.Call(method, arguments) ---
source/engine/Session.goif name == "humans" && method == "Answer" { ---
source/engine/Session.gosession.mutex.Lock()
for m := len(session.Agent.Messages); m >= 0; m-- {
message := session.Agent.Messages[m] ---
source/engine/Session.go
Qualified dispatch and generic admission are supported by these passages:
return tool + "." + method, nil ---
source/schemas/ToolCall.gocommand.Name = strings.TrimSpace(name) command.Method = strings.TrimSpace(command.Name[strings.LastIndex(command.Name, ".")+1:]) ---
source/types/Command.goRole: "tool", Content: content, ToolCallID: id, ToolName: name, Created: schemas.NewDatetime(), ---
source/engine/Session.go:365-377return session.infer_chat_completions() ---
source/engine/Session.go:697-706if session.Waiting == true { return false } ---
app/engine/Session.go:38-42state.cancel() close(state.done) ---
source/tools/Humans.goerr6 := session.CallTool(tool_id, tool_name, tool_method, tool_arguments) ---
source/ui/web/routes/session/CallTool.gogo chat.Session.CallTool("humans.Answer", "Answer", map[string]any{ "question": question, "answer": answer, }) ---
app/controllers/Chat.go// NOTE: Special case, required for UI/UX integration if method == "Answer" { return true ---
source/tools/Humans.goother.Answer = answer ---
source/tools/Humans.go
EPI-RTE-inquire-projection
Label: Inquire transcript projection
Part of: RT-RTE-agent-inquire
Deterministic part before the model: selected child messages → role filtering → printable-ASCII single-line Content → labelled text. Code owns projection, not a critic model. Tool calls/arguments and system instructions are not represented by these Content-only branches. Domain: selected transcript representation, not factual validation. The caller selects an agent; code determines what reaches the summarizer. No human approval or reference-summary oracle is used.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Text passed to the separate summarizer process, not directly accepted as final knowledge.
- Later read-back: inapplicable — this projection alone writes no replacement record; the parent route can retain a returned model summary as a tool message.
- Delegated visibility: Summarizer sees projected user/assistant prose, not the complete child execution evidence; original child transcript remains separately reachable.
- Selection predicate: Supplied Inquire call uses user=true, assistant=true, tool=false; system always ignored.
- Invalidation or expiry: Projection is a snapshot; later child messages do not update it in place.
- Activation or effect: Enforcing omission before summarizer invocation; resulting summary can later become advisory caller context.
- Evidence limits: Semantic equivalence not checked; no observed output or default Inquire grant.
SRC-1 source/utils/chat/SummarizeMessages.go, source/utils/fmt/FormatSingleLine.go, source/utils/fmt/isPrintableASCII.go. Concrete deterministic trace, not execution: user Content check\nnow, tool Content test failed, assistant Content done with flags true,true,false yields User wrote: checknow, a blank separator, then Assistant wrote: done. The newline byte fails printable-ASCII and the tool branch is disabled. The model cannot recover the omitted failure from this projection alone. This demonstrates evidence loss, not a claim that every summary hallucinates.
content := strings.TrimSpace(utils_fmt.FormatSingleLine(message.Content)) result = append(result, fmt.Sprintf("User wrote: %s", content)) ---
source/utils/chat/SummarizeMessages.go} else if message.Role == "tool" && tool == true { ---
source/utils/chat/SummarizeMessages.goreturn chr >= 0x20 && chr <= 0x7E ---
source/utils/fmt/isPrintableASCII.go
Claims
EPI-CLM-correct-results
Label: Correct final result
Claimed operation: planner ensures correct, idiomatic code and passing tests; tester executes tests and reports bugs. Source is doctrine/design, not execution evidence. This is distinct from the capability/sandbox claim RT-CLM-role-separation, although both occur in role prompts. SRC-1 source/agents/planner.yaml, source/agents/tester.yaml.
- doctrine conclusion status: claimed
- operation conclusion status: uninspected
You ensure the final result is correct, with idiomatic code and passing unit tests ---
source/agents/planner.yamlALWAYS run "go test" with the "programs" tool ---
source/agents/tester.yaml
EPI-CLM-summary-fidelity
Label: Summary factual fidelity
Claimed operation: preserve facts/constraints/decisions and avoid adding missing information while compressing. Source is summarizer role doctrine/design, not an implemented preservation verifier. The closest supplied record RT-RTE-agent-inquire is an invocation route, not this design claim. SRC-1 source/agents/summarizer.yaml.
- doctrine conclusion status: claimed
- operation conclusion status: uninspected
ALWAYS preserve key facts, constraints, and decisions ---
source/agents/summarizer.yamlYou DO NOT invent missing information ---
source/agents/summarizer.yaml