Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a4c9349fce | |||
| 4c4471c2bd | |||
| 53aef1eb64 | |||
| 18af3802c6 | |||
| 4e9ff80828 | |||
| 0e1f99639f | |||
| f8a5551215 | |||
| 45edbeae1f | |||
| a9af14ac63 | |||
| c1f4366379 | |||
| c0d6b4a8e1 |
@@ -179,6 +179,18 @@ python3 scripts/documents-client.py save "$api_work_dir/document.json"
|
||||
|
||||
客户端只自动重试一次临时网络或 `502/503/504` 错误,保持正文和请求 ID 不变;`409` 等业务错误不会自动覆盖。它不跟随 HTTP 重定向,避免将 Bearer 凭据转发到其他地址。正文和 Key 继续保存在数据库或私有文件中,不因使用 API 而进入 Git。
|
||||
|
||||
### 上传正文图片
|
||||
|
||||
使用前述 HTTPS 或 SSH 隧道配置以及 `read-write` 文档 API Key:
|
||||
|
||||
```sh
|
||||
python3 scripts/documents-client.py upload-image ./diagram.png
|
||||
```
|
||||
|
||||
客户端向 `POST /api/documents/images` 发送原始图片字节,`Content-Type` 为 `image/png`、`image/jpeg` 或 `image/webp`。服务端接受最大 8 MiB、2500 万像素的静态图,转换为最大 2000 × 4000 像素、2 MiB 的 WebP,并按处理后内容去重。
|
||||
|
||||
把响应中的 `url` 放入 Markdown,例如 ``,然后通过章节 API 保存正文。登录读者和文档 API Key 均可读取图片。图片存入现有持久化 SQLite,同步纳入整库备份。仅导出正文的 `docs export` 保留图片引用,迁移时需使用包含图片的整库备份。
|
||||
|
||||
## 研究数据与检查
|
||||
|
||||
研究工作台提供公司筛选、经营指标、原始证据、收费与交付模式、技术材料及核查记录。它区分公司披露、支付平台指标、第三方估算、融资和客户收益;未知收入不填零,材料可访问也不代表性能或商业效果已经验证。研究范围、样本限制和个案结论以工作台记录为准。
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
"react": "19.3.1",
|
||||
"react-dom": "19.3.1",
|
||||
"react-markdown": "10.1.0",
|
||||
"remark-gfm": "4.0.1"
|
||||
"remark-gfm": "4.0.1",
|
||||
"sharp": "0.35.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/postcss": "4.3.3",
|
||||
@@ -33,7 +34,6 @@
|
||||
"eslint": "^9.39.5",
|
||||
"eslint-config-next": "16.4.3",
|
||||
"postcss": "8.5.31",
|
||||
"sharp": "0.35.5",
|
||||
"tailwindcss": "4.3.3",
|
||||
"typescript": "~5.9.3"
|
||||
}
|
||||
|
||||
@@ -182,9 +182,9 @@ async function main() {
|
||||
assert.equal(researchResponse.status, 200, "authenticated research API");
|
||||
assert.ok(researchResponse.headers.get("cache-control")?.includes("no-store"));
|
||||
const research = await researchResponse.json();
|
||||
assert.equal(research.companies.length, 1307);
|
||||
assert.equal(research.companies.length, 1312);
|
||||
assert.equal(research.categories.length, 11);
|
||||
assert.equal(research.evidence.length, 5331);
|
||||
assert.equal(research.evidence.length, 5354);
|
||||
assert.equal(research.observations.length, 495);
|
||||
assert.equal((await request("/api/research/ai-companies", { method: "POST", headers })).status, 405);
|
||||
const researchPage = await request("/docs/other-research/ai-company-research/overview", { headers });
|
||||
@@ -200,11 +200,15 @@ async function main() {
|
||||
for (const doc of searchIndex as { slug: string; sourceSlug: string }[]) {
|
||||
assert.ok(!doc.slug.split("/").some((part) => /^\d+-/.test(part)), doc.slug);
|
||||
const legacy = await request(`/docs/${doc.sourceSlug}?from=legacy`, { headers });
|
||||
assert.equal(legacy.status, 308, doc.sourceSlug);
|
||||
const destination = new URL(legacy.headers.get("location")!, base);
|
||||
assert.equal(destination.pathname, `/docs/${doc.slug}`);
|
||||
assert.equal(destination.searchParams.get("from"), "legacy");
|
||||
assert.ok(legacy.headers.get("cache-control")?.includes("no-store"));
|
||||
if (doc.sourceSlug === doc.slug) {
|
||||
assert.equal(legacy.status, 200, doc.sourceSlug);
|
||||
} else {
|
||||
assert.equal(legacy.status, 308, doc.sourceSlug);
|
||||
const destination = new URL(legacy.headers.get("location")!, base);
|
||||
assert.equal(destination.pathname, `/docs/${doc.slug}`);
|
||||
assert.equal(destination.searchParams.get("from"), "legacy");
|
||||
}
|
||||
}
|
||||
const routes = ["/", ...searchIndex.map((doc: { slug: string }) => `/docs/${doc.slug}`)];
|
||||
const raw = await request("/api/documents/source?slug=endor/endor-purpose-draft", { headers });
|
||||
@@ -254,6 +258,17 @@ async function main() {
|
||||
for (const id of ids) assert.ok(html.includes(`href="#${id}"`), `TOC anchor: ${route}#${id}`);
|
||||
}
|
||||
}
|
||||
assert.ok(!home.includes('data-category="Endor"'), "Superseded Endor collection is absent from navigation");
|
||||
if (searchIndex.some((doc: { collection: string }) => doc.collection === "Endorphin")) {
|
||||
assert.equal([...home.matchAll(/data-category="([^"]+)"/g)][0]?.[1], "Endorphin", "Endorphin is the first category");
|
||||
assert.ok(home.includes('/docs/endorphin/value-proposition'), "Endorphin opens at its value proposition");
|
||||
}
|
||||
// Retired documents remain reachable for historical links and gallery checks.
|
||||
if (!purpose) {
|
||||
const archived = await request("/docs/endor/endor-purpose-draft", { headers });
|
||||
assert.equal(archived.status, 200);
|
||||
purpose = await archived.text();
|
||||
}
|
||||
assert.ok(home.includes("资料库"));
|
||||
assert.ok(home.includes("/docs/source-studies/pretext/overview"));
|
||||
// Inline preview and zoom dialog must both use the compressed browser asset.
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
import type { DocLink } from "@/lib/docs";
|
||||
|
||||
// Keep superseded Endor pages addressable without offering them as current material.
|
||||
export function catalogDocuments<T extends DocLink>(docs: T[]): T[] {
|
||||
return docs.filter((doc) => doc.collection !== "Endor 文档")
|
||||
.sort((a, b) => Number(b.collection === "Endorphin") - Number(a.collection === "Endorphin"));
|
||||
}
|
||||
|
||||
export function collectionLabel(name: string) {
|
||||
return name.replace(/ 文档$| 源码教程$|问题集$/g, "");
|
||||
}
|
||||
@@ -15,10 +21,13 @@ export function collectionIcon(name?: string): "book" | "code" | "layers" | "nod
|
||||
if (name?.includes("垃圾回收")) return "nodes";
|
||||
return "book";
|
||||
}
|
||||
export function collectionEntries(docs: DocLink[]) {
|
||||
export function collectionEntries(documents: DocLink[]) {
|
||||
const docs = catalogDocuments(documents);
|
||||
return [...new Set(docs.map((doc) => doc.collection))].map((name) => {
|
||||
const items = docs.filter((doc) => doc.collection === name);
|
||||
const entry = items.find((doc) => doc.slug.endsWith("/overview")) ?? items[0];
|
||||
const entry = items.find((doc) => doc.slug.endsWith("/overview"))
|
||||
?? (name === "Endorphin" ? items.find((doc) => doc.featured) : undefined)
|
||||
?? items[0];
|
||||
return { name, entry, count: items.length };
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { randomUUID, createHash } from "node:crypto";
|
||||
import { catalogDocuments } from "./collections";
|
||||
import { openSiteDatabase } from "./site-database";
|
||||
import { DocumentValidationError, DocumentConflictError } from "./document-errors";
|
||||
import { sectionSchema, loadSections, reconcileSections, persistSections, splitSections, outline,
|
||||
@@ -188,7 +189,7 @@ export async function readDoc(slug: string): Promise<Doc> {
|
||||
}
|
||||
|
||||
export async function listDocs(): Promise<DocLink[]> {
|
||||
return allDocuments().map(({ content: _, ...doc }) => { void _; return doc; });
|
||||
return catalogDocuments(allDocuments()).map(({ content: _, ...doc }) => { void _; return doc; });
|
||||
}
|
||||
|
||||
// Explicit, atomic bootstrap only. Runtime reads never import repository data.
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import { createHash } from "node:crypto";
|
||||
import { openSiteDatabase } from "./site-database";
|
||||
|
||||
function openImages() {
|
||||
const db = openSiteDatabase();
|
||||
try {
|
||||
db.exec(`CREATE TABLE IF NOT EXISTS document_images (
|
||||
id TEXT PRIMARY KEY,
|
||||
bytes BLOB NOT NULL
|
||||
)`);
|
||||
return db;
|
||||
} catch (error) {
|
||||
db.close();
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export function saveDocumentImage(bytes: Buffer) {
|
||||
const id = createHash("sha256").update(bytes).digest("hex");
|
||||
const db = openImages();
|
||||
try {
|
||||
db.prepare("INSERT INTO document_images (id, bytes) VALUES (?, ?) ON CONFLICT(id) DO NOTHING").run(id, bytes);
|
||||
return id;
|
||||
} finally {
|
||||
db.close();
|
||||
}
|
||||
}
|
||||
|
||||
export function readDocumentImage(id: string) {
|
||||
const db = openImages();
|
||||
try {
|
||||
const row = db.prepare("SELECT bytes FROM document_images WHERE id = ?").get(id) as
|
||||
| { bytes: Uint8Array }
|
||||
| undefined;
|
||||
return row ? Buffer.from(row.bytes) : undefined;
|
||||
} finally {
|
||||
db.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import type { NextApiRequest, NextApiResponse } from "next";
|
||||
import { documentApiError } from "@/lib/documents-api";
|
||||
import { readDocumentImage } from "@/lib/document-images";
|
||||
|
||||
// The site proxy accepts a logged-in reader or a document API key on this route.
|
||||
export default function handler(request: NextApiRequest, response: NextApiResponse) {
|
||||
try {
|
||||
response.setHeader("Cache-Control", "private, no-store");
|
||||
response.setHeader("X-Content-Type-Options", "nosniff");
|
||||
if (request.method !== "GET" && request.method !== "HEAD") {
|
||||
response.setHeader("Allow", "GET, HEAD");
|
||||
return response.status(405).end();
|
||||
}
|
||||
const id = request.query.id;
|
||||
if (typeof id !== "string" || !/^[a-f0-9]{64}$/.test(id)) return response.status(404).end();
|
||||
const bytes = readDocumentImage(id);
|
||||
if (!bytes) return response.status(404).end();
|
||||
response.setHeader("Content-Type", "image/webp");
|
||||
response.setHeader("Content-Length", bytes.length);
|
||||
return request.method === "HEAD" ? response.status(200).end() : response.status(200).send(bytes);
|
||||
} catch (error) {
|
||||
return documentApiError(response, error);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
import type { NextApiRequest, NextApiResponse } from "next";
|
||||
import sharp from "sharp";
|
||||
import { authorizeDocuments, documentApiError } from "@/lib/documents-api";
|
||||
import { saveDocumentImage } from "@/lib/document-images";
|
||||
|
||||
const maxUploadBytes = 8 * 1024 * 1024;
|
||||
const maxStoredBytes = 2 * 1024 * 1024;
|
||||
const imageTypes = new Set(["image/png", "image/jpeg", "image/webp"]);
|
||||
const imageFormats = new Set(["png", "jpeg", "webp"]);
|
||||
|
||||
export const config = { api: { bodyParser: false } };
|
||||
|
||||
export default async function handler(request: NextApiRequest, response: NextApiResponse) {
|
||||
try {
|
||||
if (request.method !== "POST") {
|
||||
response.setHeader("Allow", "POST");
|
||||
return response.status(405).end();
|
||||
}
|
||||
if (!authorizeDocuments(request, response, true)) return;
|
||||
|
||||
const type = request.headers["content-type"]?.split(";")[0].trim().toLowerCase();
|
||||
if (!type || !imageTypes.has(type)) {
|
||||
return response.status(415).json({ error: "请上传 PNG、JPEG 或 WebP 图片" });
|
||||
}
|
||||
if (Number(request.headers["content-length"]) > maxUploadBytes) {
|
||||
return response.status(413).json({ error: "图片上传上限为 8 MiB" });
|
||||
}
|
||||
|
||||
const chunks: Buffer[] = [];
|
||||
let length = 0;
|
||||
for await (const chunk of request.iterator({ destroyOnReturn: false })) {
|
||||
const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
||||
length += bytes.length;
|
||||
if (length > maxUploadBytes) {
|
||||
return response.status(413).json({ error: "图片上传上限为 8 MiB" });
|
||||
}
|
||||
chunks.push(bytes);
|
||||
}
|
||||
|
||||
let encoded: Buffer;
|
||||
try {
|
||||
const input = sharp(Buffer.concat(chunks), { limitInputPixels: 25_000_000 });
|
||||
const { format, pages } = await input.metadata();
|
||||
if (!format || !imageFormats.has(format) || type !== `image/${format}` || (pages ?? 1) > 1) {
|
||||
return response.status(415).json({ error: "图片格式需与声明一致,且只支持静态图片" });
|
||||
}
|
||||
encoded = await input.rotate()
|
||||
.resize({ width: 2000, height: 4000, fit: "inside", withoutEnlargement: true })
|
||||
.webp({ quality: 85 })
|
||||
.toBuffer();
|
||||
} catch {
|
||||
return response.status(400).json({ error: "无法解码图片,或像素数量超过限制" });
|
||||
}
|
||||
if (encoded.length > maxStoredBytes) {
|
||||
return response.status(413).json({ error: "处理后的图片超过 2 MiB,请缩小后重试" });
|
||||
}
|
||||
|
||||
const id = saveDocumentImage(encoded);
|
||||
const url = `/api/documents/images/${id}`;
|
||||
return response.status(200).json({ id, url, contentType: "image/webp", size: encoded.length });
|
||||
} catch (error) {
|
||||
return documentApiError(response, error);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
import type { NextApiRequest, NextApiResponse } from "next";
|
||||
import { catalogDocuments } from "@/lib/collections";
|
||||
import { allDocuments } from "@/lib/docs";
|
||||
|
||||
// The proxy authenticates this endpoint, including index content.
|
||||
@@ -9,7 +10,7 @@ export default async function handler(request: NextApiRequest, response: NextApi
|
||||
return response.status(405).end();
|
||||
}
|
||||
try {
|
||||
const index = allDocuments().map(({ content, ...doc }) => ({ ...doc, searchText: content }));
|
||||
const index = catalogDocuments(allDocuments()).map(({ content, ...doc }) => ({ ...doc, searchText: content }));
|
||||
return response.status(200).json(index);
|
||||
} catch {
|
||||
return response.status(503).json({ error: "文档数据库暂时不可用" });
|
||||
|
||||
@@ -23,6 +23,10 @@ import { collectionEntries, collectionLabel } from "@/lib/collections";
|
||||
import { Icon } from "@/components/Icon";
|
||||
import { headingsFor } from "@/lib/navigation";
|
||||
|
||||
function isZoomableFigure(source: string) {
|
||||
return source.startsWith("/figures/endor-") || /^\/api\/documents\/images\/[a-f0-9]{64}$/.test(source);
|
||||
}
|
||||
|
||||
type Props = { doc: Doc; docs: DocLink[] };
|
||||
const AICompanyResearch = dynamic(() => import("@/components/AICompanyResearch"));
|
||||
export const getServerSideProps: GetServerSideProps<Props> = async ({ params, res, resolvedUrl }) => {
|
||||
@@ -54,7 +58,8 @@ export default function DocPage({
|
||||
const [active, setActive] = useState("");
|
||||
|
||||
const siblings = docs.filter((d) => d.collection === doc.collection);
|
||||
const collectionEntry = collectionEntries(docs).find((c) => c.name === doc.collection)!.entry;
|
||||
// Historical pages remain readable even when their collection is outside the catalog.
|
||||
const collectionEntry = collectionEntries(docs).find((c) => c.name === doc.collection)?.entry ?? doc;
|
||||
const index = siblings.findIndex((d) => d.slug === doc.slug);
|
||||
useEffect(() => {
|
||||
const observer = new IntersectionObserver(
|
||||
@@ -120,14 +125,14 @@ export default function DocPage({
|
||||
const slides = node?.children.flatMap((child) =>
|
||||
child.type === "element" && child.tagName === "img" &&
|
||||
typeof child.properties.src === "string" &&
|
||||
child.properties.src.startsWith("/figures/endor-")
|
||||
isZoomableFigure(child.properties.src)
|
||||
? [{ source: child.properties.src, alt: String(child.properties.alt ?? "") }]
|
||||
: [],
|
||||
) ?? [];
|
||||
const onlyImages = node?.children.every((child) =>
|
||||
(child.type === "element" && child.tagName === "img" &&
|
||||
typeof child.properties.src === "string" &&
|
||||
child.properties.src.startsWith("/figures/endor-")) ||
|
||||
isZoomableFigure(child.properties.src)) ||
|
||||
(child.type === "text" && child.value.trim() === ""),
|
||||
);
|
||||
if (slides.length > 1 && onlyImages) return <FigureGallery slides={slides} />;
|
||||
@@ -141,7 +146,7 @@ export default function DocPage({
|
||||
);
|
||||
},
|
||||
img: ({ src, alt }) =>
|
||||
typeof src === "string" && src.startsWith("/figures/endor-") ? (
|
||||
typeof src === "string" && isZoomableFigure(src) ? (
|
||||
<ArchitectureFigure source={src} alt={alt ?? "Endor 架构图"} />
|
||||
) : (
|
||||
// eslint-disable-next-line @next/next/no-img-element
|
||||
|
||||
@@ -124,11 +124,11 @@ test("research revisions share the authentication database and preserve replay l
|
||||
for (let i = 0; i < 20; i++) consumeCode(config, "invalid");
|
||||
assert.equal(consumeCode(config, "invalid"), "limited");
|
||||
const initial = readResearchSnapshot();
|
||||
assert.equal(initial.companies.length, 1307);
|
||||
assert.equal(initial.evidence.length, 5331);
|
||||
assert.equal(initial.companies.length, 1312);
|
||||
assert.equal(initial.evidence.length, 5354);
|
||||
assert.equal(initial.observations.length, 495);
|
||||
const businessReviews = initial.reviews.filter((review) => review.type === businessModelReviewType);
|
||||
assert.equal(businessReviews.length, 25);
|
||||
assert.equal(businessReviews.length, 26);
|
||||
assert.deepEqual(businessReviews, seed.reviews.filter((review) => review.type === businessModelReviewType)
|
||||
.sort((a, b) => a.id.localeCompare(b.id)),
|
||||
"business model assessments and company/evidence links persist in the shared database");
|
||||
@@ -170,9 +170,9 @@ test("research validation rejects broken evidence and unsafe source links", () =
|
||||
|
||||
test("reviews link explicit companies without turning global or excluded cases into companies", () => {
|
||||
const snapshot = structuredClone(seed) as ResearchSnapshot;
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "companies").length, 297);
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "dataset").length, 158);
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "excluded-candidate").length, 63);
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "companies").length, 299);
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "dataset").length, 159);
|
||||
assert.equal(snapshot.reviews.filter((r) => r.scope === "excluded-candidate").length, 65);
|
||||
const review = snapshot.reviews.find((r) => r.id === "R4")!;
|
||||
assert.deepEqual(reviewCompanyIds(snapshot, review), ["AI007", "AI013", "AI021", "AI034"]);
|
||||
assert.deepEqual(reviewCompanyIds(snapshot, snapshot.reviews.find((r) => r.id === "CN-R-PSI")!), []);
|
||||
@@ -191,11 +191,11 @@ test("reviews link explicit companies without turning global or excluded cases i
|
||||
test("disclosure counts exclude client income, biographies, targets and duplicate milestones", () => {
|
||||
const snapshot = seed as ResearchSnapshot;
|
||||
const summary = categorySummary(snapshot);
|
||||
assert.equal(summary.reduce((n, c) => n + c.count, 0), 1307);
|
||||
assert.equal(summary.reduce((n, c) => n + c.count, 0), 1312);
|
||||
assert.equal(summary.reduce((n, c) => n + c.self, 0), 63);
|
||||
assert.equal(summary.reduce((n, c) => n + c.estimate, 0), 2);
|
||||
assert.equal(summary.reduce((n, c) => n + c.platform, 0), 19);
|
||||
assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 1223);
|
||||
assert.equal(summary.reduce((n, c) => n + c.unknown, 0), 1228);
|
||||
assert.equal(snapshot.companies.find((c) => c.name === "Rork")?.revenueStatus, "unknown");
|
||||
assert.equal(snapshot.companies.find((c) => c.name === "Result")?.revenueStatus, "unknown");
|
||||
assert.ok(snapshot.observations.filter((o) => o.selection === "signal").every((o) => o.scope === "公司整体"));
|
||||
@@ -230,7 +230,7 @@ test("service run rates, legacy freight revenue and paid adoption do not become
|
||||
|
||||
test("technical reviews keep accessible materials separate from tested capabilities", () => {
|
||||
const snapshot = structuredClone(seed) as ResearchSnapshot;
|
||||
assert.equal(snapshot.companies.filter((c) => c.technicalReview).length, 298);
|
||||
assert.equal(snapshot.companies.filter((c) => c.technicalReview).length, 303);
|
||||
assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "public-artifact").length, 29);
|
||||
assert.equal(snapshot.companies.filter((c) => c.technicalReview?.level === "independent-test").length, 1);
|
||||
assert.equal(snapshot.companies.find((c) => c.id === "AI051")?.revenueStatus, "unknown");
|
||||
@@ -646,10 +646,10 @@ test("public Speedrun cohort rosters preserve the finite boundary without invent
|
||||
const newlyRegistered = rosters.filter((batch) => !batch.id.startsWith("SR007-")).flatMap((batch) => batch.records);
|
||||
assert.equal(newlyRegistered.length, 242);
|
||||
assert.equal(newlyRegistered.filter((row) => row.status === "pending-year").length, 5);
|
||||
assert.equal(newlyRegistered.filter((row) => row.status === "linked").length, 63);
|
||||
assert.equal(newlyRegistered.filter((row) => row.status === "linked").length, 68);
|
||||
assert.equal(newlyRegistered.filter((row) => row.status === "existing-outside-cohort").length, 1);
|
||||
assert.equal(newlyRegistered.filter((row) => row.status === "outside-cohort").length, 144);
|
||||
assert.equal(newlyRegistered.filter((row) => row.status === "pending-ai").length, 29,
|
||||
assert.equal(newlyRegistered.filter((row) => row.status === "pending-ai").length, 24,
|
||||
"a known self-reported founding year does not by itself establish the current AI business");
|
||||
assert.equal(newlyRegistered.filter((row) => row.profileStatus === "readable").length, 232);
|
||||
assert.ok(newlyRegistered.filter((row) => row.status === "outside-cohort").every((row) =>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "2026-11-01-sr-learning-health-1",
|
||||
"version": "2026-11-01-source-closeout-1",
|
||||
"asOf": "2026-11-01",
|
||||
"scope": "全球公开资料研究:保留首批个案,并扩展核查2025—2026八个YC批次候选池;成立年份以官方公司页面字段为依据。",
|
||||
"limitations": [
|
||||
@@ -41985,6 +41985,186 @@
|
||||
"SRLEARN1-SUN-PRIVACY"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "AI216",
|
||||
"name": "doublespeed",
|
||||
"url": "https://doublespeed.ai",
|
||||
"channel": "S14",
|
||||
"cat": "C06",
|
||||
"year": 2025,
|
||||
"team": 11,
|
||||
"location": "San Francisco, California, United States of America(投资方资料)",
|
||||
"business": "AI社交内容和托管账号运营,含人工内容处理。",
|
||||
"buyer": "品牌/增长与内容团队",
|
||||
"delivery": "官网演示/审计预约,AI生成和人工微调自述",
|
||||
"price": "未见公开金额/实际合同",
|
||||
"businessModel": "营销交付软件/服务,模型/内容、人员和账号/平台维护及获客成本待核",
|
||||
"entityBasis": "官网品牌自述,精确法人/注册与采购合同未核",
|
||||
"stage": "官网演示/审计预约,AI生成和人工微调自述",
|
||||
"cohort": "投资方自报2025成立,独立注册/品牌起点待核",
|
||||
"teamBasis": "公开档案人数,2026-11-01读取,统计截至日未知",
|
||||
"sourceType": "公开投资方档案及当前官网",
|
||||
"notes": "当前任务/买方可分类但AI方法/能力、注册、真实合同/净费、付费与留存未独立核;标价/市场机会/候补/创作者收入不作ARR。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR005R-C19",
|
||||
"SRCLOSE1-SR005R-C19"
|
||||
],
|
||||
"revenueStatus": "unknown",
|
||||
"classificationBasis": "营销交付C06、个人互动C09、可玩内容创作C08、建设/农业专门任务C07,软件/人协同/采购渠道和计费分母分开,不按客户行业或投资标签当技术实测。",
|
||||
"technicalReview": {
|
||||
"level": "description",
|
||||
"reviewedAt": "2026-11-01",
|
||||
"summary": "仅官网/投资方当前任务核对,未运行产品/账号、投稿/生成或连接真实数据;声明/演示不当独立测试、已付款或法律/监管审查。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR005R-C19",
|
||||
"SRCLOSE1-SR005R-C19"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "AI217",
|
||||
"name": "SoulLink",
|
||||
"url": "https://soullink.io",
|
||||
"channel": "S14",
|
||||
"cat": "C09",
|
||||
"year": 2025,
|
||||
"team": 6,
|
||||
"location": "Los Angeles, California, United States of America(投资方资料)",
|
||||
"business": "3D虚拟AI陪伴与交互记忆应用。",
|
||||
"buyer": "个人陪伴/互动用户",
|
||||
"delivery": "beta和移动端入口,官网标Sept2026上线,未运行",
|
||||
"price": "未见公开收费金额或付费/留存底表",
|
||||
"businessModel": "个人互动应用,3D渲染、模型/语音、记忆/存储与内容支持成本待核",
|
||||
"entityBasis": "SoulLink/4D品牌与官网对应,精确法人及独立注册/合同未核",
|
||||
"stage": "beta和移动端入口,官网标Sept2026上线,未运行",
|
||||
"cohort": "投资方自报2025成立,独立注册/品牌起点待核",
|
||||
"teamBasis": "公开档案人数,2026-11-01读取,统计截至日未知",
|
||||
"sourceType": "公开投资方档案及当前官网",
|
||||
"notes": "当前任务/买方可分类但AI方法/能力、注册、真实合同/净费、付费与留存未独立核;标价/市场机会/候补/创作者收入不作ARR。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR005R-C49",
|
||||
"SRCLOSE1-SR005R-C49"
|
||||
],
|
||||
"revenueStatus": "unknown",
|
||||
"classificationBasis": "营销交付C06、个人互动C09、可玩内容创作C08、建设/农业专门任务C07,软件/人协同/采购渠道和计费分母分开,不按客户行业或投资标签当技术实测。",
|
||||
"technicalReview": {
|
||||
"level": "description",
|
||||
"reviewedAt": "2026-11-01",
|
||||
"summary": "仅官网/投资方当前任务核对,未运行产品/账号、投稿/生成或连接真实数据;声明/演示不当独立测试、已付款或法律/监管审查。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR005R-C49",
|
||||
"SRCLOSE1-SR005R-C49"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "AI218",
|
||||
"name": "Variant(tryvariant.com)",
|
||||
"url": "https://www.tryvariant.ai/",
|
||||
"channel": "S14",
|
||||
"cat": "C08",
|
||||
"year": 2025,
|
||||
"team": 5,
|
||||
"location": "San Francisco, California, United States of America(投资方资料)",
|
||||
"business": "文本/梗图/涂鸦到可玩小游戏及remix创作分发。",
|
||||
"buyer": "内容/游戏创作者和社区用户",
|
||||
"delivery": "原.ai跳转.com、beta申请;不与Variant-now合并",
|
||||
"price": "创作者变现为描述,具体平台收费/分成及付费未知",
|
||||
"businessModel": "可玩内容生成/社区,推理/游戏托管、内容版权审核和创作者分账待核",
|
||||
"entityBasis": "品牌与原档案域名重定向对应,精确法人/注册未核",
|
||||
"stage": "原.ai跳转.com、beta申请;不与Variant-now合并",
|
||||
"cohort": "投资方自报2025成立,独立注册/品牌起点待核",
|
||||
"teamBasis": "公开档案人数,2026-11-01读取,统计截至日未知",
|
||||
"sourceType": "公开投资方档案及当前官网",
|
||||
"notes": "当前任务/买方可分类但AI方法/能力、注册、真实合同/净费、付费与留存未独立核;标价/市场机会/候补/创作者收入不作ARR。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR005R-C55",
|
||||
"SRCLOSE1-SR005R-C55"
|
||||
],
|
||||
"revenueStatus": "unknown",
|
||||
"classificationBasis": "营销交付C06、个人互动C09、可玩内容创作C08、建设/农业专门任务C07,软件/人协同/采购渠道和计费分母分开,不按客户行业或投资标签当技术实测。",
|
||||
"technicalReview": {
|
||||
"level": "description",
|
||||
"reviewedAt": "2026-11-01",
|
||||
"summary": "仅官网/投资方当前任务核对,未运行产品/账号、投稿/生成或连接真实数据;声明/演示不当独立测试、已付款或法律/监管审查。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR005R-C55",
|
||||
"SRCLOSE1-SR005R-C55"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "AI219",
|
||||
"name": "Cascade(usecascade.ai)",
|
||||
"url": "https://usecascade.ai/",
|
||||
"channel": "S14",
|
||||
"cat": "C07",
|
||||
"year": 2025,
|
||||
"team": 2,
|
||||
"location": "San Francisco, California, United States of America(投资方资料)",
|
||||
"business": "AEC企业RFP发现、匹配、提案和项目规范分析。",
|
||||
"buyer": "建筑/工程/施工企业业务开发和提案团队",
|
||||
"delivery": "当前发现/提案/规范为LIVE自述,预投标信号/比标等SOON,公开early access",
|
||||
"price": "未见统一金额或已签软件/实施订单",
|
||||
"businessModel": "行业商机/提案工作流软件,门户数据/质量维护、模型/专业审核与接入成本待核",
|
||||
"entityBasis": "官网页脚Cascade Intelligence Inc.自述,独立注册及具体订单未核",
|
||||
"stage": "当前发现/提案/规范为LIVE自述,预投标信号/比标等SOON,公开early access",
|
||||
"cohort": "投资方自报2025成立,独立注册/品牌起点待核",
|
||||
"teamBasis": "公开档案人数,2026-11-01读取,统计截至日未知",
|
||||
"sourceType": "公开投资方档案及当前官网",
|
||||
"notes": "当前任务/买方可分类但AI方法/能力、注册、真实合同/净费、付费与留存未独立核;标价/市场机会/候补/创作者收入不作ARR。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR006R-C11",
|
||||
"SRCLOSE1-SR006R-C11"
|
||||
],
|
||||
"revenueStatus": "unknown",
|
||||
"classificationBasis": "营销交付C06、个人互动C09、可玩内容创作C08、建设/农业专门任务C07,软件/人协同/采购渠道和计费分母分开,不按客户行业或投资标签当技术实测。",
|
||||
"technicalReview": {
|
||||
"level": "description",
|
||||
"reviewedAt": "2026-11-01",
|
||||
"summary": "仅官网/投资方当前任务核对,未运行产品/账号、投稿/生成或连接真实数据;声明/演示不当独立测试、已付款或法律/监管审查。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR006R-C11",
|
||||
"SRCLOSE1-SR006R-C11"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "AI220",
|
||||
"name": "Vereda",
|
||||
"url": "https://www.vereda.ia.br/",
|
||||
"channel": "S14",
|
||||
"cat": "C07",
|
||||
"year": 2025,
|
||||
"team": 8,
|
||||
"location": "Rio Verde, Brazil(投资方资料)",
|
||||
"business": "农业采购Agent渠道,WhatsApp助手与田间顾问连接农户和制造商。",
|
||||
"buyer": "农户使用;供应商/伙伴为报酬关系方",
|
||||
"delivery": "厂家直接开票交货,平台不库存/转售;助手和顾问共同服务",
|
||||
"price": "农户免费无月费/平台费,平台与供应商/伙伴报酬未知,不猜抽佣",
|
||||
"businessModel": "供应商支持的采购渠道+助手/人工服务,净报酬/退货争议、人员和模型成本待核",
|
||||
"entityBasis": "官网VEREDA LTDA自述,精确登记编号/实际供应商合同未核",
|
||||
"stage": "厂家直接开票交货,平台不库存/转售;助手和顾问共同服务",
|
||||
"cohort": "投资方自报2025成立,独立注册/品牌起点待核",
|
||||
"teamBasis": "公开档案人数,2026-11-01读取,统计截至日未知",
|
||||
"sourceType": "公开投资方档案及当前官网",
|
||||
"notes": "当前任务/买方可分类但AI方法/能力、注册、真实合同/净费、付费与留存未独立核;标价/市场机会/候补/创作者收入不作ARR。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR006R-C57",
|
||||
"SRCLOSE1-SR006R-C57"
|
||||
],
|
||||
"revenueStatus": "unknown",
|
||||
"classificationBasis": "营销交付C06、个人互动C09、可玩内容创作C08、建设/农业专门任务C07,软件/人协同/采购渠道和计费分母分开,不按客户行业或投资标签当技术实测。",
|
||||
"technicalReview": {
|
||||
"level": "description",
|
||||
"reviewedAt": "2026-11-01",
|
||||
"summary": "仅官网/投资方当前任务核对,未运行产品/账号、投稿/生成或连接真实数据;声明/演示不当独立测试、已付款或法律/监管审查。",
|
||||
"evidenceIds": [
|
||||
"SRPRO1-P-SR006R-C57",
|
||||
"SRCLOSE1-SR006R-C57"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
@@ -105237,7 +105417,7 @@
|
||||
},
|
||||
{
|
||||
"id": "SRPRO1-P-SR005R-C19",
|
||||
"companyId": null,
|
||||
"companyId": "AI216",
|
||||
"title": "doublespeed公开独立档案:成立/团队字段",
|
||||
"url": "https://speedrun.a16z.com/companies/doublespeed",
|
||||
"publishedAt": null,
|
||||
@@ -105545,7 +105725,7 @@
|
||||
},
|
||||
{
|
||||
"id": "SRPRO1-P-SR005R-C49",
|
||||
"companyId": null,
|
||||
"companyId": "AI217",
|
||||
"title": "SoulLink公开独立档案:成立/团队字段",
|
||||
"url": "https://speedrun.a16z.com/companies/soullink",
|
||||
"publishedAt": null,
|
||||
@@ -105611,7 +105791,7 @@
|
||||
},
|
||||
{
|
||||
"id": "SRPRO1-P-SR005R-C55",
|
||||
"companyId": null,
|
||||
"companyId": "AI218",
|
||||
"title": "Variant公开独立档案:成立/团队字段",
|
||||
"url": "https://speedrun.a16z.com/companies/variant",
|
||||
"publishedAt": null,
|
||||
@@ -105765,7 +105945,7 @@
|
||||
},
|
||||
{
|
||||
"id": "SRPRO1-P-SR006R-C11",
|
||||
"companyId": null,
|
||||
"companyId": "AI219",
|
||||
"title": "Cascade公开独立档案:成立/团队字段",
|
||||
"url": "https://speedrun.a16z.com/companies/cascade",
|
||||
"publishedAt": null,
|
||||
@@ -106194,7 +106374,7 @@
|
||||
},
|
||||
{
|
||||
"id": "SRPRO1-P-SR006R-C57",
|
||||
"companyId": null,
|
||||
"companyId": "AI220",
|
||||
"title": "Vereda公开独立档案:成立/团队字段",
|
||||
"url": "https://speedrun.a16z.com/companies/vereda",
|
||||
"publishedAt": null,
|
||||
@@ -108380,6 +108560,259 @@
|
||||
"kind": "公司公开产品/收费/合同范围核对",
|
||||
"summary": "2026-10-18政策提示/源材料送第三方语言/TTS服务,音频存储用于回听,默认账户内、主动分享后链接持有人可听;不训练自家通用模型。",
|
||||
"limitation": "禁通用模型训练不等零外传/零存储,连接个人助手会有另外资料范围,未授权/输入文件或他人声音;实际安全/删除未经独立测试。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C08",
|
||||
"companyId": null,
|
||||
"title": "Atrios 当前交付/官网缺项收尾核对",
|
||||
"url": "https://www.atrios.com",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "现官网为Ace工具/优惠推荐、连接个人助手与有偿人际引荐;AI供应商标签和MCP连接本身不证核心AI由Atrios提供,具体AI任务/人工比例、引荐费/分账及当前合同未知,保留主营待核。免费249价值诊断/奖励和客户节省非平台收入。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP响应SHA256 b814c8bec8148c86fb7627ca8c26419fd56a3fe5097189822f29979638e5579d,115916字节。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C12",
|
||||
"companyId": null,
|
||||
"title": "bins 当前交付/官网缺项收尾核对",
|
||||
"url": "https://joinbins.com/app",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "普通HTTP403但浏览器可读其App Store:Bins Inc.二手P2P市场、照片创建商品/个性推荐、免费入口。具体AI实现/平台佣金未明,保留主营待核;实物交易总额/评分和免费应用不代净费或零收入。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP: HTTP Error 403: Forbidden;浏览器补读/限制按摘要保留,不据读取失败判停业。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C16",
|
||||
"companyId": null,
|
||||
"title": "Creed 当前交付/官网缺项收尾核对",
|
||||
"url": "https://speedrun.a16z.com/companies/creed",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "档案官网字段为空,仅有Creed Labs语音AI工作室/首产品自述;500K+用户、正单位经济无日期/付费/成本底表。缺当前独立产品网址和具体交付/收费,保留待核,不猜同名网址或推MRR。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 仅复核已读投资方档案官网/简介字段,未编造外部产品网址。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C19",
|
||||
"companyId": "AI216",
|
||||
"title": "doublespeed 当前交付/官网缺项收尾核对",
|
||||
"url": "https://doublespeed.ai",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "官网当前AI社交内容/托管账号运营及人工微调与档案一致,关联客户运营;具体价格、实收/平台分账及人工/内容/账号维护成本未公开,仅业务分类不搭建自动账号或推广。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP响应SHA256 40e4bb82663ab983257557916ea6f1c9a57a0f307ca04e5b967995ab102f9ab7,202590字节。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C30",
|
||||
"companyId": null,
|
||||
"title": "Lekondo 当前交付/官网缺项收尾核对",
|
||||
"url": "https://lekondo.com",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "普通HTTP403,浏览器当前官网可读服装审美/ontology研究及商店/应用入口,AI具体任务和商业交付未明。保留主营待核,不把服装研究/AI投资批次当AI营收或从抓取失败推停业。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP: HTTP Error 403: Forbidden;浏览器补读/限制按摘要保留,不据读取失败判停业。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C34",
|
||||
"companyId": null,
|
||||
"title": "Luvu 当前交付/官网缺项收尾核对",
|
||||
"url": "https://withbasis.co/",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "withbasis.co HTTP200仅JavaScript解包提示,浏览抓取超时;原Luvu档案标题为Basis/The Human Foundation behind Frontier AI,当前品牌/主体及具体交付未核。未执行包或借同名Basis公司,保留待核。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP响应SHA256 9046ef0911d2d14d56008ab7ae5d2f90bd1ab6d01b13b99b51f360b205d0d21b,874749字节。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C40",
|
||||
"companyId": null,
|
||||
"title": "Ocoder 当前交付/官网缺项收尾核对",
|
||||
"url": "https://speedrun.a16z.com/companies/ocoder",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "档案官网字段为空,原述非技术人员在真实代码库构建/共享方案工具;具体当前产品/代码权限/收费与法律主体未核。保留待核,不猜同名Ocoder网址或以vibe coding标签推现有交付。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 仅复核已读投资方档案官网/简介字段,未编造外部产品网址。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C41",
|
||||
"companyId": null,
|
||||
"title": "Oleum 当前交付/官网缺项收尾核对",
|
||||
"url": "https://speedrun.a16z.com/companies/oleum",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "档案官网字段为空,原述AI数据交互和未来基础设施愿景;具体当前产品、客户和收费未知。保留待核,不将未来通用层愿景当当前服务或关联同名能源公司。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 仅复核已读投资方档案官网/简介字段,未编造外部产品网址。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C43",
|
||||
"companyId": null,
|
||||
"title": "Prepp 当前交付/官网缺项收尾核对",
|
||||
"url": "https://speedrun.a16z.com/companies/prepp",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "档案官网字段为空,教育内容/批改/出勤模块为自述,当前AI方法/实际产品和学校采购未核。保留待核,不收集学生资料或把教育任务自动当AI已交付。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 仅复核已读投资方档案官网/简介字段,未编造外部产品网址。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C49",
|
||||
"companyId": "AI217",
|
||||
"title": "SoulLink 当前交付/官网缺项收尾核对",
|
||||
"url": "https://soullink.io",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "官网当前3D AI陪伴/交互记忆及beta入口与原档案对应,关联个人应用;Sept2026上线为厂商标注,实际可用/付费/留存与渲染、模型、记忆/支持成本未知,未下载或互动。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP响应SHA256 d7c6d38f7d7988f4472819672480efd1c6e5aecdf213cf19d64bda06ea1d70b6,32979字节。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C50",
|
||||
"companyId": null,
|
||||
"title": "Sounding 当前交付/官网缺项收尾核对",
|
||||
"url": "https://speedrun.a16z.com/companies/sounding",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "官网字段为linkedin.com/in/notavailable占位而非有效产品网址;档案Sounding描述Pelago语音wellness品牌,当前品牌/主体/具体AI产品未对应。保留待核,不借其他同名Pelago及前公司数据。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 仅复核已读投资方档案官网/简介字段,未编造外部产品网址。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C55",
|
||||
"companyId": "AI218",
|
||||
"title": "Variant 当前交付/官网缺项收尾核对",
|
||||
"url": "https://www.tryvariant.ai/",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "原tryvariant.ai重定向tryvariant.com,当前文本/梗图到可玩小游戏、remix社区beta与AI档案任务对应;同名SR006 Variant-now不合并,收费/实际生成、留存和创作者分账未知。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP响应SHA256 80a335be4a8a00171fc04b7338ac89ec9764f204172bc7db742ed05482c42d75,59112字节。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR005R-C56",
|
||||
"companyId": null,
|
||||
"title": "Vega 当前交付/官网缺项收尾核对",
|
||||
"url": "https://joinvega.com",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "joinvega.com普通HTTP403且浏览抓取不可访问,原AI关系notes/social-orbits任务自述未获当前交付核对。保留待核,不抓联系人/关系图或关联其他同名Vega,不把社交数据量作收入。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP: HTTP Error 403: Forbidden;浏览器补读/限制按摘要保留,不据读取失败判停业。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR006R-C11",
|
||||
"companyId": "AI219",
|
||||
"title": "Cascade 当前交付/官网缺项收尾核对",
|
||||
"url": "https://usecascade.ai/",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "普通HTTP403但浏览可读当前AEC企业RFP发现、提案/规范分析,区别原建设项目预测愿景。部分功能LIVE、其他SOON分列;120M机会额、客户营业额/示例项目非Cascade收入,关联行业应用。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP: HTTP Error 403: Forbidden;浏览器补读/限制按摘要保留,不据读取失败判停业。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR006R-C14",
|
||||
"companyId": null,
|
||||
"title": "Coalition Systems 当前交付/官网缺项收尾核对",
|
||||
"url": "https://www.coalition.systems",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "现官网为国防/公共安全生态安全通信、协作和决策支持,未明确自身具体AI任务;创始AI研究背景不当产品AI证据,保留待核。仅商业任务分类,不收录操作/目标识别等实现。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP响应SHA256 3887ba645f6b2fe23e98756b57fb27be4caf96fbe8b45aee189fc50c3c26e9a4,634900字节。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR006R-C30",
|
||||
"companyId": null,
|
||||
"title": "Oasiz 当前交付/官网缺项收尾核对",
|
||||
"url": "https://www.oasiz.ai/",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "oasiz.ai普通HTTP403,浏览指向gobadger.app而无法读取,原游戏社交/AI创作分发和新品牌关系未核。9K小时/300K plays/7M视频观看及创始人旧应用不是平台收入,保留身份/AI交付待核。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP: HTTP Error 403: Forbidden;浏览器补读/限制按摘要保留,不据读取失败判停业。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR006R-C33",
|
||||
"companyId": null,
|
||||
"title": "PartyHat 当前交付/官网缺项收尾核对",
|
||||
"url": "https://speedrun.a16z.com/companies/partyhat",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "独立档案公司简介和官网字段均为空,仅自报2025两人,不足以判断AI主营/产品/收费。保留待核,不从PartyHat名字/批次猜业务、域名或收入。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 仅复核已读投资方档案官网/简介字段,未编造外部产品网址。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR006R-C45",
|
||||
"companyId": null,
|
||||
"title": "Simula 当前交付/官网缺项收尾核对",
|
||||
"url": "https://simula.ad",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "当前官网仅广告平台、联系入口及动态轮播计数,AI格式/真实商业交付未明;原5M DAU/100M下载是待接入应用覆盖,约10M net revenue at full rollout为情景/未全部上线,不作已实现净费或ARR,保留待核。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP响应SHA256 c0f392eda874179ac8b2d6adf4790868eae5761be925f6f3e91c79206d42118f,49121字节。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR006R-C48",
|
||||
"companyId": null,
|
||||
"title": "snag 当前交付/官网缺项收尾核对",
|
||||
"url": "https://snagsublets.com/",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "现官网真实租赁/转租房源市场可读,但原社交帖转换/匹配的专用AI当前未获具体佐证,保留待核。原6.5M/30天是requests金额,页面租金/用户节省及房源数量不是平台成交/收入,具体收费未知。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP响应SHA256 b6820f40072ec315ccadd50d402043f6a86288b57d8ff9ec05bae1c469288705,205538字节。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SR006R-C57",
|
||||
"companyId": "AI220",
|
||||
"title": "Vereda 当前交付/官网缺项收尾核对",
|
||||
"url": "https://www.vereda.ia.br/",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已列候选的有限官网/品牌/缺项核对",
|
||||
"summary": "官网Vera WhatsApp采购及田间顾问与原投资方采购Agent任务对应;厂家直接开票交货、不库存转售、农户无月费/平台费,供应商/伙伴报酬未知。关联行业应用;实际AI方法/合同未独立核,不把采购GMV/农户节省作收入。",
|
||||
"limitation": "本轮有限公开核对,不登录、执行前端包、提交表单或购买;实际注册/合同、净费及效果未核。 普通HTTP响应SHA256 2bbe739276d54360dad91a9db292cd4297e048ba7a4755962062492d4e69ff57,271759字节。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-CREED-USERS",
|
||||
"companyId": null,
|
||||
"title": "CREED-USERS 财务范围排除",
|
||||
"url": "https://speedrun.a16z.com/companies/creed",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已读投资方档案财务口径收尾复核",
|
||||
"summary": "原Creed档案500K+用户/每周倍增/正单位经济仅采用与成本判断自述,非付费人数/净收入;官网缺失,未核期日、分母、人工和推理/渠道成本,不作ARR。",
|
||||
"limitation": "不以预测/用户/请求体量、合作方数据或不明确净额增加财务观测,候选引用保留原档案证据。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SIMULA-ROLLOUT",
|
||||
"companyId": null,
|
||||
"title": "SIMULA-ROLLOUT 财务范围排除",
|
||||
"url": "https://speedrun.a16z.com/companies/simula",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已读投资方档案财务口径收尾复核",
|
||||
"summary": "原约10M+ net revenue明确at full rollout,且5M+DAU/100M+下载是待集成应用覆盖。保留情景/接入范围,未给实际上线量/净费、币种和指标日,不纳收入样本。",
|
||||
"limitation": "不以预测/用户/请求体量、合作方数据或不明确净额增加财务观测,候选引用保留原档案证据。"
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-SNAG-REQUESTS",
|
||||
"companyId": null,
|
||||
"title": "SNAG-REQUESTS 财务范围排除",
|
||||
"url": "https://speedrun.a16z.com/companies/snag",
|
||||
"publishedAt": null,
|
||||
"accessedAt": "2026-11-01",
|
||||
"kind": "已读投资方档案财务口径收尾复核",
|
||||
"summary": "原6.5M requests in last30days,增长40%/月和3K房源为自报;请求价值非已成交租赁/净平台收入。需真实履约/收费/退款、币种/财务日及AI交付,不推ARR。",
|
||||
"limitation": "不以预测/用户/请求体量、合作方数据或不明确净额增加财务观测,候选引用保留原档案证据。"
|
||||
}
|
||||
],
|
||||
"reviews": [
|
||||
@@ -119859,6 +120292,106 @@
|
||||
"companyIds": [
|
||||
"AI212"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-R-PASS",
|
||||
"type": "剩余初始候选的逐条公开核对",
|
||||
"company": "本轮20个已有候选",
|
||||
"scope": "dataset",
|
||||
"summary": "对仍有初始备注20项做有限当前核对:14官网入口、6缺有效产品网址;官网普通HTTP/浏览结果和品牌变化/缺项逐项存证,5项关联、15项保留。",
|
||||
"handling": "不再扩源或按标签/批次补AI主营。所有20条初始通用备注已替换具体访问/当前产品或缺字段;已明确未决项不无限重试,不宣称全部注册/技术/财务已独立验证。",
|
||||
"evidenceIds": [
|
||||
"SRCLOSE1-SR005R-C08",
|
||||
"SRCLOSE1-SR005R-C12",
|
||||
"SRCLOSE1-SR005R-C16",
|
||||
"SRCLOSE1-SR005R-C19",
|
||||
"SRCLOSE1-SR005R-C30",
|
||||
"SRCLOSE1-SR005R-C34",
|
||||
"SRCLOSE1-SR005R-C40",
|
||||
"SRCLOSE1-SR005R-C41",
|
||||
"SRCLOSE1-SR005R-C43",
|
||||
"SRCLOSE1-SR005R-C49",
|
||||
"SRCLOSE1-SR005R-C50",
|
||||
"SRCLOSE1-SR005R-C55",
|
||||
"SRCLOSE1-SR005R-C56",
|
||||
"SRCLOSE1-SR006R-C11",
|
||||
"SRCLOSE1-SR006R-C14",
|
||||
"SRCLOSE1-SR006R-C30",
|
||||
"SRCLOSE1-SR006R-C33",
|
||||
"SRCLOSE1-SR006R-C45",
|
||||
"SRCLOSE1-SR006R-C48",
|
||||
"SRCLOSE1-SR006R-C57"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-R-NOURL",
|
||||
"type": "官网/具体产品缺项",
|
||||
"company": "Creed、Ocoder、Oleum、Prepp、Sounding、PartyHat",
|
||||
"scope": "excluded-candidate",
|
||||
"summary": "六项没有有效产品网址:五项空字段,一项LinkedIn占位;PartyHat简介亦空,Sounding/Pelago品牌对应未知。",
|
||||
"handling": "仅原档案自报年份/人数与已有任务描述,不猜域名/同名主体或从未读官网推不存在/零收入;保留待核入口和具体所需资料。",
|
||||
"evidenceIds": [
|
||||
"SRCLOSE1-SR005R-C16",
|
||||
"SRCLOSE1-SR005R-C40",
|
||||
"SRCLOSE1-SR005R-C41",
|
||||
"SRCLOSE1-SR005R-C43",
|
||||
"SRCLOSE1-SR005R-C50",
|
||||
"SRCLOSE1-SR006R-C33"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-R-NONINCOME",
|
||||
"type": "采用量、预测和请求不是平台收入",
|
||||
"company": "未决候选及品牌/访问限制",
|
||||
"scope": "excluded-candidate",
|
||||
"summary": "Simula约10M为全上线情景、合作应用DAU/下载非自身付费;snag6.5M为请求价值;Creed500K用户和正单位经济未给底表。其余当前AI/品牌/可访问性逐项分列。",
|
||||
"handling": "原495经营观测不变,未决候选不生成公司或收入。Atrios供应商AI/MCP、Coalition研究背景、Bins照片商品化及Simula服务AI客户不足以自动确认自身AI方法;访问失败/JS包装或品牌重定向不判停业/造假。",
|
||||
"evidenceIds": [
|
||||
"SRCLOSE1-CREED-USERS",
|
||||
"SRCLOSE1-SIMULA-ROLLOUT",
|
||||
"SRCLOSE1-SNAG-REQUESTS",
|
||||
"SRCLOSE1-SR005R-C08",
|
||||
"SRCLOSE1-SR005R-C12",
|
||||
"SRCLOSE1-SR005R-C34",
|
||||
"SRCLOSE1-SR006R-C14",
|
||||
"SRCLOSE1-SR006R-C30"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "SRCLOSE1-R-CLASSIFIED",
|
||||
"type": "当前交付、未来功能和同名去重",
|
||||
"company": "doublespeed、SoulLink、Variant、Cascade、Vereda",
|
||||
"scope": "companies",
|
||||
"summary": "五项当前官网与AI产品任务自述对应;Cascade改以RFP/提案及LIVE/SOON分列,Variant.ai→.com且不误并Variant-now,Vereda厂家直开票/交货和人工顾问明确。",
|
||||
"handling": "只有description,不能把营销账号/三维演示、beta/上线标注、客户工程机会或采购节省当性能/净收入。具体收费、平台/创作者/厂商分账、人工和模型/运行成本待真实合同核。",
|
||||
"evidenceIds": [
|
||||
"SRCLOSE1-SR005R-C19",
|
||||
"SRCLOSE1-SR005R-C49",
|
||||
"SRCLOSE1-SR005R-C55",
|
||||
"SRCLOSE1-SR006R-C11",
|
||||
"SRCLOSE1-SR006R-C57"
|
||||
],
|
||||
"companyIds": [
|
||||
"AI216",
|
||||
"AI217",
|
||||
"AI218",
|
||||
"AI219",
|
||||
"AI220"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "MODEL1-AGRI-DIRECT",
|
||||
"type": "商业模式初评",
|
||||
"company": "农户免费+供应商支持的采购渠道",
|
||||
"scope": "companies",
|
||||
"summary": "已核事实:Vereda的采购助手与田间顾问服务农户,厂家开票/交货,平台不库存转售;农户无月费/平台费,报酬关联供应商/伙伴但实价未知。",
|
||||
"handling": "待验证判断:先核谁付费、合同报酬与实际采购履约/退货分账,再记顾问/供应商接入、模型/文件处理、售后争议和获客成本。渠道净报酬、商品GMV及融资/信用服务分开,向供应商收款与农户复购需同时支持;免费农户不等零平台收入,不猜抽佣或按GMV当ARR。",
|
||||
"evidenceIds": [
|
||||
"SRCLOSE1-SR006R-C57"
|
||||
],
|
||||
"companyIds": [
|
||||
"AI220"
|
||||
]
|
||||
}
|
||||
],
|
||||
"coverage": {
|
||||
@@ -136103,7 +136636,7 @@
|
||||
"sourceId": "S14",
|
||||
"url": "https://speedrun.a16z.com/api/companies/companyparams?limit=100&offset=0&cohort=SR005",
|
||||
"accessedAt": "2026-11-01",
|
||||
"scope": "公开有限名单59项;22关联、21旧年、1既有超年、0品牌/年份待核、15当前AI/主体待核。机器人评估/硬件、Agent测试、模型后训练与工作助手按具体交付关联,原位置/URL和证据保留;名单不等独立技术/财务验收。",
|
||||
"scope": "公开有限名单59项;25关联、21旧年、1既有超年、0品牌/年份待核、12当前AI/主体待核。本轮补完初始通用备注为具体官网/字段/身份及收入缺项;保留未决并非全部产品/财务独立验证。",
|
||||
"complete": false,
|
||||
"records": [
|
||||
{
|
||||
@@ -136224,9 +136757,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C08"
|
||||
"SRPRO1-P-SR005R-C08",
|
||||
"SRCLOSE1-SR005R-C08"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、10人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "现官网为Ace工具/优惠推荐、连接个人助手与有偿人际引荐;AI供应商标签和MCP连接本身不证核心AI由Atrios提供,具体AI任务/人工比例、引荐费/分账及当前合同未知,保留主营待核。免费249价值诊断/奖励和客户节省非平台收入。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C09",
|
||||
@@ -136285,9 +136819,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C12"
|
||||
"SRPRO1-P-SR005R-C12",
|
||||
"SRCLOSE1-SR005R-C12"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、3人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "普通HTTP403但浏览器可读其App Store:Bins Inc.二手P2P市场、照片创建商品/个性推荐、免费入口。具体AI实现/平台佣金未明,保留主营待核;实物交易总额/评分和免费应用不代净费或零收入。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C13",
|
||||
@@ -136343,9 +136878,11 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C16"
|
||||
"SRPRO1-P-SR005R-C16",
|
||||
"SRCLOSE1-SR005R-C16",
|
||||
"SRCLOSE1-CREED-USERS"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、4人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "档案官网字段为空,仅有Creed Labs语音AI工作室/首产品自述;500K+用户、正单位经济无日期/付费/成本底表。缺当前独立产品网址和具体交付/收费,保留待核,不猜同名网址或推MRR。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C17",
|
||||
@@ -136388,15 +136925,17 @@
|
||||
"id": "SR005R-C19",
|
||||
"name": "doublespeed",
|
||||
"url": "https://speedrun.a16z.com/companies/doublespeed",
|
||||
"categoryId": "C00",
|
||||
"categoryId": "C06",
|
||||
"kind": "company",
|
||||
"profileStatus": "readable",
|
||||
"status": "pending-ai",
|
||||
"status": "linked",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C19"
|
||||
"SRPRO1-P-SR005R-C19",
|
||||
"SRCLOSE1-SR005R-C19"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、11人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "官网当前AI社交内容/托管账号运营及人工微调与档案一致,关联客户运营;具体价格、实收/平台分账及人工/内容/账号维护成本未公开,仅业务分类不搭建自动账号或推广。",
|
||||
"companyId": "AI216"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C20",
|
||||
@@ -136570,9 +137109,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C30"
|
||||
"SRPRO1-P-SR005R-C30",
|
||||
"SRCLOSE1-SR005R-C30"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、6人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "普通HTTP403,浏览器当前官网可读服装审美/ontology研究及商店/应用入口,AI具体任务和商业交付未明。保留主营待核,不把服装研究/AI投资批次当AI营收或从抓取失败推停业。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C31",
|
||||
@@ -136633,9 +137173,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C34"
|
||||
"SRPRO1-P-SR005R-C34",
|
||||
"SRCLOSE1-SR005R-C34"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、5人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "withbasis.co HTTP200仅JavaScript解包提示,浏览抓取超时;原Luvu档案标题为Basis/The Human Foundation behind Frontier AI,当前品牌/主体及具体交付未核。未执行包或借同名Basis公司,保留待核。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C35",
|
||||
@@ -136719,9 +137260,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C40"
|
||||
"SRPRO1-P-SR005R-C40",
|
||||
"SRCLOSE1-SR005R-C40"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、3人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "档案官网字段为空,原述非技术人员在真实代码库构建/共享方案工具;具体当前产品/代码权限/收费与法律主体未核。保留待核,不猜同名Ocoder网址或以vibe coding标签推现有交付。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C41",
|
||||
@@ -136733,9 +137275,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C41"
|
||||
"SRPRO1-P-SR005R-C41",
|
||||
"SRCLOSE1-SR005R-C41"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、5人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "档案官网字段为空,原述AI数据交互和未来基础设施愿景;具体当前产品、客户和收费未知。保留待核,不将未来通用层愿景当当前服务或关联同名能源公司。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C42",
|
||||
@@ -136765,9 +137308,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C43"
|
||||
"SRPRO1-P-SR005R-C43",
|
||||
"SRCLOSE1-SR005R-C43"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、5人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "档案官网字段为空,教育内容/批改/出勤模块为自述,当前AI方法/实际产品和学校采购未核。保留待核,不收集学生资料或把教育任务自动当AI已交付。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C44",
|
||||
@@ -136849,15 +137393,17 @@
|
||||
"id": "SR005R-C49",
|
||||
"name": "SoulLink",
|
||||
"url": "https://speedrun.a16z.com/companies/soullink",
|
||||
"categoryId": "C00",
|
||||
"categoryId": "C09",
|
||||
"kind": "company",
|
||||
"profileStatus": "readable",
|
||||
"status": "pending-ai",
|
||||
"status": "linked",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C49"
|
||||
"SRPRO1-P-SR005R-C49",
|
||||
"SRCLOSE1-SR005R-C49"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、6人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "官网当前3D AI陪伴/交互记忆及beta入口与原档案对应,关联个人应用;Sept2026上线为厂商标注,实际可用/付费/留存与渲染、模型、记忆/支持成本未知,未下载或互动。",
|
||||
"companyId": "AI217"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C50",
|
||||
@@ -136869,9 +137415,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C50"
|
||||
"SRPRO1-P-SR005R-C50",
|
||||
"SRCLOSE1-SR005R-C50"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、1人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "官网字段为linkedin.com/in/notavailable占位而非有效产品网址;档案Sounding描述Pelago语音wellness品牌,当前品牌/主体/具体AI产品未对应。保留待核,不借其他同名Pelago及前公司数据。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C51",
|
||||
@@ -136944,15 +137491,17 @@
|
||||
"id": "SR005R-C55",
|
||||
"name": "Variant",
|
||||
"url": "https://speedrun.a16z.com/companies/variant",
|
||||
"categoryId": "C00",
|
||||
"categoryId": "C08",
|
||||
"kind": "company",
|
||||
"profileStatus": "readable",
|
||||
"status": "pending-ai",
|
||||
"status": "linked",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C55"
|
||||
"SRPRO1-P-SR005R-C55",
|
||||
"SRCLOSE1-SR005R-C55"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、5人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "原tryvariant.ai重定向tryvariant.com,当前文本/梗图到可玩小游戏、remix社区beta与AI档案任务对应;同名SR006 Variant-now不合并,收费/实际生成、留存和创作者分账未知。",
|
||||
"companyId": "AI218"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C56",
|
||||
@@ -136964,9 +137513,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR005-ROSTER",
|
||||
"SRPRO1-P-SR005R-C56"
|
||||
"SRPRO1-P-SR005R-C56",
|
||||
"SRCLOSE1-SR005R-C56"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、2人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "joinvega.com普通HTTP403且浏览抓取不可访问,原AI关系notes/social-orbits任务自述未获当前交付核对。保留待核,不抓联系人/关系图或关联其他同名Vega,不把社交数据量作收入。"
|
||||
},
|
||||
{
|
||||
"id": "SR005R-C57",
|
||||
@@ -137017,7 +137567,7 @@
|
||||
"sourceId": "S14",
|
||||
"url": "https://speedrun.a16z.com/api/companies/companyparams?limit=100&offset=0&cohort=SR006",
|
||||
"accessedAt": "2026-11-01",
|
||||
"scope": "公开SR006有限名单59项;39关联、5旧年、0既有超年、3品牌/年份待核、12当前AI/主体待核。照片/健康/体育/高校/音频任务关联,PicPet真实应用/订阅可读但AI仍缺;原位置/URL/证据保留。",
|
||||
"scope": "公开有限名单59项;41关联、5旧年、0既有超年、3品牌/年份待核、10当前AI/主体待核。本轮补完初始通用备注为具体官网/字段/身份及收入缺项;保留未决并非全部产品/财务独立验证。",
|
||||
"complete": false,
|
||||
"records": [
|
||||
{
|
||||
@@ -137195,15 +137745,17 @@
|
||||
"id": "SR006R-C11",
|
||||
"name": "Cascade",
|
||||
"url": "https://speedrun.a16z.com/companies/cascade",
|
||||
"categoryId": "C00",
|
||||
"categoryId": "C07",
|
||||
"kind": "company",
|
||||
"profileStatus": "readable",
|
||||
"status": "pending-ai",
|
||||
"status": "linked",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR006-ROSTER",
|
||||
"SRPRO1-P-SR006R-C11"
|
||||
"SRPRO1-P-SR006R-C11",
|
||||
"SRCLOSE1-SR006R-C11"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、2人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "普通HTTP403但浏览可读当前AEC企业RFP发现、提案/规范分析,区别原建设项目预测愿景。部分功能LIVE、其他SOON分列;120M机会额、客户营业额/示例项目非Cascade收入,关联行业应用。",
|
||||
"companyId": "AI219"
|
||||
},
|
||||
{
|
||||
"id": "SR006R-C12",
|
||||
@@ -137250,9 +137802,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR006-ROSTER",
|
||||
"SRPRO1-P-SR006R-C14"
|
||||
"SRPRO1-P-SR006R-C14",
|
||||
"SRCLOSE1-SR006R-C14"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、4人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "现官网为国防/公共安全生态安全通信、协作和决策支持,未明确自身具体AI任务;创始AI研究背景不当产品AI证据,保留待核。仅商业任务分类,不收录操作/目标识别等实现。"
|
||||
},
|
||||
{
|
||||
"id": "SR006R-C15",
|
||||
@@ -137512,9 +138065,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR006-ROSTER",
|
||||
"SRPRO1-P-SR006R-C30"
|
||||
"SRPRO1-P-SR006R-C30",
|
||||
"SRCLOSE1-SR006R-C30"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、4人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "oasiz.ai普通HTTP403,浏览指向gobadger.app而无法读取,原游戏社交/AI创作分发和新品牌关系未核。9K小时/300K plays/7M视频观看及创始人旧应用不是平台收入,保留身份/AI交付待核。"
|
||||
},
|
||||
{
|
||||
"id": "SR006R-C31",
|
||||
@@ -137555,9 +138109,10 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR006-ROSTER",
|
||||
"SRPRO1-P-SR006R-C33"
|
||||
"SRPRO1-P-SR006R-C33",
|
||||
"SRCLOSE1-SR006R-C33"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、2人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "独立档案公司简介和官网字段均为空,仅自报2025两人,不足以判断AI主营/产品/收费。保留待核,不从PartyHat名字/批次猜业务、域名或收入。"
|
||||
},
|
||||
{
|
||||
"id": "SR006R-C34",
|
||||
@@ -137763,9 +138318,11 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR006-ROSTER",
|
||||
"SRPRO1-P-SR006R-C45"
|
||||
"SRPRO1-P-SR006R-C45",
|
||||
"SRCLOSE1-SR006R-C45",
|
||||
"SRCLOSE1-SIMULA-ROLLOUT"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、5人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "当前官网仅广告平台、联系入口及动态轮播计数,AI格式/真实商业交付未明;原5M DAU/100M下载是待接入应用覆盖,约10M net revenue at full rollout为情景/未全部上线,不作已实现净费或ARR,保留待核。"
|
||||
},
|
||||
{
|
||||
"id": "SR006R-C46",
|
||||
@@ -137808,9 +138365,11 @@
|
||||
"status": "pending-ai",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR006-ROSTER",
|
||||
"SRPRO1-P-SR006R-C48"
|
||||
"SRPRO1-P-SR006R-C48",
|
||||
"SRCLOSE1-SR006R-C48",
|
||||
"SRCLOSE1-SNAG-REQUESTS"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、4人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "现官网真实租赁/转租房源市场可读,但原社交帖转换/匹配的专用AI当前未获具体佐证,保留待核。原6.5M/30天是requests金额,页面租金/用户节省及房源数量不是平台成交/收入,具体收费未知。"
|
||||
},
|
||||
{
|
||||
"id": "SR006R-C49",
|
||||
@@ -137960,15 +138519,17 @@
|
||||
"id": "SR006R-C57",
|
||||
"name": "Vereda",
|
||||
"url": "https://speedrun.a16z.com/companies/vereda",
|
||||
"categoryId": "C00",
|
||||
"categoryId": "C07",
|
||||
"kind": "company",
|
||||
"profileStatus": "readable",
|
||||
"status": "pending-ai",
|
||||
"status": "linked",
|
||||
"evidenceIds": [
|
||||
"SRALL1-SR006-ROSTER",
|
||||
"SRPRO1-P-SR006R-C57"
|
||||
"SRPRO1-P-SR006R-C57",
|
||||
"SRCLOSE1-SR006R-C57"
|
||||
],
|
||||
"note": "已读独立档案,自报Founded 2025、8人;年份自报已取得,当前官网/AI主营和精确主体尚待人工复核,不把AI标签直接当业务成立。"
|
||||
"note": "官网Vera WhatsApp采购及田间顾问与原投资方采购Agent任务对应;厂家直接开票交货、不库存转售、农户无月费/平台费,供应商/伙伴报酬未知。关联行业应用;实际AI方法/合同未独立核,不把采购GMV/农户节省作收入。",
|
||||
"companyId": "AI220"
|
||||
},
|
||||
{
|
||||
"id": "SR006R-C58",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "2026-11-01-sr-learning-health-1",
|
||||
"version": "2026-11-01-source-closeout-1",
|
||||
"scopeConfirmedAt": "2026-10-30",
|
||||
"acceptance": "以确认的公开来源清单为边界,逐条核对并标明缺项。",
|
||||
"provenance": "S01—S12恢复自已提交用户的《AI公司研究_来源与分类模板》来源清单;S13—S16单列后续已使用的补充证据渠道,不将使用次数当作全量覆盖。",
|
||||
@@ -3040,8 +3040,8 @@
|
||||
"speedrun.a16z.com"
|
||||
],
|
||||
"initialAccess": "见具体证据访问记录",
|
||||
"boundary": "公开七批321唯一位置及原HTML/GET审计保留;226补读档案中138旧年、88自报两年:54已补官网关联、29当前AI/主体待核、5品牌/年份待核。本系列311独立档案已读,10复用未本轮重读。七批134关联、1既有超年、145旧年、6品牌/年份、35当前AI/交付待核。新增Auto/Clair/Snapp/Straia/SUN,PicPet应用/订阅存在但AI任务待核。新增21证据和两条Clair原始财务声明,均排除比较;原493、ARR/MRR及YC覆盖保留。免费/购买未开、2027预订、D2C标签和B2B签约/用户留存分列,不当当前ARR/独立能力或临床认证。",
|
||||
"nextCheck": "继续29个新批次及SR007六个主营待核、10复用变化;核成立/品牌/注册及实际合同。Clair两渠道期间/财务日、预订/交货退款和软件促销转费,Auto当前Photos与旧Frames、Snapp条款/收费和自有榜,Straia机构采购/接入维护,SUN购买开放及每分钟/模型额度成本,PicPet实际AI/留存分母和政策缺项待补。不得从DAU、合同/标价、预测结果或训练规模推ARR/造假概率。",
|
||||
"boundary": "公开七批321唯一位置及原HTML/GET审计保留;226补读档案中138旧年、88自报两年:59已补官网关联、24当前AI/主体待核、5品牌/年份待核。本系列311独立档案已读,10复用未冒充本轮重读。七批139关联、1既有超年、145旧年、6品牌/年份、30当前AI/交付待核。最后20个初始备注已逐项核对14官网和6缺有效网址,替换具体缺项;5新关联,15留未决,不继续扩池。新增23证据,原495经营记录/ARR/MRR和YC保留。有限来源逐条核对并保留未决,不证明未公开公司覆盖或全部注册/技术/财务审计。",
|
||||
"nextCheck": "本轮有限公开来源首轮核对已落实具体记录/缺项;24新批次及SR007六项AI/身份、六项年份未决保留,不用标签强填。后续只有新增公司原件、可访问产品、注册/品牌链或真实合同/净费/财务日出现时补证;不无限重试同一空页/权限失败,也不由采用/请求/未来全上线预测推ARR/造假。",
|
||||
"limitation": "来源可读不等于声明已独立验证。",
|
||||
"rosterAudit": {
|
||||
"url": "https://speedrun.a16z.com/companies",
|
||||
@@ -3189,8 +3189,8 @@
|
||||
},
|
||||
"outsideTargetYears": 138,
|
||||
"targetYearSelfReports": 88,
|
||||
"newLinkedCompanies": 54,
|
||||
"pendingCurrentAIOrIdentity": 29,
|
||||
"newLinkedCompanies": 59,
|
||||
"pendingCurrentAIOrIdentity": 24,
|
||||
"records": [
|
||||
{
|
||||
"candidateId": "SR001R-C01",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"sourceVersion": "2026-11-01-sr-learning-health-1",
|
||||
"sourceVersion": "2026-11-01-source-closeout-1",
|
||||
"asOf": "2026-11-01",
|
||||
"metric": "platform-mrr-usd",
|
||||
"sampleUnit": "product-or-business",
|
||||
|
||||
Generated
+3
-3
@@ -28,6 +28,9 @@ importers:
|
||||
remark-gfm:
|
||||
specifier: 4.0.1
|
||||
version: 4.0.1(supports-color@7.2.0)
|
||||
sharp:
|
||||
specifier: 0.35.5
|
||||
version: 0.35.5(@types/node@22.20.5)
|
||||
devDependencies:
|
||||
'@tailwindcss/postcss':
|
||||
specifier: 4.3.3
|
||||
@@ -59,9 +62,6 @@ importers:
|
||||
postcss:
|
||||
specifier: 8.5.31
|
||||
version: 8.5.31
|
||||
sharp:
|
||||
specifier: 0.35.5
|
||||
version: 0.35.5(@types/node@22.20.5)
|
||||
tailwindcss:
|
||||
specifier: 4.3.3
|
||||
version: 4.3.3
|
||||
|
||||
@@ -45,14 +45,15 @@ def read_token(filename):
|
||||
return value
|
||||
|
||||
|
||||
def request(base, token, method, path, payload=None, request_id=None):
|
||||
data = None if payload is None else json.dumps(payload, ensure_ascii=False).encode()
|
||||
def request(base, token, method, path, payload=None, request_id=None, *, image_type=None):
|
||||
data = payload if image_type else (None if payload is None else json.dumps(payload, ensure_ascii=False).encode())
|
||||
if data is not None and len(data) > 8 * 1024 * 1024:
|
||||
raise ValueError('Request exceeds 8 MiB; split into smaller atomic batches')
|
||||
headers = {'Authorization': 'Bearer ' + token, 'Accept': 'application/json'}
|
||||
if data is not None:
|
||||
headers['Content-Type'] = 'application/json'
|
||||
headers['Idempotency-Key'] = request_id
|
||||
headers['Content-Type'] = image_type or 'application/json'
|
||||
if request_id is not None:
|
||||
headers['Idempotency-Key'] = request_id
|
||||
opener = urllib.request.build_opener(NoRedirect())
|
||||
for attempt in range(2):
|
||||
req = urllib.request.Request(base + path, data=data, method=method, headers=headers)
|
||||
@@ -127,6 +128,8 @@ def main():
|
||||
editing.add_argument('slug')
|
||||
editing.add_argument('file')
|
||||
editing.add_argument('--request-id')
|
||||
upload = sub.add_parser('upload-image', help='Upload a static image and print its Markdown URL')
|
||||
upload.add_argument('file')
|
||||
saving = sub.add_parser('save')
|
||||
saving.add_argument('file', help='Private JSON file or - for stdin; one document or {documents: [...]}')
|
||||
saving.add_argument('--request-id', help='Reuse this id only with the same input when retrying')
|
||||
@@ -136,7 +139,18 @@ def main():
|
||||
try:
|
||||
base = server_url(args.url)
|
||||
token = read_token(args.key_file)
|
||||
if args.command == 'list':
|
||||
if args.command == 'upload-image':
|
||||
image = Path(args.file)
|
||||
image_types = {'.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.webp': 'image/webp'}
|
||||
image_type = image_types.get(image.suffix.lower())
|
||||
if not image_type:
|
||||
raise ValueError('Use a PNG, JPEG or WebP image')
|
||||
with image.open('rb') as source:
|
||||
data = source.read(8 * 1024 * 1024 + 1)
|
||||
if len(data) > 8 * 1024 * 1024:
|
||||
raise ValueError('Image exceeds 8 MiB')
|
||||
result = request(base, token, 'POST', '/api/documents/images', data, image_type=image_type)
|
||||
elif args.command == 'list':
|
||||
result = request(base, token, 'GET', '/api/documents?' + urllib.parse.urlencode(
|
||||
{'limit': args.limit, 'offset': args.offset}))
|
||||
elif args.command == 'get':
|
||||
|
||||
Reference in New Issue
Block a user