Search documentation

Docs/Workforce · Business Data & Actions (Objects)v0.1.0/User manual/UnderstandResource model
Note·You're reading pre-release documentation (v0.1.0). Interfaces and behavior may change before a stable release.
Documentation source baseline
b75e0ff924b17231d712860ead910970f4c098de
Reviewed on

User manual · Understand

Resource model

What this page covers

Independent governed enterprise identity, explicit Issue associations, and one authorized application boundary for every consumer.

A Resource is an identity-bearing governed enterprise object with one exact ResourceType revision, owner root, lifecycle, properties, relations, behavior, and provenance. It may exist before, during, after, or without any Issue. Issue closure or deletion never retires it.

How this appears in the Objects UI

Open Workspace Objects, choose an Object type, and select one row. The detail drawer renders every schema-declared property, including nested objects and arrays, before relationships and available Actions. The web application does not contain provider-specific cards for repositories, tickets, customers, or orders.

The Pack supplies the data contract. Restrained presentation attributes may provide a human label, description, grouping, order, format, or sensitivity hint; an unknown attribute still has a safe generic representation. Each Action owns its argument schema, impact explanation, and confirmation requirement. Submitting it returns the Resource owner’s structured result and technical receipt. Presentation metadata never grants authority or replaces Resource validation, revision fencing, authorization, or idempotency.

Static ownership

ConcernAuthority
object identity, facts, revisions, links, observation, realizationResource domain
durable content identity and descriptorResource fact stream; immutable bytes sit behind ResourceContentStore
Resource availability at a scopeResourceBinding + ResourceScopeResolver
Issue raised against an objectimmutable Issue raised_against: ResourceRef
Workflow userequirement binding, then frozen execution snapshot
created/attested object provenanceResource-owned ResourceCausation
inverse “Issues for Resource”rebuildable Work/product query

There is no universal bidirectional Issue–Resource relation and no Resource issue_id. awaken-flow-resource does not depend on the Work domain.

HTTP, MCP, interactive Agents, Workflow, Automation, and Connector ingress reuse the same scoped awaken-flow-resource-operations application services for query, history, Action, observation, and realization. They must not reimplement visibility, redaction, exact-revision checks, approval, or dispatch. Resource remains embedded in Workforce; this code boundary does not imply a second database or network service.

Agent access

An Agent declaration may carry a closed resource_access contract. Each entry targets an exact ResourceType or capability, grants selected query, get, relations, history, and content reads, allow-lists exact Actions, and may grant the submit mutation. With no Actions or mutations the target is read-only. Activation and each session/WorkUnit freeze a grant; every call still revalidates scope, visibility, redaction, revision, and approval.

Workflow-selected access may narrow the Agent declaration. There is no ambient resource.invoke, arbitrary tool-name authority, direct FactStore access, or Agent-owned synchronization loop.

Durable content is a Resource property

Text and files do not introduce a Document or blob aggregate. A ResourceType may declare a Content property with allowed normalized MIME types and a byte limit. The Resource fact stores only a closed ContentDescriptor:

content_id + media_type + size_bytes + sha256 + optional filename

content_id is opaque. Filesystem paths, bucket keys, signed URLs, Session ids, and Artifact ids never enter Resource truth. The byte-custody port reuses Awaken’s immutable content-addressed FileStore, but Resource identity, revision, relations, authorization, and lifecycle remain in Workforce’s one fact stream. The typed Document HTTP facade is only a Markdown-oriented view over the system document ResourceType and this same content path.

sequenceDiagram
    participant A as Agent or Document facade
    participant S as Resource submission boundary
    participant C as ResourceContentStore
    participant R as Resource command/fact stream
    A->>S: inline_text, inline_file, or public HTTPS URL
    S->>S: authorize, normalize, bound, verify digest/type
    S->>C: put immutable bytes
    C-->>S: opaque content_id
    S->>R: register or CAS-configure descriptor
    R-->>A: terminal committed Resource revision

resource.submit is the sole Agent custody path; resource.content.get is the explicit content read. A stale CAS, unsafe URL, invalid base64, disallowed media, oversized input, digest mismatch, external state authority, missing bytes, or revoked grant fails terminally. The ordered boundary is put immutable bytes, then append the Resource fact: failure may leave unreferenced immutable bytes, but can never expose a Resource pointing at uncommitted mutable content. Awaken Session Files and recovered Artifacts remain execution evidence, not Resource authority.

Observation is not Workflow

Provider push, platform pull, manual refresh, and post-Action verification enter Connector normalization, then the Resource observation service. The observation pump owns leases and retries; Resource admission owns identity, schema, ordering, relations, and atomic facts. Workflow remains accountable multi-step work and Automation remains business on → when → then response—neither is an ETL or CDC engine.

See Domain Packs, permissions and resources, and credential custody.