[object Object]

← 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

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 →