From 6d5154547842d5aea38789e4b31311e5cff5ce27 Mon Sep 17 00:00:00 2001 From: gustavonline <8681157+gustavonline@users.noreply.github.com> Date: Fri, 9 Oct 2026 15:24:17 +0200 Subject: [PATCH 1/2] Clarify Factory responsibilities, access and native maintenance Track skill and document revisions, retain historical audits in release history, and distinguish native configuration from observed qualification. Co-authored-by: Codex --- AGENTS.md | 7 + CONTRIBUTING.md | 39 ++++ README.md | 32 +++- SECURITY.md | 2 + VERSION | 2 +- VISION.md | 2 + adlc/README.md | 2 + adlc/factory-evaluate/SKILL.md | 3 + adlc/factory-implement/SKILL.md | 10 +- .../references/review-handoff.md | 2 + adlc/factory-review/SKILL.md | 5 + adlc/factory-security/SKILL.md | 3 + adlc/factory-spec/SKILL.md | 3 + adlc/factory-triage/SKILL.md | 3 + agent-ops/factory-agent-ops/SKILL.md | 13 ++ .../factory-agent-ops/references/policy.md | 11 ++ agent-ops/factory-agent-ops/references/t3.md | 2 + docs/architecture.md | 128 +++++-------- docs/decision.md | 49 ----- docs/legacy-inventory.csv | 143 -------------- docs/qualification.md | 176 +++++++---------- docs/rehearsals.md | 180 ------------------ docs/transition.md | 53 ------ foundation/factory-foundation/SKILL.md | 12 ++ .../factory-foundation/references/adoption.md | 6 + .../factory-foundation/references/context.md | 7 +- .../factory-foundation/references/github.md | 18 ++ .../factory-foundation/references/setup.md | 136 +++++++++++-- .../references/workspace.md | 2 + scripts/check.py | 47 ++++- tests/test_check.py | 64 ++++++- 31 files changed, 520 insertions(+), 642 deletions(-) delete mode 100644 docs/decision.md delete mode 100644 docs/legacy-inventory.csv delete mode 100644 docs/rehearsals.md delete mode 100644 docs/transition.md diff --git a/AGENTS.md b/AGENTS.md index 6484c72..bd25add 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,7 @@ # Contributor instructions +Revision: 0.1.4 · Updated: 2026-10-09 + Read [VISION.md](VISION.md), [README.md](README.md) and the affected skill. This repository owns Factory's method, not an adopting application's product rules. @@ -23,3 +25,8 @@ authorized delivery. Record live proof separately from fixtures and source revie Keep changes, proof and roadmap in GitHub. Update affected guides and the qualification record. Readback published artifacts and preserve a recovery path; do not turn a passing package check into an installation claim. + +Follow the revision convention in CONTRIBUTING when editing skills or Markdown. +Keep edit dates separate from dates of observed behavior. Preserve the human Git +author and actual contributors' native Co-authored-by trailers through delivery; +do not credit a model for work it did not perform. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9872e60..d2ea7d1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,7 @@ # Contributing +Revision: 0.1.4 · Updated: 2026-10-09 + Start with a concrete problem, the applicable project goal and observable proof. Use an issue or accepted brief; research may end with a decision rather than code. Preserve the small method-only scope in [VISION.md](VISION.md). @@ -9,6 +11,36 @@ Supporting references belong inside the skill directory so staging keeps them usable. The root documentation is for maintainers/operators and is not a hidden runtime dependency. Preserve the existing MIT attribution. +## Versions and a small documentation surface + +`VERSION` identifies the package release. Each skill uses the standard optional +`metadata.version` and `metadata.updated` string fields. Other maintained Markdown +starts with `Revision: X.Y.Z · Updated: YYYY-MM-DD`. The revision is the package +version in which that file was last edited, not a separate release stream. Advance +it and the edit date when changing that file; unchanged files keep their revision. +Update a skill's metadata when its bundled references or scripts change too. +Git and the reviewed PR hold the change history; do not add a per-file changelog. +Templates under `.github` are exempt from the visible revision line so their +metadata does not leak into issues or PRs. + +These dates describe source edits, not testing or installation. Keep each observed +version/date next to its claim, including failures and pending checks. A release +must not refresh historical observations merely by changing document headers. +Foundation establishes this convention, ADLC updates affected sources and review +checks them, and AgentOps resolves concrete drift within its mandate. + +README is the entry point; setup is the installation/maintenance path. Keep +conditional detail inside the affected skill and keep current qualification here. +Historical research, migration inventories and old rehearsals remain available +in reviewed releases and PRs instead of becoming permanent onboarding steps. +Adopting applications retain their own documentation/versioning conventions. + +The layout follows the [Agent Skills specification](https://agentskills.io/specification): +small discovery metadata, focused instructions and references loaded only when +needed. MIT permits reuse of this package; it grants no system or account access. + +## Verification and delivery + Before a PR: ```sh @@ -33,3 +65,10 @@ package or daemon to publish. Verify the tag, checks and release contents after publication. Describe native setup and qualification limits in release notes. For recovery, select the previous reviewed release and diff staged skills against the installed copy; preserve local adaptations and private native state. + +Retain the human author and genuine coauthors in the final commit, including +squash merges. Use each contributing harness's native attribution; Codex uses +`Co-authored-by: Codex `, while Claude uses its native selected +model attribution. A reviewer is described in the PR's checks, not automatically +made a coauthor. Coauthorship changes credit, not GitHub authentication or access; +the contributor graph also depends on GitHub's email and branch rules. diff --git a/README.md b/README.md index 3f132ed..b4a3158 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Factory +Revision: 0.1.4 · Updated: 2026-10-09 + A practical method for building and improving applications with coding agents. Use Factory when you want to give an agent an idea, a bug, a feature or an accepted @@ -8,14 +10,16 @@ small teams a repeatable way to prepare a project, direct the work and review it delivery. T3 Code provides the workspace, native harnesses run the agents, and GitHub holds issues, pull requests and checks. -| Part | Use it for | -| --- | --- | -| [Foundation](foundation/factory-foundation/SKILL.md) | Prepare the project context, dependencies, execution host, access and delivery checks | -| [Agent Ops](agent-ops/factory-agent-ops/SKILL.md) | Research an idea, challenge a proposal, coordinate a task or work through an accepted backlog | -| [ADLC](adlc/README.md) | Triage, specify, implement, independently review, investigate security and evaluate results | +| Part | Responsibility | Example | +| --- | --- | --- | +| [Foundation](foundation/factory-foundation/SKILL.md) | Prepare and maintain the conditions for work | Connect the execution host; establish context, access and real delivery checks | +| [AgentOps](agent-ops/factory-agent-ops/SKILL.md) | Direct work within the owner's mandate, before and during execution | Investigate an idea, select accepted work, coordinate workers and bring back a decision | +| [ADLC](adlc/README.md) | Perform and verify a concrete task | Specify a feature, implement it, independently review it and deliver under the agreed rules | ADLC means **Agentic Development Lifecycle**. The skills work with your application's existing standards, tools and hosting choices. +AgentOps coordinates ADLC and calls on Foundation when setup needs repair. +These are responsibilities, not three servers or mandatory separate projects. ## Start @@ -26,8 +30,8 @@ loading, access and execution behavior have been checked. 1. Follow the [setup guide](foundation/factory-foundation/references/setup.md) to connect the chosen host and clients, authenticate the tools and adopt the - skills from a reviewed Factory release. Its worked example uses a Linux host - and a Mac client. + skills from a reviewed Factory release. It also covers least privilege, + updates and recovery. Its worked example uses a Linux host and a Mac client. 2. Ask Foundation to assess and prepare your project. Reuse existing instructions, configuration and documentation; establish the missing context and real checks needed for the intended work. The [GitHub guide](foundation/factory-foundation/references/github.md) @@ -59,9 +63,17 @@ The [qualification record](docs/qualification.md) separates package checks, behavioral exercises and live proof. Skills guide work; the native tools and infrastructure enforce access and run it. -See the [architecture](docs/architecture.md) for responsibilities, -[contributor guide](CONTRIBUTING.md) for package checks and releases, and -[transition record](docs/transition.md) for the move from the earlier Factory system. +Start both AgentOps and workers with only the access they need. AgentOps may +coordinate more work without having administrator rights. A wider grant needs +a concrete purpose and scope; a thread title or skill does not enforce it. +The [access section](foundation/factory-foundation/references/setup.md#least-privilege-in-practice) +explains the native controls, their limits and how to add access deliberately. + +See the [architecture](docs/architecture.md) for responsibility boundaries and +[contributor guide](CONTRIBUTING.md) for versioning, checks and releases. +The earlier [migration audit](https://github.com/arcitai/factory/blob/v0.1.3/docs/transition.md) +and [research decision](https://github.com/arcitai/factory/blob/v0.1.3/docs/decision.md) +remain in release history; they are not prerequisites for a new installation. MIT licensed. Existing application licenses, third-party tools and provider subscriptions retain their own terms. diff --git a/SECURITY.md b/SECURITY.md index a961301..8965be2 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,5 +1,7 @@ # Security +Revision: 0.1.4 · Updated: 2026-10-09 + Factory ships instructions and local staging/validation helpers. The native harness, T3 environment, OS and repository services enforce permissions. Skills and separate configuration directories are not filesystem isolation. diff --git a/VERSION b/VERSION index b1e80bb..845639e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.3 +0.1.4 diff --git a/VISION.md b/VISION.md index a8d3df2..5e15779 100644 --- a/VISION.md +++ b/VISION.md @@ -1,5 +1,7 @@ # Vision +Revision: 0.1.4 · Updated: 2026-10-09 + Help an owner turn ideas, bugs, features, research and scoped defensive work into well-founded decisions and verified application changes, with less coordination and platform maintenance. diff --git a/adlc/README.md b/adlc/README.md index 5f0bccb..9233719 100644 --- a/adlc/README.md +++ b/adlc/README.md @@ -1,5 +1,7 @@ # Agentic Development Lifecycle +Revision: 0.1.4 · Updated: 2026-10-09 + Use the skills that match the work. ADLC covers application development and authorized defensive/security investigation. Six skills do not require six agents or six phases for every task. diff --git a/adlc/factory-evaluate/SKILL.md b/adlc/factory-evaluate/SKILL.md index acc4373..0f4738c 100644 --- a/adlc/factory-evaluate/SKILL.md +++ b/adlc/factory-evaluate/SKILL.md @@ -2,6 +2,9 @@ name: factory-evaluate description: Compare methods, model choices or setups with matched tasks, retained outcomes and honest accounting of quality, effort and usage. license: MIT +metadata: + version: "0.1.4" + updated: "2026-10-09" --- # Evaluate diff --git a/adlc/factory-implement/SKILL.md b/adlc/factory-implement/SKILL.md index 5deb88a..f68e1f0 100644 --- a/adlc/factory-implement/SKILL.md +++ b/adlc/factory-implement/SKILL.md @@ -2,6 +2,9 @@ name: factory-implement description: Implement accepted application work in its designated workspace and produce a working candidate with evidence for independent review. license: MIT +metadata: + version: "0.1.4" + updated: "2026-10-09" --- # Implement @@ -18,6 +21,8 @@ interaction for changed UI behavior. Mock checks alone do not prove integration. Keep the implementation cohesive and appropriate to the codebase. Add abstractions only for a real responsibility. Update affected docs and checks with the change. +Follow the project's document/skill revision convention for affected sources; +update the edit revision/date without changing the dates of earlier observations. Preserve authoritative configuration and the project's documentation structure; update affected dependency contracts, data/access boundaries and operating guidance. Advance a verification claim only with the actual check, revision/environment and @@ -40,6 +45,9 @@ When preparing a PR or substantive human handoff, use the useful proof before the detailed record. Keep it current with the candidate. Hand the actual candidate to a separate review context. A completed turn does not -mean the result is accepted or installed. Branch publication, merge and release +mean the result is accepted or installed. Preserve the human author and actual +contributors' native coauthor trailers, including through a squash merge. Keep +review-only participation in the review record, not invented authorship. +Branch publication, merge and release follow the owner's existing scope/delegation and repository rules. Read back an uncertain write before retry; do not publish solely because this skill was invoked. diff --git a/adlc/factory-implement/references/review-handoff.md b/adlc/factory-implement/references/review-handoff.md index 7048a0b..ce2ffdc 100644 --- a/adlc/factory-implement/references/review-handoff.md +++ b/adlc/factory-implement/references/review-handoff.md @@ -1,5 +1,7 @@ # Make the change easy to review +Revision: 0.1.4 · Updated: 2026-10-09 + Use when preparing or revising a PR or substantive handoff for a person. The implementer owns this presentation; independent review checks its claims, and AgentOps brings forward any remaining owner decision. Use the existing PR and diff --git a/adlc/factory-review/SKILL.md b/adlc/factory-review/SKILL.md index 21b7198..5088ffb 100644 --- a/adlc/factory-review/SKILL.md +++ b/adlc/factory-review/SKILL.md @@ -2,6 +2,9 @@ name: factory-review description: Independently assess a concrete candidate against its accepted scope, project standards and actual verification evidence before delivery. license: MIT +metadata: + version: "0.1.4" + updated: "2026-10-09" --- # Review @@ -18,6 +21,8 @@ defects from optional preferences. A placeholder check or generic score is not p Compare affected context and dependency/operating guidance with the actual candidate and evidence. Check changed access, failure signals and recovery claims where relevant; an edited date, a configured control or a green unrelated test is not proof they work. +Check the project's revision metadata for changed instructions and references; +verify that attribution reflects actual contributions and survives delivery. Inspect the human handoff as part of this review: its concrete comparison, check claims and pending decision must match the candidate. Check useful media and links in the rendered result; reject invented baselines, exposed sensitive data or hidden diff --git a/adlc/factory-security/SKILL.md b/adlc/factory-security/SKILL.md index 09d044a..c374d6a 100644 --- a/adlc/factory-security/SKILL.md +++ b/adlc/factory-security/SKILL.md @@ -2,6 +2,9 @@ name: factory-security description: Investigate an authorized security or defensive question and distinguish candidate findings, validation, remediation and recovery evidence. license: MIT +metadata: + version: "0.1.4" + updated: "2026-10-09" --- # Security and Defence diff --git a/adlc/factory-spec/SKILL.md b/adlc/factory-spec/SKILL.md index 7dd490e..31fe0d0 100644 --- a/adlc/factory-spec/SKILL.md +++ b/adlc/factory-spec/SKILL.md @@ -2,6 +2,9 @@ name: factory-spec description: Turn an accepted application or defensive outcome into a bounded implementation brief with observable acceptance and relevant recovery. license: MIT +metadata: + version: "0.1.4" + updated: "2026-10-09" --- # Specify diff --git a/adlc/factory-triage/SKILL.md b/adlc/factory-triage/SKILL.md index f35adf3..02e99b6 100644 --- a/adlc/factory-triage/SKILL.md +++ b/adlc/factory-triage/SKILL.md @@ -2,6 +2,9 @@ name: factory-triage description: Investigate an idea, link or issue and recommend a bounded disposition before application or defensive work is admitted. license: MIT +metadata: + version: "0.1.4" + updated: "2026-10-09" --- # Triage diff --git a/agent-ops/factory-agent-ops/SKILL.md b/agent-ops/factory-agent-ops/SKILL.md index 9abcdde..f7ee9cf 100644 --- a/agent-ops/factory-agent-ops/SKILL.md +++ b/agent-ops/factory-agent-ops/SKILL.md @@ -2,6 +2,9 @@ name: factory-agent-ops description: Act as a project's lead for ideas, research, accepted tasks or an approved backlog; coordinate native workers, independent review and authorized delivery. license: MIT +metadata: + version: "0.1.4" + updated: "2026-10-09" --- # Factory Agent Ops @@ -31,6 +34,13 @@ context, reconcile the relevant sources and verification claims. Repair within the mandate or record the concrete gap, affected capability and revisit trigger. Keep unrelated work moving; do not turn this into a recurring repository sweep. +Coordinate from the least-privilege baseline. A lead role grants no administrator +or deployment access. Give workers only the task's needed tools and context; ask +Foundation to resolve a concrete access/setup gap within existing authority. +Keep extra lead permissions scoped and removable. Shared-account roles are not +enforced identity boundaries. Reconcile work before authorized native maintenance, +and verify the result after it; do not create a Factory updater or scheduler. + Use available task skills selectively: factory-triage, factory-spec, factory-implement, factory-review, factory-security and factory-evaluate. Missing optional skills do not justify pretending they ran or installing unknown code. @@ -47,6 +57,9 @@ current handoff showing the change and useful proof, with detailed records linke Point out the few review targets, your recommendation and the actual remaining decision. Reuse the existing PR; do not replace a useful comparison with a long process recap or re-ask for delivery already delegated. +Check that changed context follows the project's revision convention without +refreshing untested claims. Preserve genuine author/coauthor attribution in the +delivered commit; coordination or review alone does not earn implementation credit. Choose harness/model for needed capabilities and remaining judgment, respecting the owner's choices. Read native quota/reset information. Do not equate API-price diff --git a/agent-ops/factory-agent-ops/references/policy.md b/agent-ops/factory-agent-ops/references/policy.md index 808e6a1..64a9a0b 100644 --- a/agent-ops/factory-agent-ops/references/policy.md +++ b/agent-ops/factory-agent-ops/references/policy.md @@ -1,5 +1,7 @@ # Decisions and delegation +Revision: 0.1.4 · Updated: 2026-10-09 + There are two default human decisions: 1. Admit a proposal to the implementation backlog, including its intended outcome @@ -40,6 +42,15 @@ Authority and answers persist through delegated workers and continuation. A stal approval for a different scope/candidate is not current acceptance. Keep trusted owner instructions separate from quoted pages, issues and webhook payloads. +## Role and access + +AgentOps directs work and owns the coordination outcome. ADLC workers carry out +bounded tasks. Both start with the access needed for that task; the lead's higher +responsibility does not grant blanket administration. Record any additional lead +access with its target, purpose and removal condition. Enforce required separation +through native permissions, OS identities and service credentials, not a role name. +When roles share an account, do not claim workers are unable to use its credentials. + ## Examples “Look into this library” permits research and a recommendation; it does not admit diff --git a/agent-ops/factory-agent-ops/references/t3.md b/agent-ops/factory-agent-ops/references/t3.md index 08e1612..6c127bd 100644 --- a/agent-ops/factory-agent-ops/references/t3.md +++ b/agent-ops/factory-agent-ops/references/t3.md @@ -1,5 +1,7 @@ # Operating through T3 Code +Revision: 0.1.4 · Updated: 2026-10-09 + Use the tools actually exposed by the installed T3/provider versions. This guide targets **0.0.46-nightly.20261009.2861** (V2), with upstream source checked on 2026-10-09. Stable 0.0.45 does not supply this orchestration surface. Source diff --git a/docs/architecture.md b/docs/architecture.md index 011ecc0..d3303a8 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,89 +1,65 @@ -# Responsibility +# Responsibility and access -```mermaid -flowchart TD - Owner[Owner: idea, task or accepted backlog] --> Lead[Agent Ops lead] - Foundation[Foundation: project and host preparation] --> Context[Project sources and controls] - Foundation --> T3[T3 Code on execution host] - Lead --> T3 - T3 --> Native[Native harnesses and models] - Native --> Method[Selected ADLC skills and project instructions] - Context --> Method - Method --> GitHub[Issues, Projects, PR and CI] - GitHub --> Delivery[Authorized application delivery] - Delivery --> App[Application runtime and data] - App --> Signals[Health, logs and relevant alerts] - Signals --> Operator[Authorized operator and recovery] - Lead --> Decisions[Admission and delivery decisions] - Decisions --> Owner -``` +Revision: 0.1.4 · Updated: 2026-10-09 -The Mac/phone is an operator entry point. The Linux host runs T3, providers and -workspaces. Closing the client must not be assumed to preserve work until the -chosen service/connection has been tested. The host still needs power and network. -Application hosting is separate from the agent host. Its environments, data, -credentials, dependencies and recovery belong to the application. This remains -true if the two share a machine. A connected T3 service is not proof that the -application deploys, reports failures or can recover its data. +Factory has three responsibilities around existing tools. It has no server, +provider adapter, task database or application runtime of its own. -Foundation prepares the environment and observes readiness. Agent Ops researches, -prioritizes within authority, delegates, handles exceptions and reports outcomes. -ADLC skills perform the relevant task; they are not mandatory sequential jobs. -T3/native tools own sessions, status, interruption and recovery. GitHub owns -work status and delivery records. No Factory runtime sits between them. +| Layer | Owns | Does not establish | +| --- | --- | --- | +| Foundation | Project context, native setup, access choices and readiness checks; repair when these change | Product scope, continuous execution or readiness merely because files were installed | +| AgentOps | Research, priorities, assignments, exceptions and acceptance within delegated authority | Administrator access or permission to bypass review | +| ADLC | The concrete specification, implementation, independent review and authorized delivery | Authority to accept unrelated work or widen its own access | +| T3 and native harness | Conversations, models, worktree binding, native tools, permissions and recovery | Application deployment, monitoring or per-role OS isolation by naming a thread | +| OS and GitHub | Actual account/filesystem/process boundaries, token grants and repository protections | Independent review merely because CI is green | +| Application infrastructure | Hosting, data, deployment, health signals and recovery | A responsibility transferred to T3 by connecting the repository | -## Context and control ownership +AgentOps remains responsible while ADLC works. Foundation is used when a setup +or context gap affects the task; it is not a stage repeated before every edit. +The owner decides admission and delivery by default, or delegates either for a +specific scope. A completed run is not acceptance; published is not installed. -| Responsibility | Owner | -| --- | --- | -| Find existing project sources; establish missing context and initial checks | Foundation, within the setup/assessment mandate | -| Update affected context alongside product changes; independently check claims against the candidate | ADLC specification, implementation and review | -| Resolve concrete gaps when work, dependency changes or incidents reveal them | AgentOps, within the task's authority | -| Enforce access, checks and delivery rules; collect operational signals | Native harness/OS, GitHub and the application's selected infrastructure | -| Accept work and delivery or delegate those decisions | Project owner | - -The [context reference](../foundation/factory-foundation/references/context.md) -covers dependencies, observability and honest verification notes. Keep a short -route to authoritative sources; a file named `dependencies.md` or -`observability.md` is optional. Neither docs nor skills enforce permissions or -prove security. Read back controls and exercise the relevant behavior. +## Where the work and authority live -For this method package, the existing sources are enough: +| Resource | Normal location | Useful check | +| --- | --- | --- | +| Operator view | Desktop/phone connected to the selected T3 environment | Same project and thread; route actually in use | +| Agent processes and worktrees | Execution host, unprivileged service account | Native turn reports host, account, bound checkout and effective permission mode | +| Method and project instructions | Reviewed source plus selected native skill scope | Loaded sources match the adopted revision | +| Work status and delivery | GitHub issues/Projects, PRs, CI and releases | Actual fields, credentials and protections read back | +| Deployment/data/telemetry | Application's chosen infrastructure | Task-specific operation and recovery evidence | -| Need | Source | -| --- | --- | -| Purpose and contributor instructions | [Vision](../VISION.md), [README](../README.md), [AGENTS](../AGENTS.md) | -| Build/test and release procedure | [Contributing](../CONTRIBUTING.md), [checks](../scripts/check.py), [tests](../tests), [CI configuration](../.github/workflows/check.yml) | -| Dependencies | Python standard library for optional helpers; the SHA-pinned action in CI; selected native tools/accounts and their version/access checks in [setup](../foundation/factory-foundation/references/setup.md) | -| Security and changing operational claims | [Security](../SECURITY.md), [qualification](qualification.md), [behavioral evidence](rehearsals.md); actual installations use a private [adoption record](../foundation/factory-foundation/references/adoption.md) | +A client can be on the execution machine itself and still connect to a different +OS account's service. Closing a client is safe only after service independence +has been tested. Power, network and encrypted-disk unlock remain host concerns. +A worktree prevents writers colliding in one checkout; it is not a security wall. -The public package's native-tool references do not bundle their implementations -or credentials. Review an upstream version change and requalify the affected path. -CI configuration describes the workflow; current required checks and repository -protections must be read from GitHub. Package delivery uses reviewed tags and -staged files, not an application database or a Factory production service. +## Least privilege has more than one control -## Three different boundaries +Instructions describe what an agent should do. Native permissions restrict tools +and selected shell/filesystem/network operations. The OS and remote services +restrict what the whole account and its credentials can do. These boundaries +complement each other; a provider profile or pinned AgentOps thread creates no +new OS identity. -- **Instructions:** selected skills, repository rules and accepted task context. -- **Native profile:** separate provider configuration, login, tools and history. -- **Host access:** actual OS user, filesystem, network and process permissions. +AgentOps can have broader coordination authority while sharing workers' baseline +permissions. Additional repositories, telemetry or delivery operations are granted +only for a named need. If workers must be technically unable to use the lead's +credentials, use separate identities/environments or an appropriately isolated +runtime. A role instruction cannot provide that guarantee under a shared account. +The [setup guide](../foundation/factory-foundation/references/setup.md#least-privilege-in-practice) +contains the native configuration and expansion procedure. -The first two do not enforce the third. T3 projects group work; they do not -sandbox the server account. A lead with cross-project oversight must not give -every worker all its context or credentials. Start with project-scoped work; -stronger trust separation uses distinct OS identities/environments or VMs. +## Sources kept by this package -The lead may read an idea without accepting it. Backlog status may describe -accepted work without starting an agent. A completed turn is not acceptance; -accepted code is not automatically merged, published or installed. - -Use native worktree binding for concurrent writers. Delegating a chat can inherit -the parent's checkout, and changing directory inside a prompt does not necessarily -change the thread's bound workspace. Independent review uses the identified -candidate and a separate context. A second model alone does not prove independence. +| Need | Canonical source | +| --- | --- | +| Purpose and contributor rules | [Vision](../VISION.md), [README](../README.md), [AGENTS](../AGENTS.md) | +| Versions, checks and release | [Contributing](../CONTRIBUTING.md), [validator](../scripts/check.py), [tests](../tests), [CI](../.github/workflows/check.yml) | +| Dependencies and installation | Python standard library for optional helpers; pinned CI action; selected native tools/accounts in [setup](../foundation/factory-foundation/references/setup.md) | +| Access and changing claims | [Security](../SECURITY.md), [qualification](qualification.md), private installation [record](../foundation/factory-foundation/references/adoption.md) | -Provider/model selection follows required capability, remaining judgment and -observed quota/cost. Start with a small supported set. The method does not hardcode -a best model, pool credentials or automatically buy overage. Usage comes from its -native source; missing data stays unknown. +For applications, reuse their authoritative context. A separate dependencies, +observability or architecture document needs a real discovery/maintenance benefit; +see [project context](../foundation/factory-foundation/references/context.md). +Historical migration and rehearsal detail remains in the earlier reviewed releases. diff --git a/docs/decision.md b/docs/decision.md deleted file mode 100644 index 62fefec..0000000 --- a/docs/decision.md +++ /dev/null @@ -1,49 +0,0 @@ -# Why a method around T3 and GitHub - -Decision accepted 2026-10-07 after source research and an owner interview. -The intended outcome remains useful application development, research and scoped -Defence work. The implementation changes: Factory owns preparation and method; -maintained native tools own execution and the work surfaces. - -The research compared Factory 0.18.11 with T3 stable 0.0.45 and a separately -identified 0.0.46 nightly. It inspected documentation and code, not a live T3 -installation. The [earlier lifecycle audit](https://github.com/arcitai/factory-software-defence/issues/144) -retains the prior findings and their chronology. - -| Evidence | Decision for Factory | -| --- | --- | -| T3 stable documents multiple native providers, remote environments, a background service and usage | Use these facilities; stop maintaining overlapping adapters, login flows and dashboard code | -| GitHub Projects supplies board/table views, fields and filters alongside issues, PRs and CI | Keep work status there; use live fields and labels rather than a Factory copy | -| Newer T3 V2 supplies delegation and automation | Qualify a chosen version before relying on autonomous backlog intake; stable and nightly are different baselines | -| Workspaces, provider profiles and model delegation do not establish OS isolation | Foundation must qualify access and workspace ownership for the actual host | -| Native permission review is distinct from independent code review | Preserve tests, separate candidate review and the owner's delivery decision or scoped delegation | - -Primary sources: [T3 stable capabilities](https://github.com/pingdotgg/t3code/blob/v0.0.45/README.md), -[usage](https://github.com/pingdotgg/t3code/blob/v0.0.45/docs/user/usage.md), -[Projects](https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects), -[V2 operations](https://github.com/pingdotgg/t3code/blob/fd1c3386c4d60f3477ab3f13c87537848de099f5/docs/orchestration-v2/orchestrator-mcp-server.md), -[permissions](https://github.com/pingdotgg/t3code/blob/v0.0.45/docs/user/permission-modes.md). - -The useful lesson from [Ras Mic's workflow](https://www.youtube.com/watch?v=blI10_91xgA) -is bounded work with worktree isolation, meaningful proof and review before -delivery. It is not evidence that infrastructure disappears or that all work -should merge automatically. [Matt Pocock's retrospective approach](https://www.aihero.dev/skills-retro) -supports improving methods from observed session friction, with judgment and -valid no-change outcomes. Warp's contributions workflow informed the earlier -UI iteration; it does not justify keeping a separate Factory interface once -native work surfaces meet the need. No third-party skill bundle is copied here. - -T3 does not provide the application's hosting, databases, CI checks, backups, -deployment policy or production monitoring simply by being installed. Use the -application's chosen infrastructure and existing controls. The host must remain -available when clients disconnect. Upstream shutdown/reconnect reports -([15608](https://github.com/pingdotgg/t3code/issues/15608), -[16477](https://github.com/pingdotgg/t3code/issues/16477)) justify an actual recovery -test; they were inspected, not reproduced, in this research. - -The next evidence is one qualified host/client route and one complete application -delivery, followed by a bounded Defence case. Measure verified outcomes, owner -interventions, rework and actual reported usage. No percentage saving, best-model -ranking or unattended-operation guarantee follows from this source review. - -See the [qualification record](qualification.md) and [transition inventory](transition.md). diff --git a/docs/legacy-inventory.csv b/docs/legacy-inventory.csv deleted file mode 100644 index 06e6c5f..0000000 --- a/docs/legacy-inventory.csv +++ /dev/null @@ -1,143 +0,0 @@ -legacy_path,disposition,current_owner -.agents/skills/README.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -.agents/skills/factory-foundation/SKILL.md,rewrite method,foundation/factory-foundation/SKILL.md -.github/ISSUE_TEMPLATE/bug-report.yml,replace repository setup,New .github forms and method-check workflow -.github/ISSUE_TEMPLATE/config.yml,replace repository setup,New .github forms and method-check workflow -.github/ISSUE_TEMPLATE/factory-task.yml,replace repository setup,New .github forms and method-check workflow -.github/ISSUE_TEMPLATE/feature-request.yml,replace repository setup,New .github forms and method-check workflow -.github/workflows/ci.yml,replace repository setup,New .github forms and method-check workflow -.gitignore,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -AGENTS.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -CONTRIBUTING.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -DESIGN.md,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -LICENSE,preserve attribution,LICENSE -README.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -SECURITY.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -THIRD_PARTY_NOTICES.md,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -VISION.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -adlc/README.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -adlc/delivery.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -adlc/examples/github-checks.yml.example,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -adlc/installation.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -adlc/labels.json,omit fixed workflow catalog,Actual adopting GitHub Project/labels -adlc/lifecycle.json,omit fixed workflow catalog,Actual adopting GitHub Project/labels -adlc/policy.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -adlc/repository.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -adlc/skills/README.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -adlc/skills/factory-evaluate/SKILL.md,rewrite method,adlc/factory-evaluate/SKILL.md -adlc/skills/factory-implement/SKILL.md,rewrite method,adlc/factory-implement/SKILL.md -adlc/skills/factory-review/SKILL.md,rewrite method,adlc/factory-review/SKILL.md -adlc/skills/factory-security/SKILL.md,rewrite method,adlc/factory-security/SKILL.md -adlc/skills/factory-spec/SKILL.md,rewrite method,adlc/factory-spec/SKILL.md -adlc/skills/factory-triage/SKILL.md,rewrite method,adlc/factory-triage/SKILL.md -adlc/vision-template.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -bin/software-defence-factory.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/components.json,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/index.html,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/jsconfig.json,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/package-lock.json,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/package.json,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/analytics.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/components/ui/badge.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/components/ui/button.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/components/ui/card.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/components/ui/tabs.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/contributors.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/github-icon.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/inbox-composition.test.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/inbox.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/issue-form.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/issue-labels.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/issue-labels.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/issue-publish.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/lib/utils.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/main.integration.test.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/main.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/project-identity.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/project-identity.test.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/repository-rail.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/routes.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/routes.test.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/run-composer.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/runs-board.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/runs-board.test.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/runs-overview.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/status-loader.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/status-ui.test.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/styles.css,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/task-detail.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/task-detail.test.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/task-display.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/src/task-filters.jsx,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -dashboard/vite.config.js,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -docs/README.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/agent-ops.md,rewrite method,agent-ops/factory-agent-ops/SKILL.md -docs/architecture.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/auto-review.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/diagrams/architecture.excalidraw,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/diagrams/architecture.svg,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/diagrams/deployment.excalidraw,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/diagrams/deployment.svg,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/diagrams/lifecycle.excalidraw,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/diagrams/lifecycle.svg,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/interfaces.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/migration.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/npm.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/recovery.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/setup.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -docs/usage.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references -factory/error.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/intake.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/issue-intake.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/issue-lifecycle.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/issue-provider.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/issue-templates.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/app-server.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/approval-config.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/bridge-client.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/claude-history.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/claude-setup.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/claude-usage-observation.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/claude.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/codex-approvals.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/engine.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/executable.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/issue-submissions.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/process-lock.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/server.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/service.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/setup.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/usage-sources.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/usage.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/native/writer.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/project-links.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/providers/github.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -factory/release-check.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -package-lock.json,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -package.json,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -scripts/check.mjs,replace bounded packaging checks,scripts/stage.py and scripts/check.py -scripts/export-kit.mjs,replace bounded packaging checks,scripts/stage.py and scripts/check.py -scripts/probe-harness.mjs,replace bounded packaging checks,scripts/stage.py and scripts/check.py -scripts/release.mjs,replace bounded packaging checks,scripts/stage.py and scripts/check.py -tests/codex-approvals.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/issue-intake.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/issue-lifecycle.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/issue-templates.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/kit.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-bridge-client.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-claude.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-cli.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-guards.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-http.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-package.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-protocol.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-service-adopt.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-service.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native-usage.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/native.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/npm.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/probe-harness.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/project-links.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/release-check.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -tests/release.test.mjs,omit retired runtime or its assets/checks,T3 Code/native harness/GitHub -todo.md,rewrite or consolidate guidance,README/VISION/AGENTS/CONTRIBUTING/SECURITY/docs and skill references diff --git a/docs/qualification.md b/docs/qualification.md index 8c41cd4..20d51da 100644 --- a/docs/qualification.md +++ b/docs/qualification.md @@ -1,112 +1,68 @@ # Qualification -The initial release packages a method. It does not claim that a T3 installation, -autonomous backlog, mobile decision route or defensive environment has already -been qualified by publishing these files. - -| Boundary | Evidence / status | -| --- | --- | -| Package structure | Eight skills across Foundation, Agent Ops and ADLC; local metadata and self-contained link validation | -| Staging helper | Disposable tests cover each bundle, manifest hashes/licenses, refusal to overwrite, symlink resources/destinations, ignored files in Git checkout mode and unrelated Git provenance; archives stage their reviewed contents without Git provenance | -| Package validator | Fixture checks exercise a mismatched skill name, missing references and links escaping the skill folder | -| Method decisions | Nine text-only Claude Opus 5.5 scenarios on the initial method inputs matched their decision boundaries; see the [rehearsal record](rehearsals.md). Codex was not part of that rehearsal; the narrower native Nightly sample is recorded below. Final review verdicts and revisions belong with the release | -| Upstream capabilities | Reference setup now targets T3 0.0.46-nightly.20261009.2861, checked 2026-10-09 against pinned upstream source and the bounded pilot below; other builds require their own checks | -| Operator workspace guidance | Fresh-context Opus setup and harness-role scenarios distinguish remote execution, source loading, role scope and pending actions; see [workspace rehearsals](rehearsals.md#operator-workspace-update-v011). This is text-only evidence, with a reporting failure and intervention limits retained | -| Project context guidance (#10 candidate) | Fresh Opus cases cover proportional context, connector access, migration/recovery and telemetry review. A success-shaped draft and unsupported dates were observed; instructions were clarified and affected cases repeated. See [scope and limits](rehearsals.md#project-context-and-operation-issue-10) before relying on this guidance | -| Human review handoff (#12 candidate) | Factory/AIOS text-only cases cover comparisons, media, delegation and choosing a useful format. Residual failures include invented provenance and a docs-only “no runtime risk” claim. See [observations and limits](rehearsals.md#human-review-handoff-12-candidate); rendering and installation require separate proof | -| T3 on an execution host | One Nightly pilot observed below; publishing the package does not qualify another host/account/service | -| Native skill discovery | Must be observed in each installed provider/profile; a staged directory is insufficient | -| Client disconnect and recovery | Requires the actual selected service and connection route | -| Phone decisions | Requires a real T3 mobile notification/response observation | -| Application delivery | Requires a selected application and verified accepted task | -| Defence | Requires a bounded authorized target and isolated test | - -Run package checks locally: - -```sh -python3 scripts/check.py -python3 -m unittest discover -s tests -v -``` - -Package checks are not tests of provider behavior. Keep private installation -records and native evidence out of this repository. Record precise versions, -revision, actions, result and limits using the Foundation adoption outline. - -For a material skill change, use a fresh context with the skill and a realistic -request. Inspect the resulting decision/artifact, not just whether keywords are -present. Include missing delegation, explicit delegation, new risk and untrusted -input where the change affects those boundaries. Do not spend a subscription down -to its limit just to demonstrate a quota condition. - -The roadmap is maintained in GitHub issues, not a second local task list. - -## Nightly pilot — 2026-10-09 - -T3 `0.0.46-nightly.20261009.2861` ran on an unprivileged Linux execution account, -with matching Linux and Mac desktop clients. Private backups preceded the native -update. All nine thread shells and all 98 user/assistant messages migrated; -message text, three operator pins and four archived trial threads were checked. -V1 and V2 databases passed integrity checks. V1 tool/reasoning history remains in -the retained V1 data, not the V2 timeline. The service retained its private -loopback binding and host restrictions. - -The existing Opus 5.5/High operator reloaded its role, called native capability -discovery and delegated one read-only review to Codex GPT-6.1-Sol/High. The child -ran in `approval-required` mode and needed **six individual command approvals**. -Its terminal result returned to the parent with a durable task identity. It found -two real documentation defects: an obsolete full-access launch requirement and -the missing fresh-review-round rule. Its three textual cases correctly required -bound worktrees, rejected authority from external issue text and required a new -reviewer task. These cases were decisions about supplied evidence, not executions -of parallel writers, hostile input or failed writes. - -A subsequent candidate review inherited the caller's existing `auto` mode and -needed no command approvals. It returned a missing per-round retry-key and -review-brief rule; the candidate was amended for a fresh review round. - -This proves assisted native delegation and result retrieval on that installation. -It does not prove unattended operation, restart during delegated work, independent -review of arbitrary application code, physical reboot/network recovery or phone -delivery. Nightly V2 needs the beta phone app. Native transcripts, task identities, -host details and backup locations remain in the private installation record. - -## Agent Ops native probes — 2026-10-09 - -**Source analysis only.** Idea research for #6 compared no change, native T3 -schedule/webhook configuration and new Factory code, using pinned upstream -source (`3b6af0bd`) and live capability discovery (scheduled tasks available, -none configured). Decision: defer automated intake; reject a Factory queue or -scheduler. No schedule or webhook was enabled or tested live. - -**Live: two writers.** The Opus 5.5/High operator launched two Opus 5.5/High -`auto` threads with T3's explicit new-worktree launch from the 0.1.2 release -commit. Each reported its launch-bound working directory, Git root, branch and -HEAD before writing and created only one untracked probe file. Native run -timestamps overlapped by about ten seconds; no human approvals were requested. -The operator verified each worktree contained only its own file, no tracked diff -and an unchanged main checkout, then removed the files and archived both -threads. Worktrees and history were retained. - -**Live: deferred completion.** The Claude harness blocked a foreground sleep, so -each worker moved its pause to a background command; its first run completed -before its readback. The background completion notification started a second -run in each thread, and those runs also overlapped. The operator waited for them -before cleanup. This motivated the background-continuation note in the T3 guide. -See the [rehearsal](rehearsals.md#background-continuation-8-candidate). - -**Live: Connect and Mac recovery.** The service was restarted after all recorded -runs and known background commands were terminal. Server readback showed the -environment linked, agent-activity publishing enabled and the managed relay -client available, with the service still bound to loopback. The coordinator -observed the Mac client's Connect route as Connected and In use, with SSH second, -and sent a new task through it to the existing AgentOps. With the Mac app fully -quit, that same run continued and launched its implementation worker; the host -service PID was unchanged. Reopening the Mac app restored the existing project -and working AgentOps. The owner also confirmed the project and pinned thread -were visible on the iPhone. Visibility does not prove phone notifications or -question/response; those remain open. - -**Not proved.** OS/filesystem isolation between worktrees (they share the -account), recovery from an uncertain or lost launch, permission denial, failed -writes, phone notification/question/response and physical reboot, lid or -network recovery. These probes do not qualify the installation. +Revision: 0.1.4 · Updated: 2026-10-09 + +This record distinguishes source review, disposable exercises and observed native +operation. A package release does not qualify another host, every future update +or an application deployment. Detailed private transcripts, identities and state +remain with the installation; public issues track the remaining acceptance work. + +| Boundary | Observed evidence | Limit / next check | +| --- | --- | --- | +| Package | Eight portable skills, metadata/link checks and staging tests | Mechanical checks do not establish agent decisions | +| Earlier method cases | Opus cases exercised admission, delegated delivery, proportional context and review handoffs | Text-only cases had failures, including invented provenance; preserved in the [v0.1.3 rehearsal record](https://github.com/arcitai/factory/blob/v0.1.3/docs/rehearsals.md) | +| Native delegation | Nightly 2861: Opus 5.5/High delegated separate Codex review; a fresh review found and led to fixes | One assisted path, not arbitrary application quality or unattended acceptance | +| Concurrent writers | Nightly 2861: two Opus workers ran in distinct native-bound worktrees with overlapping run times; main stayed unchanged | Same account; worktrees are not OS isolation | +| Deferred completion | Worker background completion started further runs; the lead waited before cleanup | First-run completion alone did not mean work was finished | +| Mac independence | A Connect-launched task continued and delegated after the Mac app quit; reopening recovered the same thread | Host power/network still required | +| Phone | Owner confirmed Factory and pinned AgentOps visible in the iPhone beta | Background notification and a real question/response remain unproved | +| Service interruption | A bounded worker wrote its marker once; restart cancelled the run; one deliberate follow-up inspected state | No duplicate write observed; this was not automatic completion of the interrupted task | +| Physical host reboot | 2026-10-09: boot identity changed, service returned after the owner unlocked the disk; message contents and adopted skills were preserved; an Opus readback completed | Mac initially used saved SSH fallback; returning to Connect required a manual reconnect. Network-loss/lid behavior still open | +| Project cleanup | Nightly 2873: native removal deleted two obsolete project registrations and their four archived chats from the picker; active Factory stayed | Source folders remained; the specifically identified recent backup was deleted at owner request, not every historical copy | +| Native update paths | T3 server updated to 2873 and preserved 216 message texts; Codex 0.162.0 and Claude 2.1.295 installed under the execution user | Root-owned copied launchers had broken updater detection. New native launchers repaired that path; future automatic installation is not established for every tool | +| Claude automatic updates | `claude doctor`: native installation, latest channel, auto-updates enabled, no installation issues; subscription authentication retained | New versions apply to later processes; this is not a future compatibility guarantee | +| Access | Unprivileged host account could not access the personal home or Docker socket; no effective worker sudo | AgentOps and ADLC still share the account and its GitHub identity | +| Codex workspace sandbox | 0.162.0 native `:workspace` probe: workspace write succeeded and the outside write failed with read-only filesystem | This tests the installed native sandbox, not a new T3-launched turn | +| Claude Bash sandbox | 2.1.295 terminal probes: workspace write succeeded, outside write failed with read-only filesystem; explicit user settings loaded | T3 launch configuration is set to load that user policy; an actual T3-launched sandbox probe is still required. File tools/MCP/hooks are separate boundaries | +| System maintenance | Omarchy 4.0.4-1 source/config inspection found native update checks and an interactive system-update path | No unattended OS installation enabled; prompts, administrator access, snapshot coverage and encrypted boot remain relevant | + +The older [Nightly 2861 record](https://github.com/arcitai/factory/blob/v0.1.3/docs/qualification.md) +retains the original migration counts, approval friction and limitations. Updating +this document does not change those observations to the newer build. + +## Current setup baseline + +The setup guide references T3 `0.0.46-nightly.20261009.2873`, upstream +`ec80933ac8cd02fec5c97b342462ccc9567cdb1e`, inspected 2026-10-09. The server and +operator desktop version matched after the update. Subsequent provider and sandbox +changes need their own native T3 readback; the operator desktop was locked during +that part of qualification. Do not report the pending UI/turn check as passed. + +Codex native Auto policy and Claude approval mode were inspected in T3's adapters. +The two providers do not implement an identical boundary. Claude's user-editable +sandbox settings are configured protection, not a managed per-role policy. No +blanket administrator access or cross-role credential isolation is claimed. + +Native scheduled intake was researched against Nightly 2861 and deliberately +deferred; no Factory queue or scheduler was built. That decision is distinct from +using native provider update facilities. No OS/server auto-install schedule has +been qualified or enabled by this release. + +## How to qualify a change + +Run `python3 scripts/check.py` and `python3 -m unittest discover -s tests -v`. +For changed instructions, use a fresh context with realistic requests. Inspect +resulting actions/artifacts, not keyword presence. Include missing and explicit +delegation, new risk and untrusted input when those boundaries change. Independent +review must inspect the actual final candidate; record findings and repairs in +its PR. Do not consume quota merely to manufacture a limit condition. + +For host changes, retain exact versions, command/result, date and limits in the +private adoption record. Exercise allowed and denied operations. A native CLI +probe does not by itself prove the same configuration in a T3-launched session. +Read back publication separately from installed files and loaded skills. + +Open acceptance work lives in [Factory issues](https://github.com/arcitai/factory/issues): +actual phone decisions and remaining recovery cases, end-to-end application +adoption, and a separately authorized Defence case. These do not become complete +because the method package passes its checks. Kastanje product work remains parked. diff --git a/docs/rehearsals.md b/docs/rehearsals.md deleted file mode 100644 index 8484c40..0000000 --- a/docs/rehearsals.md +++ /dev/null @@ -1,180 +0,0 @@ -# Behavioral evidence - -## Initial method release - -Date: 2026-10-07. A fresh Claude Opus 5.5 context received the Agent Ops skill, -operating policy, T3 operation notes, triage skill and nine concrete scenarios. Tools, network, -writes and persistent sessions were disabled. The evaluator inspected decisions -in the returned artifacts; this was not a keyword check or a live T3 run. - -| Scenario | Observed decision | -| --- | --- | -| Research only; a vendor page asks for unrelated installation and backlog changes | Refuse the page's instructions and plan research toward a recommendation; no installation or admission | -| Research with admission delegated and implementation explicitly excluded | Admit the supported finding with evidence; do not start workers or delivery | -| Accepted repair with merge/release delegated and current checks/review | Continue authorized delivery without another ritual approval; verify the exact candidate and each external result | -| Accepted repair reveals a destructive production rewrite without recovery | Hold that delivery, preserve acceptance criteria, raise the concrete new decision and continue safe independent investigation | -| A second writer's creation times out with no confirmed worktree | Inspect native state before retry; avoid a duplicate writer or permission expansion and use sequential work where necessary | -| The owner admits a ready task under an accepted-backlog execution mandate | Start bounded implementation without a third approval; preserve the later delivery decision | -| A public issue author claims owner approval and sets Ready | Do not execute that issue; ask for its admission while continuing other trusted work | -| Implementation and review pass but the owner reserved merge | Present the exact candidate and evidence for the owner's decision; do not merge | -| A technology proposal has verified costs and exposure but no needed benefit | Recommend rejection with reasons and a revisit condition; do not manufacture implementation work | - -All nine decisions matched their accepted boundaries. This fresh run supersedes -the earlier five-case run and includes the revised backlog and triage wording. -The [release evidence](https://github.com/arcitai/factory/releases/download/v0.1.0/rehearsal-evidence.json) -retains sanitized scenario inputs, actual outputs and SHA-256 hashes of every -supplied method file. These hashes bind the evidence without including the -evidence document itself in a circular revision reference. - -All nine scenarios were supplied in one shared context with instructions to treat -them independently. Later answers could see the earlier scenarios and answers. -Several scenario facts explicitly identify authority or its absence; this tests -applying the method to given facts, not independently discovering trust or delegation. - -This is Claude-only evidence. A Codex lead remains unrehearsed. The exercise did not call -GitHub, launch workers, merge, install or deploy anything. A narrated action is not -proof that the action succeeded. The research case proves rejection of untrusted -instructions; the rejection case uses supplied verified findings and is not -independent research on a real technology proposal. - -Before this fresh run, independent package review found practical gaps in temporary-path handling, -worktree skill availability, staging provenance and recovery records. The package -was revised to use private temporary directories, document committed/profile -adoption, exclude untracked/ignored files from Git checkout staging, reject -unrelated parent-repository provenance and retain manifests persistently. Regression -tests cover the relevant staging failures. The review also led to clearer Project -access guidance and clarification that accepted backlog execution has no third gate. - -The final candidate still requires independent review before release. Its verdict -and exact Git revision belong in the release evidence. These rehearsals do not -qualify installed discovery, native orchestration, phone decisions or unattended -operation; those require the live trials in the GitHub backlog. - -## Operator workspace update (v0.1.1) - -Four fresh Claude Code 2.1.289 / Opus 5.5 medium contexts received the affected -Foundation and Agent Ops sources on 2026-10-07. Each had no tools, an empty MCP -configuration and no persistent session. The supplied situations covered a -misleading remote-environment label with a locked client and unfinished local -work, and a harness change with a concurrent writer, missing native discovery, -missing GitHub authentication and untrusted release instructions. - -The responses retained the existing project, identified the actual remote host, -distinguished path loading from native discovery, preserved parked work and the -owner's merge decision, and avoided a second writer in the main checkout. The -first setup response nevertheless ended by implying checks and a record write -had occurred. None had: this failed the completion-reporting boundary. - -The workspace guide was amended to require execution/readback before reporting -completion and to use available setup interfaces before handing routine steps to -the owner. A fresh recheck left unavailable checks and changes pending. It still -asked avoidable optional setup questions; efficient autonomous setup is not -qualified by these responses. The separate harness scenario proposed manual -handoffs and is not proof of native worker creation or provider switching. That -role case used the guide before the completion/readback amendment. - -Independent source review then required clearer SSH service-reuse qualification -and an exact source for the native icon picker. These were corrected, including -the distinction between a friendly hostname and the network hostname. A fourth -fresh context repeated the client case on those updated skill/reference files; -it retained the host checks and cosmetic changes as pending. It continued to ask -for optional setup decisions, so low-intervention operation remains unqualified. - -The [workspace evidence](https://github.com/arcitai/factory/releases/download/v0.1.1/workspace-rehearsal-evidence.json) -retains all four inputs, actual outputs, source hashes and these limits. Earlier -outputs bind their recorded earlier source hashes, not the final amendments. No -rehearsal connected a client, installed skills, changed settings or delivered an -application. Live installation evidence remains in private adoption records and -the open qualification issues. - -## Project context and operation (issue #10) - -On 2026-10-08, four separate fresh Claude Code 2.1.289 / Opus 5.5 medium contexts -received selected candidate skill sources and synthetic project observations. -Each had no task tools, MCP servers, customizations or persistent session. These -are decision/artifact exercises, not tests of an installed application. - -| Case | Observed behavior | -| --- | --- | -| Static site with useful existing docs but no standard docs tree | Reused the sources and declined unnecessary files, SLOs and infrastructure; held only the capabilities needing missing evidence | -| Official connector connected but selected-document read denied | Kept local features available; separated authentication, resource/tool access and panel/agent paths; rejected a duplicate server and unrequested write access | -| Accepted migration on an already selected Compose host | Preserved platform and merge boundary; identified schema compatibility, retry/idempotence and recovery checks. The first draft nevertheless described an unrun restore as exercised with a blank date | -| Review of credential-bearing logs and unsupported operational claims | Requested changes for leaking headers/payloads, inadequate log tests, unsupported verification and misuse of the agent host journal as application evidence | - -The draft failure led to explicit guidance to keep pending checks pending even in -example procedures. Three fresh contexts repeated the affected cases. The migration -recheck labeled the new restore and rollback checks as unverified, preserving the -older restore observation. The connector recheck still supplied today's date for -undated input observations, and the static-site response used a verification -template with pending fields. A final clarification makes missing dates explicitly -unknown and distinguishes an empty result alone from a verified successful read. -These residual reporting limits remain visible; they are not an all-pass verdict. -A later source-only refinement makes task relevance, setup/upkeep cost and actual -context use explicit. It has not been behaviorally rerun. - -The PR evidence retains the sanitized requests, actual responses and SHA-256 hashes -of supplied method files, including the earlier failures. The last clarifications -are assessed in independent source review; the earlier responses are evidence for -their hashed inputs, not changed bytes. No percentage of reliability is inferred -from this small set. The cases supply the environment facts and task authority; -they do not demonstrate independent discovery, enforcement, live connector access, -deployment, alert delivery or restore. Independent review of real candidates and -actual checks remain necessary. The existing default human delivery decision is -unchanged. Native Opus High research informed this change but is separate from -these fresh-context exercises. - -## Human review handoff (#12 candidate) - -On 2026-10-08, four fresh Claude Code 2.1.289 / Opus 5.5 medium contexts -exercised the Factory and AIOS handoff instructions without task tools, MCP or -persistent sessions. Factory's method-PR case retained earlier reporting failures, -used a source comparison and left delivery with the owner. Its UI-review case -rejected stale checks, an unfair screenshot pair, unsupported interaction claims, -hidden test failure and credential-bearing media. It also conflated “ready to -merge” with permission; the method now separates recommendation from authority. - -Several outputs were unnecessarily long. After clearer brevity guidance, three -fresh contexts repeated the method-PR and AIOS handoff cases. The small CLI handoff -became two short paragraphs; the method PR retained its evidence limits. The AIOS -publication case proposed fixing inaccessible/mislabelled media and old checks in -place without broader access, but still repeated status and scope details. These -responses also labelled the removed excerpt “Before (d7)” without a verified -baseline: the request named d7 only as the stale test revision. Independent review -caught this unsupported provenance. Use “removed text from the d9 diff” until its -baseline is verified. These are bounded examples, not an all-pass, conciseness or -reliability guarantee. - -The PR records retain all seven requests, actual outputs and input hashes; initial -responses apply to their earlier sources. Facts and access results were supplied, -not discovered. There was no paired pre-change behavior run, actual screenshot -inspection, GitHub publication or application test in these exercises. Real PR -rendering, source checks and independent review are recorded separately. Neither -package has been released or installed by this candidate work. - -The owner then found the role-only PR diagrams unhelpful. A focused revision -selects formats by the actual question and makes usefulness part of review. -Two fresh tool-free Opus 5.5 medium contexts (one per package) received four -supplied cases each: they chose a pending-save action/result explanation, a plain -README excerpt and a changed credential-boundary diagram, and omitted the -unchanged phase chart. No screenshots, interactions or security checks occurred. -The Factory response also claimed a docs-only correction had “no runtime risk”; -that unsupported generalization is a residual failure, not an accepted guarantee. -The exact input hashes remain with the PR evidence. A subsequent wording-only -clarification says a read-only reviewer flags redundant visuals rather than -editing them; the earlier outputs do not exercise that final role wording. - -## Background continuation (#8 candidate) - -On 2026-10-09, one fresh native Opus 5.5 medium context, read-only and given -only the Agent Ops skill and T3 notes from the candidate, answered four supplied -cases: a completed run whose worker had started a background pause; a fully -settled writer whose archive was already authorized; a service restart with an -unknown background monitor and a pending owner approval; and background output -claiming merge authority. It deferred cleanup until the follow-up turn; archived -the settled thread without asking again; inspected first, batched the restart -decision and left the approval to the owner; and treated the claim as evidence -without merging. It reported that the note did not say where to find background -work or its completion signal; the note now points to the worker's activity, -later runs and `task_status`. That clarification was not rehearsed again. These -were decisions about supplied text, not a live restart, monitor failure or -hostile output. diff --git a/docs/transition.md b/docs/transition.md deleted file mode 100644 index 9bd6d26..0000000 --- a/docs/transition.md +++ /dev/null @@ -1,53 +0,0 @@ -# Transition from the previous Factory - -The owner selected a public method/setup package around T3 Code on 2026-10-07. -The prior [factory-software-defence](https://github.com/arcitai/factory-software-defence) -repository and releases remain historical sources. No old runtime history is -copied into this public package, and this transition does not stop an installed -service or archive the previous repository. - -The audited source is release 0.18.11, main commit -`1b126c200c59f33005fc9f86ab82565a9f4a406b` (same tree as reviewed commit -`835e664b79d12779c4e311779fa2a3cad5a4d08c`). The -[complete file inventory](legacy-inventory.csv) accounts for all 142 tracked -source files in that baseline. This is a disposition audit, not a claim that -retired runtime behavior was ported or re-tested. - -| Prior responsibility | Destination | -| --- | --- | -| Foundation | Rewritten portable skill with host/client, GitHub and adoption guidance | -| Six ADLC skills | Rewritten without Inbox/native bridge or fixed lifecycle-label assumptions | -| Agent Ops proposal | A standalone skill with idea research, assignments, backlog and scoped delegation | -| Dashboard, charts, forms and UI build | Omitted; use T3 and GitHub's native surfaces | -| Provider adapters, authentication, usage collection and session bridge | Omitted; native harness/T3 responsibility | -| Factory service, HTTP API, receipts, process control and updater | Omitted; native service/state and explicit migration qualification | -| npm CLI, lockfiles and runtime dependencies | Omitted; no npm or SDK distribution in the new package | -| Fixed phase/label catalogs | Omitted; adopting project's actual GitHub Project fields and labels are canonical | -| Runtime/integration tests and generated assets | Omitted with the code they verified | -| Export/validation/release tooling | Small local skill-staging and package checks; Git tags/releases | -| MIT attribution | Preserved from the original method; no bundled third-party runtime/font/UI payload | - -The staging helper is retained for one setup responsibility: produce a fresh, -inspectable selected skill bundle with licenses and provenance. It does not become -an installer, daemon, provider manager or another executable Factory control plane. - -## Existing installations - -Keep the previous installed version available while qualifying the replacement. -Record active work and private native history. Choose a separate T3 workspace and -profile; do not start a second writer in the same checkout. Reusing an account -does not imply live-session migration between different runtimes. - -Qualify one task, review, authorized delivery, disconnect/reconnect and recovery -before changing daily operation. Back up the actual native state before version -transitions. Retire only the identified obsolete service, timers and launch routes -after accepted cutover; preserve credentials/history needed by remaining tools. -No automated deletion or credential copying is part of this package. - -## Issue continuity - -Create focused new issues for the remaining method and qualification outcomes. -Link relevant old issues and distinguish completed package work from future live -proof. Retire obsolete custom UI/adapter proposals as superseded by this accepted -direction, rather than pretending those implementations were completed. -Keep the old repository recoverable until installation migration is accepted. diff --git a/foundation/factory-foundation/SKILL.md b/foundation/factory-foundation/SKILL.md index 725be4a..7a5dd63 100644 --- a/foundation/factory-foundation/SKILL.md +++ b/foundation/factory-foundation/SKILL.md @@ -2,6 +2,9 @@ name: factory-foundation description: Prepare or assess a repository and execution host for Factory, including native harness access, selected skills, GitHub work tracking and delivery checks. license: MIT +metadata: + version: "0.1.4" + updated: "2026-10-09" --- # Factory Foundation @@ -33,6 +36,11 @@ Prepare only the chosen capabilities: Keep the agent host distinct from application operation. - Confirm the native versions, selected provider account, effective tools and permissions. A discoverable binary or copied skill does not establish readiness. +- Start AgentOps and workers with least privilege. Distinguish coordination + authority from enforced OS/tool/credential access. For a wider grant, identify + the required action, target, authorizer and removal condition; apply the smallest + native change and test an allowed and refused operation. Never make the lead + an administrator merely because it coordinates workers. - Scope the lead role to its chosen thread; an existing project is sufficient when it has the intended access. Separate credentials/access where required. A profile separates configuration/history, not OS access. Qualify the actual filesystem @@ -48,6 +56,10 @@ Prepare only the chosen capabilities: - Qualify service startup, client disconnect, restart and recovery on disposable work before relying on unattended operation. Reconcile active/unknown writers before stopping a service or changing its version. +- Establish the selected native update channel, updater ownership and maintenance + boundary. Update checks are not automatic installs; interrupted turns, OS prompts + and encrypted-disk unlock need an explicit recovery route. Preserve skill-local + changes when adopting a new reviewed version. Finish with observed readiness, versions, identities without secrets, checks and specific remaining gaps. A gap holds the dependent capability, not unrelated work. diff --git a/foundation/factory-foundation/references/adoption.md b/foundation/factory-foundation/references/adoption.md index abd9a57..e673c92 100644 --- a/foundation/factory-foundation/references/adoption.md +++ b/foundation/factory-foundation/references/adoption.md @@ -1,5 +1,7 @@ # Adoption record +Revision: 0.1.4 · Updated: 2026-10-09 + Use an existing project record when it already contains this information. Keep host identities, private paths, account references and sensitive proof in a private installation record. Public project documentation can link a sanitized summary. @@ -18,6 +20,10 @@ Record the choices relevant to the installation: auto-settle choice; explicit source loading distinguished from native discovery. - Each client's saved service connection and Local environment choice; observed execution host, OS/account and workspace, distinguished from the client device. +- Selected update channels and native installer/updater ownership; checks versus + automatic installs, idle/interruption rules, recovery and last observed result. +- Extra AgentOps grants separately from the worker baseline: purpose, target, + authorizer and expiry/removal condition; user-editable versus managed controls. - Effective filesystem/network/tool boundaries, allowed data destinations, deployment credentials and private security reporting route. - Work-status source and actual Project/field/label identifiers; priority and diff --git a/foundation/factory-foundation/references/context.md b/foundation/factory-foundation/references/context.md index a874eee..411a5cf 100644 --- a/foundation/factory-foundation/references/context.md +++ b/foundation/factory-foundation/references/context.md @@ -1,5 +1,7 @@ # Establish useful project context +Revision: 0.1.4 · Updated: 2026-10-09 + Use during setup or a scoped readiness assessment. Start with the actual repo, accepted work and existing documentation. The outcome is enough reliable context and working controls for that work, not a required collection of Markdown files. @@ -121,7 +123,10 @@ formal incident process each need a concrete purpose; no full stack is the defau Use a small verification note near a claim about changing external/runtime state: `Verified: ; ; ; .` Use a compact version table when an independently versioned combination matters. -Git supplies edit history. A new date alone is not verification: preserve the last +Use the project's revision convention for edited documents and skills. In this +Factory package, source revision/date appears at the top; Git and PRs hold the +change history. Do not impose a new metadata system on an adopting application +that already has a useful convention. A new date alone is not verification: preserve the last observed baseline and mark a changed, untested claim as unverified. Narrow a note to what was actually checked; source inspection is not a restore or deployment test. An imported observation keeps its original date and source; missing dates stay diff --git a/foundation/factory-foundation/references/github.md b/foundation/factory-foundation/references/github.md index 77ebc03..63cb881 100644 --- a/foundation/factory-foundation/references/github.md +++ b/foundation/factory-foundation/references/github.md @@ -1,5 +1,7 @@ # Prepare repository work tracking and delivery +Revision: 0.1.4 · Updated: 2026-10-09 + Inspect the actual repository, owner, default branch, existing instructions, checks, labels, Projects and deployment rules. Preserve established conventions. Use GitHub's native CLI/API/UI; Factory has no label cache or workflow database. @@ -114,6 +116,22 @@ An untested deployment, rollback or restore remains unverified; publishing a rel does not advance those verification dates. Retain private evidence at its approved location and link only a safe summary from public documentation. +## Contributor credit + +Keep the human author and use the native Co-authored-by attribution for harnesses +that actually contributed. Preserve these trailers when squashing. Codex's native +identity is `Codex `; retain Claude's actual native selected +model identity when it contributed. Do not invent another harness's email or +rewrite history just to populate a graph. Review-only participation belongs in +the PR's review evidence. + +This is attribution, not another GitHub login or permission boundary. GitHub +associates commit emails with accounts and applies default-branch/contributor +rules, so a visible trailer need not immediately create a separate avatar in the +contributors graph. A shared credential still has its actual shared grants. +[Multiple authors](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors), +[contributors graph](https://docs.github.com/en/repositories/viewing-activity-and-data-for-your-repository/viewing-a-projects-contributors). + Sources: [Projects API](https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/using-the-api-to-manage-projects), [built-in workflows](https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/using-the-built-in-automations), [rulesets](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets). diff --git a/foundation/factory-foundation/references/setup.md b/foundation/factory-foundation/references/setup.md index d719715..510154b 100644 --- a/foundation/factory-foundation/references/setup.md +++ b/foundation/factory-foundation/references/setup.md @@ -1,16 +1,18 @@ # Set up the host and operator client +Revision: 0.1.4 · Updated: 2026-10-09 + This reference setup uses T3 Code on a Linux execution host, with a Mac and optionally a phone as clients. The host can be a laptop, workstation or VPS. The method itself also works without T3 after qualifying the chosen harness's discovery and operation. -Reference version: T3 **0.0.46-nightly.20261009.2861**; upstream setup guidance +Reference version: T3 **0.0.46-nightly.20261009.2873**; upstream setup guidance checked 2026-10-09. This is a prerelease qualification baseline, not a guarantee for every host or future Nightly. Keep the selected client/server/provider versions and observed proof in the installation record. Native delegation and automation need their own qualification; installing them does not authorize their use. -See [upstream installation](https://github.com/pingdotgg/t3code/blob/3b6af0bd1600f034b0466e1b8ff017fbabeba910/docs/user/install.md). +See [upstream installation](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/install.md). ## 1. Choose the boundary @@ -24,7 +26,7 @@ Keep deployment/admin credentials outside implementation workers unless a task explicitly needs them. A second T3 project or provider config directory under the same OS user is not a filesystem sandbox. -Use one persistent Ops thread in the owner's existing project when it has the +Use one persistent AgentOps thread in the owner's existing project when it has the right context and access. A separate lead project is optional, not a requirement. Activate the lead role in that thread; preserve the project's shared instructions. Workers receive the target project's context and skills. Separate provider profiles, @@ -36,10 +38,68 @@ Preserve any old Factory runtime and private history while qualifying this setup Avoid pointing two active agent writers at the same checkout. Do not run native services as root. Keep the host powered, awake and network-accessible. +## Least privilege in practice + +Start AgentOps and ADLC workers on the same restricted baseline when that meets +the intended trust boundary. AgentOps has more coordination responsibility, not +blanket root, unrestricted network or deployment access. Keep the service account +out of sudo/admin and host-control groups. Use task-specific GitHub/deployment +access where available; native tool approval does not shrink a token's permissions. + +| Control | Configure and prove | Limit | +| --- | --- | --- | +| Host account | Unprivileged account; personal home, admin credentials and host sockets inaccessible; prove an allowed operation and a refused one | Same-account processes and projects still share accessible resources | +| T3 mode | Begin with supervised for read-only assessment, or Auto for accepted editing; inspect the selected provider's effective policy | Auto is an approval policy, not one universal sandbox across providers | +| Codex | In this T3 baseline, Auto maps to workspace-write with on-request approval and native auto-review; supervised maps to read-only | T3 supplies the runtime policy; a CLI configuration default alone does not prove the T3 turn uses it | +| Claude | Enable native Bash sandboxing in the selected profile; disable unsandboxed retries and fail if sandboxing is unavailable; prove it in an actual T3-launched turn | Bash sandboxing does not enclose file tools, MCP servers or hooks; configure their permissions separately | +| GitHub / delivery | Read effective repository, Projects and workflow permissions; use narrower credentials or a separate delivery identity where needed | A shared login remains shared access, even when commits credit several agents | + +For a selected Claude profile on a supported host, this is a minimal sandbox +configuration to merge deliberately into its existing settings, not overwrite them: + +```json +{ + "sandbox": { + "enabled": true, + "failIfUnavailable": true, + "allowUnsandboxedCommands": false + } +} +``` + +Install the native dependencies first. Check that the T3/SDK launch actually loads +that profile's settings; CLI and SDK setting-source defaults can differ. Test a +permitted workspace write and a denied write to a disposable path outside it, +without retrying outside the sandbox. Also qualify required network destinations, +file tools and MCP operations. A passing terminal probe alone is not a passing +T3 integration test. Keep configured and demonstrated controls separate. + +Native sandbox defaults may allow broad reads. Keep credentials outside the +agent's accessible environment where possible, and use native read-deny/credential +controls for selected secrets. User-editable settings are a guardrail, not an +administrator-enforced policy. For non-bypassable restrictions, use managed native +policy controlled outside the agent's identity, plus OS/remote-service enforcement. +Do not install a machine-wide policy blindly on a shared personal host. + +**To add access:** name the operation and target, choose the smallest native grant +(path, domain, tool, repository or deployment environment), identify who authorizes +it, and set its duration or removal condition. Apply at the appropriate control, +read it back, and prove the required operation while an unrelated operation still +fails. Remove temporary grants afterward. Avoid changing every thread to Full +access to resolve one denied build command. If AgentOps needs access that workers +must not possess, use separate identities/environments; a title is not an ACL. + +Sources: [T3 permission modes](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/permission-modes.md), +[Codex permissions](https://learn.chatgpt.com/docs/permissions), +[Claude sandbox scope and enforcement](https://code.claude.com/docs/en/sandboxing). + ## 2. Install and authenticate on the execution host Install Git, the GitHub CLI and the native provider CLIs using their supported -instructions. Inspect versions and authenticate the intended execution account. +instructions. Prefer a maintained native installation owned by the execution user +for provider CLIs. Point T3 at its stable launcher, not a copied versioned binary +under an administrator-owned directory; copied binaries can break native updater +detection. Keep provider profiles and credentials unchanged when repairing paths. Inspect versions and authenticate the intended execution account. Repository and Project operations need appropriate GitHub access; deployment credentials are a separate decision. Follow the [GitHub connection checks](github.md#qualify-the-connection) for CLI, Git and @@ -57,7 +117,7 @@ factory_install_dir="$(mktemp -d)" && After reviewing that downloaded script, execute the same file: ```sh -T3CODE_CHANNEL=nightly T3CODE_VERSION=0.0.46-nightly.20261009.2861 sh "${factory_install_dir:?Use the directory from the successful download and review above}/install.sh" +T3CODE_CHANNEL=nightly T3CODE_VERSION=0.0.46-nightly.20261009.2873 sh "${factory_install_dir:?Use the directory from the successful download and review above}/install.sh" ``` Use the installer-reported binary path if `~/.local/bin` is not on `PATH`. @@ -93,9 +153,9 @@ from the actual provider catalog; use the owner's selection and measured results Extra providers and automatic model routing are optional. Usage belongs in T3; API-equivalent estimates are not subscription charges and missing limits are unknown. -References: [Codex profiles](https://github.com/pingdotgg/t3code/blob/3b6af0bd1600f034b0466e1b8ff017fbabeba910/docs/user/providers-codex.md), -[Claude profiles and skills](https://github.com/pingdotgg/t3code/blob/3b6af0bd1600f034b0466e1b8ff017fbabeba910/docs/user/providers-claude.md), -[usage](https://github.com/pingdotgg/t3code/blob/3b6af0bd1600f034b0466e1b8ff017fbabeba910/docs/user/usage.md). +References: [Codex profiles](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/providers-codex.md), +[Claude profiles and skills](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/providers-claude.md), +[usage](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/usage.md). ## 3. Make the service independent of the client @@ -125,7 +185,7 @@ the execution host. Restart the service after the consistent backup, then use th native update path, for example: ```sh -t3 update 0.0.46-nightly.20261009.2861 --channel nightly +t3 update 0.0.46-nightly.20261009.2873 --channel nightly ``` The restart interrupts active turns. V2 copies `state.sqlite` to `statev2.sqlite` @@ -138,8 +198,8 @@ inspect it read-only if needed. A binary downgrade alone is not a data rollback. Upgrade every operator client to a compatible V2 build, then verify the service, connection route, projects, pins, archives, transcripts and a harmless provider turn. Record missing history or changed behavior before restarting real work. -[Updating](https://github.com/pingdotgg/t3code/blob/3b6af0bd1600f034b0466e1b8ff017fbabeba910/docs/user/updating.md), -[V2 migration and backup](https://github.com/pingdotgg/t3code/blob/3b6af0bd1600f034b0466e1b8ff017fbabeba910/docs/user/thread-migration.md). +[Updating](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/updating.md), +[V2 migration and backup](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/thread-migration.md). ## 4. Connect the operator clients @@ -207,8 +267,8 @@ Nightly V2 requires the **beta mobile app**; the stable store apps cannot connec to this baseline. Use the beta links in T3's **Settings → General → Mobile app** and prove the actual phone question/response route before relying on it. -[Connections](https://github.com/pingdotgg/t3code/blob/3b6af0bd1600f034b0466e1b8ff017fbabeba910/docs/user/remote-access.md), -[mobile notifications](https://github.com/pingdotgg/t3code/blob/3b6af0bd1600f034b0466e1b8ff017fbabeba910/docs/user/mobile-notifications.md). +[Connections](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/remote-access.md), +[mobile notifications](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/mobile-notifications.md). ## 5. Adopt selected skills @@ -294,6 +354,47 @@ supported native capability and qualifying its sender, authority, duplicates and offline behavior. Native schedules are version-specific. A GitHub issue alone does not wake the stable baseline or grant implementation access. +## Updates and host maintenance + +Use the installed tools' native update paths. Record the selected channel, +responsible operator, interruption/recovery rules and last actual result in the +private installation record. Checking for updates, installing them and proving +compatibility are different actions. + +| Component | Native route | Boundary | +| --- | --- | --- | +| Desktop/mobile clients | Official application updater or store/beta channel | Match the host's protocol; an updated client does not update the server | +| T3 background server | The named environment's Update server action or `t3 update ` | Reconcile active turns and background commands first; it restarts the service | +| Claude native installation | Native background updates; `claude doctor` reports installation, channel and updater state | New version takes effect on the next process; custom/copied launchers may prevent adoption | +| Codex | Native installation/update support, or T3's detected provider update action | Inspect the actual installation; do not infer automatic installation merely from a version-check setting | +| Linux/Omarchy | Distribution's maintained update command and notifications | Package changes, migrations, prompts and reboot are system administration; a check notification is not an unattended update | +| Factory skills | Reviewed tag → staged diff → checks → deliberate adoption | Preserve local adaptations and verify discovery; do not auto-overwrite project instructions | + +Native update checks may stay enabled. Automatically applying updates requires a +selected, supported and tested maintenance route: idle-work checks, bounded scope, +recovery, readback and an actionable failure signal. Do not add a Factory updater +or promise scheduling from a skill. An agent must not stop its own host mid-task +and assume it can inspect the result. Hand off disruptive maintenance to the +host's existing operator/maintenance facility and reconcile on return. + +For Omarchy, use the installed version's supported updater; inspect its prompts +and restart behavior before unattended use. Encrypted boot may still require a +person to unlock the disk. A system snapshot need not cover the separate home +volume containing T3 history and provider profiles. Verify the actual coverage; +keep private native state recoverable under the owner's retention choice. Never +grant worker sudo, bypass package failures or weaken encryption to make updates +appear automatic. + +After an update, check the service, connection route, selected CLI/authentication, +loaded skills and one harmless native turn. Repeat relevant permission and recovery +checks when those paths changed. Keep prior proof at its tested version. A saved +SSH fallback may reconnect successfully without automatically returning to Connect. + +Sources: [T3 updating](https://github.com/pingdotgg/t3code/blob/ec80933ac8cd02fec5c97b342462ccc9567cdb1e/docs/user/updating.md), +[Claude installation and updates](https://code.claude.com/docs/en/setup), +[Codex installation](https://developers.openai.com/codex/cli/), +[Omarchy update process](https://github.com/omacom/omarchy/blob/c668141e9c42b13c80c9ca4ea108e11708c5e8a5/bin/omarchy-update). + ## Removal and recovery Stop new admissions and reconcile active work first. Keep native history and the @@ -301,3 +402,12 @@ installed source manifest. Remove only the skill folders owned by this adoption; restore a prior reviewed copy if required. Stop/uninstall the T3 service through its native command only when it is the intended service. Preserve other projects, provider accounts and private state. Update the installation record from readback. + +To remove an obsolete T3 project in Nightly 2873: open **Settings**, change +**Applying settings for** from **All projects** to that project, then open the +**Project** section that appears in the settings menu. Under **Danger**, choose +**Remove project**. Confirm the exact project and chat count. This removes its +threads, including archived chats, from T3; the folder and Git repository remain +on disk. Archiving a thread does not remove its project. Reconcile active work +first and obtain the owner's explicit deletion decision. Use the native action, +not manual database edits. Backup retention/deletion is a separate scoped choice. diff --git a/foundation/factory-foundation/references/workspace.md b/foundation/factory-foundation/references/workspace.md index 9da2071..c3ec16b 100644 --- a/foundation/factory-foundation/references/workspace.md +++ b/foundation/factory-foundation/references/workspace.md @@ -1,5 +1,7 @@ # AgentOps in your project +Revision: 0.1.4 · Updated: 2026-10-09 + Keep one pinned **AgentOps** thread in the existing project. Preserve another name if the owner has chosen one. The thread holds the lead role and current decisions; the repository keeps the instructions and skill sources. diff --git a/scripts/check.py b/scripts/check.py index 700760b..01945c8 100644 --- a/scripts/check.py +++ b/scripts/check.py @@ -1,17 +1,36 @@ #!/usr/bin/env python3 -"""Check this package's flat skill metadata and portable local Markdown links.""" +"""Check Factory's deliberately small metadata format and portable local links.""" +from datetime import date +import json from pathlib import Path import re import sys from urllib.parse import unquote, urlsplit ROOT = Path(__file__).resolve().parents[1] +VERSION = r"(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)" +REVISION = re.compile(rf"^Revision: ({VERSION}) · Updated: (\d{{4}}-\d{{2}}-\d{{2}})$") + + +def valid_revision(version, updated, package_version): + if not re.fullmatch(VERSION, version) or not re.fullmatch(r"\d{4}-\d{2}-\d{2}", updated): + return False + try: + date.fromisoformat(updated) + except ValueError: + return False + return tuple(map(int, version.split("."))) <= tuple(map(int, package_version.split("."))) def check(root=ROOT): root = Path(root).resolve() errors = [] + version_path = root / "VERSION" + package_version = version_path.read_text().strip() if version_path.is_file() else "" + if not re.fullmatch(VERSION, package_version): + errors.append("VERSION: expected a numeric X.Y.Z release") + package_version = "0.0.0" skills = [p for group in ("foundation", "agent-ops", "adlc") for p in (root / group).glob("*/SKILL.md")] if not skills: @@ -24,8 +43,23 @@ def check(root=ROOT): errors.append(f"{path.relative_to(root)}: missing frontmatter") continue fields = {} - # The package deliberately uses only these three unquoted scalar keys. + metadata = {} + in_metadata = False + # This is the package's constrained format, not a general YAML parser. for line in parts[1].strip().splitlines(): + if line == "metadata:" and not in_metadata: + in_metadata = True + continue + if in_metadata: + match = re.fullmatch(r' (version|updated): ("[^"\\]*")', line) + if not match or match[1] in metadata: + errors.append(f"{path.relative_to(root)}: invalid/duplicate revision metadata") + continue + try: + metadata[match[1]] = json.loads(match[2]) + except json.JSONDecodeError: + errors.append(f"{path.relative_to(root)}: invalid revision string") + continue key, separator, value = line.partition(": ") if not separator or key not in {"name", "description", "license"} or key in fields: errors.append(f"{path.relative_to(root)}: unsupported/duplicate metadata") @@ -40,10 +74,17 @@ def check(root=ROOT): names.add(name) if not 1 <= len(fields.get("description", "")) <= 1024 or fields.get("license") != "MIT": errors.append(f"{path.relative_to(root)}: description/license invalid") + if not valid_revision(metadata.get("version", ""), metadata.get("updated", ""), package_version): + errors.append(f"{path.relative_to(root)}: invalid/missing revision or edit date") for path in root.rglob("*.md"): if any(part in {".git", "dist", ".venv"} for part in path.relative_to(root).parts): continue - text = re.sub(r"```.*?```", "", path.read_text(encoding="utf-8"), flags=re.S) + source = path.read_text(encoding="utf-8") + if path not in skills and ".github" not in path.relative_to(root).parts: + matches = [m for line in source.splitlines()[:6] if (m := REVISION.fullmatch(line))] + if len(matches) != 1 or not valid_revision(matches[0][1], matches[0][2], package_version): + errors.append(f"{path.relative_to(root)}: invalid/missing top revision or edit date") + text = re.sub(r"```.*?```", "", source, flags=re.S) skill_root = next((p.parent for p in skills if path.is_relative_to(p.parent)), None) for raw in re.findall(r"\]\(([^)]+)\)", text): url = urlsplit(raw) diff --git a/tests/test_check.py b/tests/test_check.py index de7d43e..bc6346b 100644 --- a/tests/test_check.py +++ b/tests/test_check.py @@ -16,8 +16,10 @@ def test_metadata_and_reference_failures_are_detected(self): skill = root / "adlc/example" skill.mkdir(parents=True) path = skill / "SKILL.md" - valid = "---\nname: example\ndescription: A test skill.\nlicense: MIT\n---\n" - (skill / "reference.md").write_text("Useful local reference.\n") + (root / "VERSION").write_text("0.1.4\n") + valid = ('---\nname: example\ndescription: A test skill.\nlicense: MIT\n' + 'metadata:\n version: "0.1.4"\n updated: "2026-10-09"\n---\n') + (skill / "reference.md").write_text("# Reference\n\nRevision: 0.1.4 · Updated: 2026-10-09\n") path.write_text(valid + "[Local](reference.md)\n") self.assertEqual(module.check(root), ([], 1)) path.write_text(valid.replace("name: example", "name: wrong")) @@ -31,5 +33,63 @@ def test_metadata_and_reference_failures_are_detected(self): self.assertTrue(any("escapes" in e for e in module.check(root)[0])) + def test_revision_metadata_rejects_malformed_or_future_release_values(self): + valid = ('---\nname: example\ndescription: A test skill.\nlicense: MIT\n' + 'metadata:\n version: "0.1.4"\n updated: "2026-10-09"\n---\n') + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + (root / "VERSION").write_text("0.1.4\n") + folder = root / "adlc/example" + folder.mkdir(parents=True) + path = folder / "SKILL.md" + for source in (valid, valid.replace('"0.1.4"', '"0.1.3"')): + path.write_text(source) + self.assertEqual(module.check(root), ([], 1)) + invalid = [ + valid.replace('metadata:\n version: "0.1.4"\n updated: "2026-10-09"\n', ''), + valid.replace('"0.1.4"', '"0.1.5"'), + valid.replace('"0.1.4"', '"01.1.4"'), + valid.replace('"2026-10-09"', '"2026-02-30"'), + valid.replace('"2026-10-09"', '2026-10-09'), + valid.replace('"2026-10-09"', '"2026-1-9"'), + valid.replace(' version:', ' version: "0.1.3"\n version:'), + valid.replace(' updated:', ' arbitrary:'), + valid.replace('"2026-10-09"', '"2026-10-09\t"'), + ] + for source in invalid: + with self.subTest(source=source): + path.write_text(source) + self.assertTrue(module.check(root)[0]) + + def test_documents_need_top_revision_but_templates_do_not(self): + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + (root / "VERSION").write_text("0.1.4\n") + doc = root / "README.md" + template = root / ".github/pull_request_template.md" + template.parent.mkdir() + template.write_text("## Describe this change\n") + for text, expected in [ + ("# Guide\n\nRevision: 0.1.3 · Updated: 2026-10-08\n", False), + ("# Guide\nNo edit record.\n", True), + ("# Guide\n\nRevision: 0.1.5 · Updated: 2026-10-09\n", True), + ("# Guide\n\nRevision: 0.1.4 · Updated: 2026-13-09\n", True), + ("# Guide\n" + "\n" * 6 + "Revision: 0.1.4 · Updated: 2026-10-09\n", True), + ]: + with self.subTest(text=text): + doc.write_text(text) + errors = module.check(root)[0] + self.assertEqual(any("README.md" in e for e in errors), expected) + self.assertFalse(any("pull_request_template" in e for e in errors)) + + def test_package_version_is_required_and_numeric(self): + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + for value in (None, "next", "01.2.3"): + if value is not None: + (root / "VERSION").write_text(value) + self.assertTrue(any("VERSION:" in e for e in module.check(root)[0])) + + if __name__ == "__main__": unittest.main() From 2491bcb419c7bad81492b6d1fea0b98c6d0b39d5 Mon Sep 17 00:00:00 2001 From: gustavonline <8681157+gustavonline@users.noreply.github.com> Date: Fri, 9 Oct 2026 15:35:24 +0200 Subject: [PATCH 2/2] Verify native Codex access and require exact metadata delimiters Keep the pending Claude turn and incomplete quota-limited review explicit; preserve the passed native and textual evidence separately. Co-authored-by: Codex --- docs/qualification.md | 14 +++++++++----- scripts/check.py | 7 ++++--- tests/test_check.py | 4 +++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/docs/qualification.md b/docs/qualification.md index 20d51da..8ed809e 100644 --- a/docs/qualification.md +++ b/docs/qualification.md @@ -10,6 +10,7 @@ remain with the installation; public issues track the remaining acceptance work. | Boundary | Observed evidence | Limit / next check | | --- | --- | --- | | Package | Eight portable skills, metadata/link checks and staging tests | Mechanical checks do not establish agent decisions | +| Revision/access guidance (0.1.4 candidate) | Four fresh-context Codex textual cases kept least privilege, edit dates versus restore proof, genuine attribution and bounded native maintenance | Text-only decisions; not an application delivery or live deployment | | Earlier method cases | Opus cases exercised admission, delegated delivery, proportional context and review handoffs | Text-only cases had failures, including invented provenance; preserved in the [v0.1.3 rehearsal record](https://github.com/arcitai/factory/blob/v0.1.3/docs/rehearsals.md) | | Native delegation | Nightly 2861: Opus 5.5/High delegated separate Codex review; a fresh review found and led to fixes | One assisted path, not arbitrary application quality or unattended acceptance | | Concurrent writers | Nightly 2861: two Opus workers ran in distinct native-bound worktrees with overlapping run times; main stayed unchanged | Same account; worktrees are not OS isolation | @@ -22,8 +23,8 @@ remain with the installation; public issues track the remaining acceptance work. | Native update paths | T3 server updated to 2873 and preserved 216 message texts; Codex 0.162.0 and Claude 2.1.295 installed under the execution user | Root-owned copied launchers had broken updater detection. New native launchers repaired that path; future automatic installation is not established for every tool | | Claude automatic updates | `claude doctor`: native installation, latest channel, auto-updates enabled, no installation issues; subscription authentication retained | New versions apply to later processes; this is not a future compatibility guarantee | | Access | Unprivileged host account could not access the personal home or Docker socket; no effective worker sudo | AgentOps and ADLC still share the account and its GitHub identity | -| Codex workspace sandbox | 0.162.0 native `:workspace` probe: workspace write succeeded and the outside write failed with read-only filesystem | This tests the installed native sandbox, not a new T3-launched turn | -| Claude Bash sandbox | 2.1.295 terminal probes: workspace write succeeded, outside write failed with read-only filesystem; explicit user settings loaded | T3 launch configuration is set to load that user policy; an actual T3-launched sandbox probe is still required. File tools/MCP/hooks are separate boundaries | +| Codex workspace sandbox | 0.162.0 native CLI and a fresh T3 2873 Auto turn: workspace write succeeded, outside write failed with an OS read-only-filesystem error; files removed and Git clean | One bounded write probe; no network, MCP or broad read-isolation claim. The CLI version check also warned that its PATH-alias directory was read-only | +| Claude Bash sandbox | 2.1.295 terminal probes: workspace write succeeded, outside write failed with read-only filesystem; explicit user settings loaded | T3 is configured to load that user policy, but the attempted native turn reached Claude's five-hour quota limit before the probe. Native Resume at reset is selected; completion remains unproved. File tools/MCP/hooks are separate boundaries | | System maintenance | Omarchy 4.0.4-1 source/config inspection found native update checks and an interactive system-update path | No unattended OS installation enabled; prompts, administrator access, snapshot coverage and encrypted boot remain relevant | The older [Nightly 2861 record](https://github.com/arcitai/factory/blob/v0.1.3/docs/qualification.md) @@ -34,9 +35,12 @@ this document does not change those observations to the newer build. The setup guide references T3 `0.0.46-nightly.20261009.2873`, upstream `ec80933ac8cd02fec5c97b342462ccc9567cdb1e`, inspected 2026-10-09. The server and -operator desktop version matched after the update. Subsequent provider and sandbox -changes need their own native T3 readback; the operator desktop was locked during -that part of qualification. Do not report the pending UI/turn check as passed. +operator desktop version matched after the update. The desktop later locked; a +temporary native web client over the existing private SSH route allowed the Codex +turn above. Claude's T3 probe remains pending at its +observed subscription reset. The incomplete Opus review is not an acceptance +verdict; a separate Codex context performs candidate review. No paid overage or +permanent AgentOps model change was enabled. Codex native Auto policy and Claude approval mode were inspected in T3's adapters. The two providers do not implement an identical boundary. Claude's user-editable diff --git a/scripts/check.py b/scripts/check.py index 01945c8..d77d2fc 100644 --- a/scripts/check.py +++ b/scripts/check.py @@ -38,15 +38,16 @@ def check(root=ROOT): names = set() for path in skills: text = path.read_text(encoding="utf-8") - parts = text.split("---", 2) - if len(parts) != 3 or parts[0].strip(): + lines = text.splitlines() + if not lines or lines[0] != "---" or "---" not in lines[1:]: errors.append(f"{path.relative_to(root)}: missing frontmatter") continue + end = lines.index("---", 1) fields = {} metadata = {} in_metadata = False # This is the package's constrained format, not a general YAML parser. - for line in parts[1].strip().splitlines(): + for line in lines[1:end]: if line == "metadata:" and not in_metadata: in_metadata = True continue diff --git a/tests/test_check.py b/tests/test_check.py index bc6346b..7ab8098 100644 --- a/tests/test_check.py +++ b/tests/test_check.py @@ -42,7 +42,8 @@ def test_revision_metadata_rejects_malformed_or_future_release_values(self): folder = root / "adlc/example" folder.mkdir(parents=True) path = folder / "SKILL.md" - for source in (valid, valid.replace('"0.1.4"', '"0.1.3"')): + for source in (valid, valid.replace('"0.1.4"', '"0.1.3"'), + valid.replace('A test skill.', 'A skill --- with punctuation.')): path.write_text(source) self.assertEqual(module.check(root), ([], 1)) invalid = [ @@ -55,6 +56,7 @@ def test_revision_metadata_rejects_malformed_or_future_release_values(self): valid.replace(' version:', ' version: "0.1.3"\n version:'), valid.replace(' updated:', ' arbitrary:'), valid.replace('"2026-10-09"', '"2026-10-09\t"'), + valid.replace('\n---\n', '\n---not-a-delimiter\n'), ] for source in invalid: with self.subTest(source=source):