chore(dintel-skills): align Agent Corps with canon v1.0 / BRAND-GUIDE v1.3

Standardize all 9 dintel-* skills + shared infrastructure against the
new D.intelligence canon (brand-canon, fact-sheet, service-architecture,
naming-conventions v1.0) and BRAND-GUIDE v1.3.

Term replacements (applied across SKILL.md, CLAUDE.md, scripts, refs):
- Slogan: SMART Marketing Clinic -> SMART Marketing Intelligence
  (Clinic is now an OurDigital asset; split enforced)
- Core Values: Scientific/Practical -> Science/Practice
- MD category: Marketing Diagnosis -> Measurement Design
- Brand Character: 마케팅 주치의 -> 성과중심의 데이터 기반 마케팅 과학자
- Address: 송파테라타워/황새울로 -> 판교글로벌비즈센터 1층 36호 (13449)
- External email: contact@ -> info@dintelligence.co.kr
- CEO title: D.HIVE CEO & Founder / Senior Advisor -> 대표이사
- Tone keywords: Scientific/Practical/Outcome-oriented
  -> Science-driven/Practice-oriented/Outcome-focused
- Foreign-word literals: 감사 보고서/리포트/결과 -> 진단 ~ (audit->진단)
- Adjacent services: removed Courses (transferred to OurDigital Practice)

Structural changes:
- Insert "v1.3 정합성 - 단일 진실" block citing canon docs in all 9
  SKILL.md files (preserves single source of truth at runtime).
- Bump version (1.0->1.1 or 1.1->1.2) and add canon_compliance: v1.3 +
  last_updated: 2026-05-18 to every frontmatter.
- Expand brand.py: CORPORATE/LAB dicts (full address, biz reg, CEO),
  TRANSLATION_STANDARDS, ADJACENT_SERVICES. PROHIBITED_WORDS grew
  13 -> 24 entries so Brand Guardian flags legacy phrases at runtime.
- Rewrite _dintel-shared/references/dintelligence_brand_guide.md as
  v1.3 canon mirror; sync brand-editor's local copy (no drift).
- Pin design-system reference header to 2026 PPTX v2.0.
- Refresh 73-quotation generate_quotation.py (Sheet 1 cover, Sheet 5
  terms) and 71-brand-editor generate_credential.py output.
- Update audit template title (감사 -> 진단).

Verified by 93-check compliance suite covering frontmatter, canon
citation, prohibited-term grep, Python compile + runtime imports, and
an end-to-end smoke test that generates a quotation .xlsx and inspects
cell content for v1.3 strings + absence of legacy strings.

Refs:
  knowledge-base/canon/{brand-canon,fact-sheet,service-architecture,naming-conventions}.md v1.0
  02_Brand/BRAND-GUIDE-v1.3.md
  knowledge-base/TODO-claude-code-skill-rebuild.md
  knowledge-base/gotcha/01_outdated-facts.md (10 cases)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-18 07:11:52 +09:00
parent ec3b4df1e3
commit 8189473008
29 changed files with 1327 additions and 1131 deletions

View File

@@ -1,6 +1,9 @@
# D.intelligence Quotation Manager
> **Agent #73** | `dintel-quotation-mgr` v1.0.0 | D.intelligence Agent Corps
> **Agent #73** | `dintel-quotation-mgr` v1.1.0 | D.intelligence Agent Corps
> canon_compliance: v1.3 | last_updated: 2026-05-18
> ⚠️ **canon 1순위**: `knowledge-base/canon/fact-sheet.md` v1.0 (인보이스·계약 법인 정보) + `service-architecture.md` v1.0 (모듈·가격 단위). 충돌 시 canon이 우선.
Generate professional quotations and estimates for D.intelligence service modules using a multi-agent sub-system (Scope, Resource, Pricing, Output).

View File

@@ -207,17 +207,25 @@ def generate_xlsx(draft: QuotationDraft, output_dir: Path) -> Path:
# -- Sheet 1: Cover --
ws_cover = wb.active
ws_cover.title = "표지"
ws_cover["B2"] = "D.intelligence :: SMART Marketing Clinic ::"
ws_cover["B2"] = "D.intelligence :: SMART Marketing Intelligence ::"
ws_cover["B2"].font = Font(name="Pretendard", size=16, bold=True)
ws_cover["B4"] = "견적서 (Quotation)"
ws_cover["B4"].font = Font(name="Pretendard", size=24, bold=True)
ws_cover["B6"] = f"고객사: {draft.client_name}"
ws_cover["B7"] = f"업종: {draft.industry}"
ws_cover["B8"] = f"견적번호: {draft.ref}"
ws_cover["B9"] = f"작성일: {draft.date_created.isoformat()}"
ws_cover["B10"] = f"유효기간: {(draft.date_created + timedelta(days=draft.validity_days)).isoformat()}"
ws_cover["B12"] = "DRAFT -- 검토 대기"
ws_cover["B12"].font = Font(color="FF0000", bold=True, size=14)
ws_cover["B3"] = "Analysis, Treatment & Growth"
ws_cover["B3"].font = Font(name="Pretendard", size=10, italic=True)
ws_cover["B5"] = "견적서 (Quotation)"
ws_cover["B5"].font = Font(name="Pretendard", size=24, bold=True)
ws_cover["B7"] = f"고객사: {draft.client_name}"
ws_cover["B8"] = f"업종: {draft.industry}"
ws_cover["B9"] = f"견적번호: {draft.ref}"
ws_cover["B10"] = f"작성일: {draft.date_created.isoformat()}"
ws_cover["B11"] = f"유효기간: {(draft.date_created + timedelta(days=draft.validity_days)).isoformat()}"
ws_cover["B13"] = "DRAFT -- 검토 대기"
ws_cover["B13"].font = Font(color="FF0000", bold=True, size=14)
ws_cover["B15"] = "D.intelligence Co., Ltd. (㈜디인텔리전스) | 458-88-01899"
ws_cover["B15"].font = Font(name="Pretendard", size=9)
ws_cover["B16"] = "경기도 성남시 수정구 창업로 43 판교글로벌비즈센터 업무동 1층 36호 (13449)"
ws_cover["B16"].font = Font(name="Pretendard", size=9)
ws_cover["B17"] = "info@dintelligence.co.kr | dintelligence.co.kr"
ws_cover["B17"].font = Font(name="Pretendard", size=9)
# -- Sheet 2: Scope --
ws_scope = wb.create_sheet("서비스 범위")
@@ -285,7 +293,7 @@ def generate_xlsx(draft: QuotationDraft, output_dir: Path) -> Path:
summary_row += 1
ws_pricing.cell(row=summary_row, column=5, value="Andrew 검토 필요").font = Font(color="FF0000", italic=True)
# -- Sheet 5: Terms --
# -- Sheet 5: Terms (v1.3 정합 — canon/fact-sheet.md) --
ws_terms = wb.create_sheet("계약 조건")
terms = [
("결제 조건", "착수금 50% / 완료 후 50%"),
@@ -294,9 +302,14 @@ def generate_xlsx(draft: QuotationDraft, output_dir: Path) -> Path:
("범위 변경", "서면 합의 후 별도 견적"),
("계약 해지", "착수 전 전액 환불 / 착수 후 진행분 정산"),
("", ""),
("D.intelligence", "SMART Marketing Clinic"),
("법인명 (KR)", "주식회사 디인텔리전스 / ㈜디인텔리전스"),
("법인명 (EN)", "D.intelligence Co., Ltd."),
("사업자등록번호", "458-88-01899"),
("대표이사", "임명재 (Andrew Yim)"),
("주소", "경기도 성남시 수정구 창업로 43 판교글로벌비즈센터 업무동 1층 36호 (13449)"),
("Website", "dintelligence.co.kr"),
("담당자", "Andrew Yim"),
("Email", "info@dintelligence.co.kr"),
("담당자", "임명재 (Andrew Yim), 대표이사"),
]
for row, (label, value) in enumerate(terms, 1):
ws_terms.cell(row=row, column=1, value=label).font = Font(bold=True)