← back to Homesonspec
auto-data-snapshot: 2026-08-24T04:45:01 (6 data files) — collectors/chafin-communities/package.json collectors/chafin-communities/selftest-live.mts collectors/chafin-communities/tsconfig.json collectors/mungo-homes/package.json collectors/mungo-homes/tsconfig.json
67563c201e86f5f8fa403260840ef53f131d1297 · 2026-08-24 04:45:19 -0700 · auto-commit-fleet
Files touched
A collectors/chafin-communities/package.jsonA collectors/chafin-communities/selftest-live.mtsA collectors/chafin-communities/tsconfig.jsonA collectors/mungo-homes/package.jsonA collectors/mungo-homes/tsconfig.jsonM pnpm-lock.yaml
Diff
commit 67563c201e86f5f8fa403260840ef53f131d1297
Author: auto-commit-fleet <steve@designerwallcoverings.com>
Date: Mon Aug 24 04:45:19 2026 -0700
auto-data-snapshot: 2026-08-24T04:45:01 (6 data files) — collectors/chafin-communities/package.json collectors/chafin-communities/selftest-live.mts collectors/chafin-communities/tsconfig.json collectors/mungo-homes/package.json collectors/mungo-homes/tsconfig.json
---
collectors/chafin-communities/package.json | 15 +++++
collectors/chafin-communities/selftest-live.mts | 83 +++++++++++++++++++++++++
collectors/chafin-communities/tsconfig.json | 1 +
collectors/mungo-homes/package.json | 15 +++++
collectors/mungo-homes/tsconfig.json | 1 +
pnpm-lock.yaml | 44 +++++++++++++
6 files changed, 159 insertions(+)
diff --git a/collectors/chafin-communities/package.json b/collectors/chafin-communities/package.json
new file mode 100644
index 00000000..15d54f63
--- /dev/null
+++ b/collectors/chafin-communities/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@homesonspec/collector-chafin-communities",
+ "version": "0.1.0",
+ "private": true,
+ "type": "module",
+ "main": "./src/index.ts",
+ "types": "./src/index.ts",
+ "scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
+ "dependencies": {
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
+ },
+ "devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
+}
diff --git a/collectors/chafin-communities/selftest-live.mts b/collectors/chafin-communities/selftest-live.mts
new file mode 100644
index 00000000..816dcfc7
--- /dev/null
+++ b/collectors/chafin-communities/selftest-live.mts
@@ -0,0 +1,83 @@
+/**
+ * Bounded live self-test — chafin-communities adapter.
+ * Fetches up to 3 community pages, extracts records, reports field coverage.
+ * Pass criterion: ≥6/10 core field coverage (price, beds, baths, lot, id, city,
+ * state, status) across all homes found.
+ *
+ * Run:
+ * CHAFIN_COMMUNITY_LIMIT=3 node_modules/.bin/tsx selftest-live.mts
+ */
+
+process.env["CHAFIN_COMMUNITY_LIMIT"] = "3";
+process.env["CHAFIN_HOME_LIMIT"] = "20";
+
+import { chafinCommunitiesAdapter } from "./src/index.js";
+import type { SourceRegistryEntry } from "@homesonspec/collectors-common";
+
+const registry: SourceRegistryEntry = {
+ key: "chafin-communities-site",
+ collectionMethod: "CRAWL",
+ rateLimitRpm: 10,
+ mediaRights: "NONE",
+};
+
+const ctx = { mode: "live" as const, registry };
+
+let pages = 0;
+let communityRecords = 0;
+let homeRecords = 0;
+let errors = 0;
+
+const cov = {
+ price: 0, beds: 0, baths: 0, lot: 0, id: 0,
+ city: 0, state: 0, status: 0,
+};
+
+console.log("[chafin-live] starting bounded crawl (limit=3 communities)...");
+
+for await (const page of chafinCommunitiesAdapter.fetch(ctx)) {
+ pages++;
+ const out = chafinCommunitiesAdapter.extract(page);
+ errors += out.errors.length;
+ for (const err of out.errors) console.warn(" error:", err);
+ for (const rec of out.records) {
+ if (rec.entityType === "community") {
+ communityRecords++;
+ } else if (rec.entityType === "inventory_home") {
+ homeRecords++;
+ const f = rec.fields as Record<string, { value: unknown }>;
+ if (f["price"]?.value != null) cov.price++;
+ if (f["beds"]?.value != null) cov.beds++;
+ if (f["bathsTotal"]?.value != null) cov.baths++;
+ if (f["lotNumber"]?.value != null) cov.lot++;
+ if (f["builderInventoryId"]?.value != null) cov.id++;
+ if (f["city"]?.value != null) cov.city++;
+ if (f["state"]?.value != null) cov.state++;
+ if (f["constructionStatus"]?.value != null) cov.status++;
+ }
+ }
+ console.log(
+ ` page ${pages}: ${page.url} → ${out.records.filter((r) => r.entityType === "inventory_home").length} homes`,
+ );
+}
+
+const n = homeRecords;
+function pct(v: number) { return n ? `${Math.round(100 * v / n)}%` : "n/a"; }
+
+console.log(`\n[chafin-live] RESULTS`);
+console.log(` pages=${pages} communities=${communityRecords} homes=${n} errors=${errors}`);
+console.log(` price=${pct(cov.price)} beds=${pct(cov.beds)} baths=${pct(cov.baths)}`);
+console.log(` lot=${pct(cov.lot)} id=${pct(cov.id)} city=${pct(cov.city)} state=${pct(cov.state)} status=${pct(cov.status)}`);
+
+// Pass criterion: at least some homes found + 6/8 fields at >50%
+const fieldPcts = Object.values(cov).map((v) => (n ? v / n : 0));
+const above50 = fieldPcts.filter((p) => p > 0.5).length;
+if (n === 0) {
+ console.error("\nFAIL: no homes found (site may be blocking; check manually)");
+ process.exit(1);
+} else if (above50 < 6) {
+ console.error(`\nFAIL: only ${above50}/8 fields above 50% coverage (need 6)`);
+ process.exit(1);
+} else {
+ console.log(`\nPASS: ${n} homes, ${above50}/8 fields >50% coverage`);
+}
diff --git a/collectors/chafin-communities/tsconfig.json b/collectors/chafin-communities/tsconfig.json
new file mode 100644
index 00000000..e9bfc482
--- /dev/null
+++ b/collectors/chafin-communities/tsconfig.json
@@ -0,0 +1 @@
+{ "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": true }, "include": ["src/**/*.ts"] }
diff --git a/collectors/mungo-homes/package.json b/collectors/mungo-homes/package.json
new file mode 100644
index 00000000..d68d4594
--- /dev/null
+++ b/collectors/mungo-homes/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@homesonspec/collector-mungo-homes",
+ "version": "0.1.0",
+ "private": true,
+ "type": "module",
+ "main": "./src/index.ts",
+ "types": "./src/index.ts",
+ "scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
+ "dependencies": {
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
+ },
+ "devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
+}
diff --git a/collectors/mungo-homes/tsconfig.json b/collectors/mungo-homes/tsconfig.json
new file mode 100644
index 00000000..e9bfc482
--- /dev/null
+++ b/collectors/mungo-homes/tsconfig.json
@@ -0,0 +1 @@
+{ "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": true }, "include": ["src/**/*.ts"] }
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1c94c248..27885f41 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -459,6 +459,28 @@ importers:
specifier: ^4.0.0
version: 4.1.10(@types/node@22.20.1)(vite@8.1.5(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.2)(tsx@4.23.1)(yaml@2.9.0))
+ collectors/chafin-communities:
+ dependencies:
+ '@homesonspec/collectors-common':
+ specifier: workspace:*
+ version: link:../common
+ '@homesonspec/schemas':
+ specifier: workspace:*
+ version: link:../../packages/schemas
+ '@homesonspec/shared':
+ specifier: workspace:*
+ version: link:../../packages/shared
+ devDependencies:
+ '@types/node':
+ specifier: ^22.10.5
+ version: 22.20.1
+ typescript:
+ specifier: ^5.7.2
+ version: 5.9.3
+ vitest:
+ specifier: ^4.0.0
+ version: 4.1.10(@types/node@22.20.1)(vite@8.1.5(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.2)(tsx@4.23.1)(yaml@2.9.0))
+
collectors/common:
dependencies:
'@homesonspec/schemas':
@@ -924,6 +946,28 @@ importers:
specifier: ^4.0.0
version: 4.1.10(@types/node@22.20.1)(vite@8.1.5(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.2)(tsx@4.23.1)(yaml@2.9.0))
+ collectors/mungo-homes:
+ dependencies:
+ '@homesonspec/collectors-common':
+ specifier: workspace:*
+ version: link:../common
+ '@homesonspec/schemas':
+ specifier: workspace:*
+ version: link:../../packages/schemas
+ '@homesonspec/shared':
+ specifier: workspace:*
+ version: link:../../packages/shared
+ devDependencies:
+ '@types/node':
+ specifier: ^22.10.5
+ version: 22.20.1
+ typescript:
+ specifier: ^5.7.2
+ version: 5.9.3
+ vitest:
+ specifier: ^4.0.0
+ version: 4.1.10(@types/node@22.20.1)(vite@8.1.5(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.2)(tsx@4.23.1)(yaml@2.9.0))
+
collectors/oakwood-homes:
dependencies:
'@homesonspec/collectors-common':
← e1d685cb Add Summit Homes KC collector adapter (TK-10487 batch 2)
·
back to Homesonspec
·
ops: DB reclaim runbook (TK-10878) — O1 dedup + O3 partition 5f8d356c →