add spec   [wip] refactor