Imported from Vercantez/openuikit (
full/businesschat/AGENTS.md). Install upstream withnpx skills add Vercantez/openuikit --skill businesschat. Copyright stays with the author.
BusinessChat framework fan-out rules
This directory is an isolated clean-room starting point for the Linux BusinessChat
port. Work only inside full/businesschat/. Do not edit application
sources, another framework, package-wide manifests, shared integration/build
files, or anything under reference/ or tests/acceptance/.
Immutable evidence
reference/immutable-files.sha256 seals this file, FANOUT_TASK.md, every
reference input, and tests/acceptance/test_host.sh. Never rewrite, regenerate,
or reseal those files. SDK headers, module maps, Swift interfaces, and TBD files
are proprietary inputs: their paths and hashes are recorded, but their bytes
must not be copied into this repository.
All extractor-emitted graph files are preserved byte-for-byte. Apple graphs can
legitimately repeat a precise identifier. reference/public-surface.tsv contains
one canonical row per exact ID under the fixed canonicalSurfacePolicy recorded
in reference/symbol-graphs.json; duplicate occurrence and full-payload conflict
counts remain explicit there. Never treat canonical compaction as evidence that
the other raw occurrences did not exist.
reference/api-digester.json is a location-free compiler dump from the same
pinned Xcode SDK. Reconcile it with the symbol graph before writing declarations:
use it for imported ObjC USRs, superclass/protocol identity, selectors, type
optionality, declaration attributes, and ordered enum children. The graph remains
the canonical exact-ID census. reference/external-evidence.json pins independent
binding sources available in the prepared cloud environment. They are a
read-only secondary cross-check, never authority over the Apple-derived files and
never runtime evidence. If sources conflict, defer the declaration and add an
oracle question. Do not guess.
Required output
- Implement a real Linux module named
BusinessChatand a loadablelibBusinessChat.dylib. Put implementation Swift files in this framework directory, outsidetests/, and list each one as a repo-relative path inbusinesschat_guest_sources.txt. - Create
coverage.tsvwith the exact headerprecise status evidence notes. Include every precise identifier fromreference/public-surface.tsvexactly once. Allowed statuses areimplemented,declared,deferred,unavailable, andnot-applicable. At least 17 rows must beimplementedordeclaredfor theleaf-fulllane. A declaration that does not compile is notdeclared; behavior that was not exercised is notimplemented. Everyimplementedrow must citetest:full/businesschat/tests/agent/*Tests.swift#testName; define that exacttest*function for the sealed runner to call. Everydeclaredrow must citesource:full/businesschat/<product-source>.swift#Symbol; the source must be listed inbusinesschat_guest_sources.txtand contain the exact identifier anchor. Deferred, unavailable, and not-applicable rows require explanatory notes. - Create
oracle-questions.tsvwith the exact headerprecise question risk reason. Use an exact graph precise ID, ormodulefor a cross-cutting question. Include at least one concrete question; do not guess behavior missing from public inputs. - Create a nonempty
README.mddescribing what is real, fail-closed, and still deferred. The primary implementation file must beBusinessChat.swift. - Put focused behavioral checks in
tests/agent/*Tests.swiftas top-level, synchronous, no-argument functions namedtest*. Createtests/agent/BusinessChatLoadSmoke.swiftwith exactly these three logical lines (including the blank line):import BusinessChat, a blank line, andlet frameworkLoadSmokeMarker = "BUSINESSCHAT_AGENT_RUNTIME_OK". The sealed gate generates the executable runner fromimplementedcoverage rows, imports and explicitly loads the dylib, invokes every cited test exactly once, and emits the marker as its sole stdout. Loading and printing are acceptance plumbing, not behavioral evidence by themselves. - When dependencies are listed below, create
tests/agent/BusinessChatDependencyIdentity.swift. ImportBusinessChatand every declared dependency and pass genuine dependency values through publicBusinessChatAPIs. This probe is for the clean EC2 integration build; the isolated host gate is not permission to create same-named stand-ins. Never declare a public framework-local substitute for a dependency-owned type. - Preserve unavailable, entitlement-gated, hardware-only, and Apple-service
behavior honestly. Prefer deterministic fail-closed errors or inert behavior
over fabricated success. Do not add or prioritize
#Previewsupport.
Before implementation, make a declaration-facts pass: exact graph ID and
signature, matching API-digester node/USR, dependency owner, and any corroborating
binding source location. Static sources do not establish defaults, callback
timing, queues, retention, coding round trips, hardware behavior, or service
success. Such behavior is implemented only with focused behavioral test
evidence; the load-smoke marker alone proves none of it.
Build discipline
Run bash tests/acceptance/test_host.sh from this framework directory before
committing. It validates evidence, coverage, the source manifest, warnings-as-
errors compilation, dylib creation, import, linking, focused tests, and the exact
load-smoke marker.
Keep all generated products in temporary directories; remove .build, build,
and scratch before reporting completion. Do not weaken or bypass the gate.
Dependencies expected by this seed:
FoundationUIKit
Risk labels:
uimessagingfail-closed