lili a9d1172509 docs(ip): 知识产权申报材料(6软著+4专利)+ 双层复核(Codex×Opus)整改
- 6 件软著材料 ruanzhu-1..6(软件说明书/源文件清单/源代码鉴别材料/申请信息表)
- 4 件发明专利交底材料 patents/01..04 + 知识产权申报总表
- 双层复核报告 + 整改(均经验证、零第三方泄漏):
  · ru-3 补漏纳 2 文件 + 重生成鉴别材料消逐字不符 + 统计→123/10186
  · ru-6 补 service.py(300行)→12/1650;ru-1 修鉴别材料截断边界
  · ru-4/ru-5 计数漂移同步(12841 / 9859);run.py/prompt.py「九门」口径
  · 6 包 清单/鉴别材料/申请表 三者一致
- docs/ip/_tools 确定性重生成器 + README(提交窗口重快照复用)
- 材料含【待填】行政占位,待律所终审 + 著作权人实名提交后生效(尚未提交)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 07:09:16 -07:00

56 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""ru-1 源代码鉴别材料 重生成器(修截断边界 bug:前段第1500行被空行替换 + 省略区间标注差一)。
规则取自 docs/ip/ruanzhu-1-game-studio/源文件清单.md + .txt 头部:
game-studio/src 下 .ts/.vue/.css(排 .d.ts),按相对 game-studio/ 的路径字典序;
每文件前置「/* ======== 文件:<rel> ======== */」;文件尾换行形成块间空行;取前1500+后1500。
只读源码,产物写 /tmp/ru1_new.txt(字节忠实);打印计数与边界行。"""
import os, glob
REPO = "/Users/lili/Project/games-development-ai"
ROOT = os.path.join(REPO, "game-studio")
SRC = os.path.join(ROOT, "src")
EQ = "=" * 80
SEP = "/* ======== 文件:%s ======== */"
files = []
for p in glob.glob(os.path.join(SRC, "**", "*"), recursive=True):
if not os.path.isfile(p):
continue
if not (p.endswith(".ts") or p.endswith(".vue") or p.endswith(".css")):
continue
if p.endswith(".d.ts"):
continue
files.append((os.path.relpath(p, ROOT), p)) # rel = src/App.vue ...
files.sort(key=lambda x: x[0])
concat, nsrc = [], 0
for rel, p in files:
raw = open(p, encoding="utf-8").read()
nsrc += raw.count("\n") # wc -l 口径
concat.append(SEP % rel)
concat.extend(raw.split("\n")) # 末元素 ''(文件尾换行)= 块间空行
total = len(concat)
front, back = concat[:1500], concat[-1500:]
omit_to = total - 1500
nfiles = len(files)
hdr = [
"软件名称绘境AI游戏创作工作室系统[前端] 版本V1.0",
"(源代码鉴别材料 · 简体中文 · 用于中国版权保护中心软件著作权登记)",
"说明:本材料为本软件原创源代码连续摘录。原创源代码有效合计 %d 行,分布于 %d 个源文件(已排除 node_modules、dist、public 静态资源、*.min.js、自动生成的 .d.ts 等第三方与生成物);为标注每个文件归属,材料中另插入了 %d 行「文件分隔注释行」,故连续行号上限为 %d" % (nsrc, nfiles, nfiles, total),
"按软著规范取前 1500 行 + 后 1500 行每页≥50 行,约 60 页)。每个源文件以「/* ======== 文件:相对路径 ======== */」分隔。转 PDF 时每页页眉标注「绘境AI游戏创作工作室系统[前端] V1.0」并附页码。",
]
mid = ["", EQ,
"【中间略:完整源代码共 %d 行,此处省略第 1501 行至第 %d 行,下接后 1500 行】" % (total, omit_to),
EQ, "", EQ, "【后 1500 行】", EQ, ""]
out = hdr + [EQ, "【前 1500 行】", EQ, ""] + front + mid + back
open("/tmp/ru1_new.txt", "w", encoding="utf-8").write("\n".join(out) + "\n")
print("FILES=%d SRC_LINES=%d CONCAT=%d OMIT=1501-%d TXT=%d" % (nfiles, nsrc, total, omit_to, len(out)))
print("FRONT 第1500行(应为真实源码行,非空)= %r" % front[1499])
print("BACK 首行 = %r" % back[0])
ext = {}
for rel, p in files:
ext[rel.split(".")[-1]] = ext.get(rel.split(".")[-1], 0) + 1
print("类型分布:", ext)