后端(主 agent 独立复跑验证,非采信子 agent 自报): - 新建 game-module-ad(广告引擎)+ game-module-trade(分账/结算/提现),克隆黄金模板 project - 契约先行已锁:ad.yaml/trade.yaml + Flyway V6/V7;ad 计费 uk_trace 收紧为 (trace_id,event_type,tenant_id) 防 reward 被 impression 静默吞掉 - ad↔trade Feign seam(AdRevenueApi.getUnsettledRevenue/markSettled)+ project-api 归因(getCreatorUserId,game 模块首个跨模块 Feign,仿 yudao DictDataApi) - AdProvider SPI(mock,留 csj/gdt 注入位);资金安全:金额用分/uk 幂等/状态机 CAS/防超扣/T+1 结算补偿 - pay 不建,复用 yudao-pay 后置(Doc B:收单归 pay、钱包提现归 trade;MVP 钱财闭环 ad→trade 不经收单) - 验证:mvn -pl yudao-server -am compile 全量 BUILD SUCCESS;ad 15 + trade 24 = 39 单测绿;huijing 残留=0、裸 select*=0 前端 game-admin(运营后台): - 克隆 yudao-ui-admin-vue3 裁剪(删 crm/erp/mall/mes/iot 等无关业务模块)+ 5 个 MVP 运营页接 admin-api(审核/精选/看板/广告位/提现审核)+ mock 兜底 - 构建验证移至 mini-desktop(本机 5.8G 内存 OOM,见执行 spec) 文档:HJ-PAR-002 review+execution 双 spec + Workflow 编排脚本 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
236 lines
5.4 KiB
JavaScript
236 lines
5.4 KiB
JavaScript
module.exports = {
|
|
root: true,
|
|
plugins: ['stylelint-order'],
|
|
customSyntax: 'postcss-html',
|
|
extends: ['stylelint-config-standard'],
|
|
rules: {
|
|
'selector-pseudo-class-no-unknown': [
|
|
true,
|
|
{
|
|
ignorePseudoClasses: ['global', 'deep']
|
|
}
|
|
],
|
|
'at-rule-no-unknown': [
|
|
true,
|
|
{
|
|
ignoreAtRules: ['function', 'if', 'each', 'include', 'mixin', 'extend']
|
|
}
|
|
],
|
|
'media-query-no-invalid': null,
|
|
'function-no-unknown': null,
|
|
'no-empty-source': null,
|
|
'named-grid-areas-no-invalid': null,
|
|
// 'unicode-bom': 'never',
|
|
'no-descending-specificity': null,
|
|
'font-family-no-missing-generic-family-keyword': null,
|
|
// 'declaration-colon-space-after': 'always-single-line',
|
|
// 'declaration-colon-space-before': 'never',
|
|
// 'declaration-block-trailing-semicolon': null,
|
|
'rule-empty-line-before': [
|
|
'always',
|
|
{
|
|
ignore: ['after-comment', 'first-nested']
|
|
}
|
|
],
|
|
'unit-no-unknown': [
|
|
true,
|
|
{
|
|
ignoreUnits: ['rpx']
|
|
}
|
|
],
|
|
'order/order': [
|
|
[
|
|
'dollar-variables',
|
|
'custom-properties',
|
|
'at-rules',
|
|
'declarations',
|
|
{
|
|
type: 'at-rule',
|
|
name: 'supports'
|
|
},
|
|
{
|
|
type: 'at-rule',
|
|
name: 'media'
|
|
},
|
|
'rules'
|
|
],
|
|
{
|
|
severity: 'warning'
|
|
}
|
|
],
|
|
// Specify the alphabetical order of the attributes in the declaration block
|
|
'order/properties-order': [
|
|
'position',
|
|
'top',
|
|
'right',
|
|
'bottom',
|
|
'left',
|
|
'z-index',
|
|
'display',
|
|
'float',
|
|
'width',
|
|
'height',
|
|
'max-width',
|
|
'max-height',
|
|
'min-width',
|
|
'min-height',
|
|
'padding',
|
|
'padding-top',
|
|
'padding-right',
|
|
'padding-bottom',
|
|
'padding-left',
|
|
'margin',
|
|
'margin-top',
|
|
'margin-right',
|
|
'margin-bottom',
|
|
'margin-left',
|
|
'margin-collapse',
|
|
'margin-top-collapse',
|
|
'margin-right-collapse',
|
|
'margin-bottom-collapse',
|
|
'margin-left-collapse',
|
|
'overflow',
|
|
'overflow-x',
|
|
'overflow-y',
|
|
'clip',
|
|
'clear',
|
|
'font',
|
|
'font-family',
|
|
'font-size',
|
|
'font-smoothing',
|
|
'osx-font-smoothing',
|
|
'font-style',
|
|
'font-weight',
|
|
'hyphens',
|
|
'src',
|
|
'line-height',
|
|
'letter-spacing',
|
|
'word-spacing',
|
|
'color',
|
|
'text-align',
|
|
'text-decoration',
|
|
'text-indent',
|
|
'text-overflow',
|
|
'text-rendering',
|
|
'text-size-adjust',
|
|
'text-shadow',
|
|
'text-transform',
|
|
'word-break',
|
|
'word-wrap',
|
|
'white-space',
|
|
'vertical-align',
|
|
'list-style',
|
|
'list-style-type',
|
|
'list-style-position',
|
|
'list-style-image',
|
|
'pointer-events',
|
|
'cursor',
|
|
'background',
|
|
'background-attachment',
|
|
'background-color',
|
|
'background-image',
|
|
'background-position',
|
|
'background-repeat',
|
|
'background-size',
|
|
'border',
|
|
'border-collapse',
|
|
'border-top',
|
|
'border-right',
|
|
'border-bottom',
|
|
'border-left',
|
|
'border-color',
|
|
'border-image',
|
|
'border-top-color',
|
|
'border-right-color',
|
|
'border-bottom-color',
|
|
'border-left-color',
|
|
'border-spacing',
|
|
'border-style',
|
|
'border-top-style',
|
|
'border-right-style',
|
|
'border-bottom-style',
|
|
'border-left-style',
|
|
'border-width',
|
|
'border-top-width',
|
|
'border-right-width',
|
|
'border-bottom-width',
|
|
'border-left-width',
|
|
'border-radius',
|
|
'border-top-right-radius',
|
|
'border-bottom-right-radius',
|
|
'border-bottom-left-radius',
|
|
'border-top-left-radius',
|
|
'border-radius-topright',
|
|
'border-radius-bottomright',
|
|
'border-radius-bottomleft',
|
|
'border-radius-topleft',
|
|
'content',
|
|
'quotes',
|
|
'outline',
|
|
'outline-offset',
|
|
'opacity',
|
|
'filter',
|
|
'visibility',
|
|
'size',
|
|
'zoom',
|
|
'transform',
|
|
'box-align',
|
|
'box-flex',
|
|
'box-orient',
|
|
'box-pack',
|
|
'box-shadow',
|
|
'box-sizing',
|
|
'table-layout',
|
|
'animation',
|
|
'animation-delay',
|
|
'animation-duration',
|
|
'animation-iteration-count',
|
|
'animation-name',
|
|
'animation-play-state',
|
|
'animation-timing-function',
|
|
'animation-fill-mode',
|
|
'transition',
|
|
'transition-delay',
|
|
'transition-duration',
|
|
'transition-property',
|
|
'transition-timing-function',
|
|
'background-clip',
|
|
'backface-visibility',
|
|
'resize',
|
|
'appearance',
|
|
'user-select',
|
|
'interpolation-mode',
|
|
'direction',
|
|
'marks',
|
|
'page',
|
|
'set-link-source',
|
|
'unicode-bidi',
|
|
'speak'
|
|
]
|
|
},
|
|
ignoreFiles: ['**/*.js', '**/*.jsx', '**/*.tsx', '**/*.ts'],
|
|
overrides: [
|
|
{
|
|
files: ['*.vue', '**/*.vue', '*.html', '**/*.html'],
|
|
extends: ['stylelint-config-recommended', 'stylelint-config-html'],
|
|
rules: {
|
|
'keyframes-name-pattern': null,
|
|
'selector-class-pattern': null,
|
|
'no-duplicate-selectors': null,
|
|
'selector-pseudo-class-no-unknown': [
|
|
true,
|
|
{
|
|
ignorePseudoClasses: ['deep', 'global']
|
|
}
|
|
],
|
|
'selector-pseudo-element-no-unknown': [
|
|
true,
|
|
{
|
|
ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted']
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|